<?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>206721</bug_id>
          
          <creation_ts>2020-01-23 17:23:05 -0800</creation_ts>
          <short_desc>Web Inspector: consolidate UIProcess/WebProcess files into Inspector folders</short_desc>
          <delta_ts>2020-01-28 01:46:54 -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>Web Inspector</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>basuke</cc>
    
    <cc>bburg</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>chris.reid</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>japhet</cc>
    
    <cc>joepeck</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mkwst</cc>
    
    <cc>pnormand</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1610430</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 17:23:05 -0800</bug_when>
    <thetext>All of the Web Inspector code should really live in
 - Source/WebKit/UIProcess/Inspector
 - Source/WebKit/WebProcess/Inspector
rather than be spread around.

This will make it easier for future Web Inspector developers to find code related to Web Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610467</commentid>
    <comment_count>1</comment_count>
      <attachid>388635</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 18:39:30 -0800</bug_when>
    <thetext>Created attachment 388635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610469</commentid>
    <comment_count>2</comment_count>
      <attachid>388636</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 18:42:10 -0800</bug_when>
    <thetext>Created attachment 388636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610470</commentid>
    <comment_count>3</comment_count>
      <attachid>388637</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 18:43:17 -0800</bug_when>
    <thetext>Created attachment 388637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610475</commentid>
    <comment_count>4</comment_count>
      <attachid>388640</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 18:54:38 -0800</bug_when>
    <thetext>Created attachment 388640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610485</commentid>
    <comment_count>5</comment_count>
      <attachid>388644</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 19:03:27 -0800</bug_when>
    <thetext>Created attachment 388644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610498</commentid>
    <comment_count>6</comment_count>
      <attachid>388647</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 20:24:08 -0800</bug_when>
    <thetext>Created attachment 388647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610541</commentid>
    <comment_count>7</comment_count>
      <attachid>388658</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-23 23:44:46 -0800</bug_when>
    <thetext>Created attachment 388658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610706</commentid>
    <comment_count>8</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-24 09:12:43 -0800</bug_when>
    <thetext>Any reason this is a cq? Devin? Socket side seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610753</commentid>
    <comment_count>9</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-24 10:44:23 -0800</bug_when>
    <thetext>(In reply to Don Olmstead from comment #8)
&gt; Any reason this is a cq? Devin?
I was waiting for EWS to be all green.

&gt; Socket side seems fine.
Thanks for taking a look! =D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611305</commentid>
    <comment_count>10</comment_count>
      <attachid>388658</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-26 22:29:34 -0800</bug_when>
    <thetext>Comment on attachment 388658
Patch

Rejecting attachment 388658 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 388658, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
tcher.cpp
patching file Source/WebKit/WebProcess/Inspector/WebInspectorFrontendAPIDispatcher.h
patching file Source/WebKit/WebProcess/Inspector/WebInspectorInterruptDispatcher.cpp
patching file Source/WebKit/WebProcess/Inspector/WebInspectorInterruptDispatcher.h
patching file Source/WebKit/WebProcess/Inspector/WebInspectorInterruptDispatcher.messages.in
patching file Source/WebKit/WebProcess/Inspector/WebInspectorUI.cpp
patching file Source/WebKit/WebProcess/Inspector/WebInspectorUI.h
patching file Source/WebKit/WebProcess/Inspector/WebInspectorUI.messages.in
patching file Source/WebKit/WebProcess/Inspector/WebPageInspectorTarget.cpp
patching file Source/WebKit/WebProcess/Inspector/WebPageInspectorTarget.h
patching file Source/WebKit/WebProcess/Inspector/WebPageInspectorTargetController.cpp
patching file Source/WebKit/WebProcess/Inspector/WebPageInspectorTargetController.h
patching file Source/WebKit/WebProcess/Inspector/WebPageInspectorTargetFrontendChannel.cpp
patching file Source/WebKit/WebProcess/Inspector/WebPageInspectorTargetFrontendChannel.h
patching file Source/WebKit/WebProcess/Inspector/gtk/WebInspectorUIGtk.cpp
patching file Source/WebKit/WebProcess/Inspector/mac/WebInspectorUIMac.mm
patching file Source/WebKit/WebProcess/Inspector/win/WebInspectorUIWin.cpp
patching file Source/WebKit/WebProcess/WebCoreSupport/WebInspectorClient.cpp
rm &apos;Source/WebKit/WebProcess/WebCoreSupport/WebInspectorClient.cpp&apos;
patching file Source/WebKit/WebProcess/WebCoreSupport/WebInspectorClient.h
rm &apos;Source/WebKit/WebProcess/WebCoreSupport/WebInspectorClient.h&apos;
patching file Source/WebKit/WebProcess/WebPage/RemoteWebInspectorUI.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/RemoteWebInspectorUI.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/RemoteWebInspectorUI.h
rm &apos;Source/WebKit/WebProcess/WebPage/RemoteWebInspectorUI.h&apos;
patching file Source/WebKit/WebProcess/WebPage/RemoteWebInspectorUI.messages.in
rm &apos;Source/WebKit/WebProcess/WebPage/RemoteWebInspectorUI.messages.in&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspector.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspector.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspector.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspector.h&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspector.messages.in
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspector.messages.in&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.h&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorInterruptDispatcher.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorInterruptDispatcher.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorInterruptDispatcher.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorInterruptDispatcher.h&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorInterruptDispatcher.messages.in
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorInterruptDispatcher.messages.in&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorUI.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorUI.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorUI.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorUI.h&apos;
patching file Source/WebKit/WebProcess/WebPage/WebInspectorUI.messages.in
rm &apos;Source/WebKit/WebProcess/WebPage/WebInspectorUI.messages.in&apos;
patching file Source/WebKit/WebProcess/WebPage/WebPageInspectorTarget.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebPageInspectorTarget.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebPageInspectorTarget.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebPageInspectorTarget.h&apos;
patching file Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetController.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetController.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetController.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetController.h&apos;
patching file Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.h
rm &apos;Source/WebKit/WebProcess/WebPage/WebPageInspectorTargetFrontendChannel.h&apos;
patching file Source/WebKit/WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp&apos;
patching file Source/WebKit/WebProcess/WebPage/mac/WebInspectorUIMac.mm
rm &apos;Source/WebKit/WebProcess/WebPage/mac/WebInspectorUIMac.mm&apos;
patching file Source/WebKit/WebProcess/WebPage/win/WebInspectorUIWin.cpp
rm &apos;Source/WebKit/WebProcess/WebPage/win/WebInspectorUIWin.cpp&apos;

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/13311960</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611312</commentid>
    <comment_count>11</comment_count>
      <attachid>388831</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-26 23:14:35 -0800</bug_when>
    <thetext>Created attachment 388831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611721</commentid>
    <comment_count>12</comment_count>
      <attachid>388831</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-27 17:13:39 -0800</bug_when>
    <thetext>Comment on attachment 388831
Patch

Clearing flags on attachment: 388831

Committed r255214: &lt;https://trac.webkit.org/changeset/255214&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611722</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-27 17:13:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611725</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-27 17:14:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/58940928&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611859</commentid>
    <comment_count>15</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-01-28 01:46:54 -0800</bug_when>
    <thetext>Unreviewed, speculative gtk build fix: &lt;https://trac.webkit.org/r255231&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388635</attachid>
            <date>2020-01-23 18:39:30 -0800</date>
            <delta_ts>2020-01-23 18:42:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>749183</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLjFmOGY0ODFhNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg0IEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJn
ZXRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRh
cmdldFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAuCisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0
b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5o
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmguCisgICAgICAgICogVUlQcm9jZXNz
L0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbTogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JX
S1dlYlZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmguCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdp
bi5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJv
eHlXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYklu
c3BlY3RvclByb3h5V2luLmNwcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4uCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3Bl
Y3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW46
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3Bl
Y3RvclVJR3RrLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5z
cGVjdG9yVUlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUF0dGFjaG1lbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1Rlc3RpbmcubW06CisgICAgICAgIEFkZCBzb21lIG1pc3NpbmcgaW5jbHVkZXMuCisKIDIwMjAt
MDEtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKW2lPU10gUmVtb3Zl
IHRoZSBJT0hJREV2ZW50U2VydmljZUZhc3RQYXRoVXNlckNsaWVudCBJT0tpdCBjbGFzcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01h
a2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAuLmU1ODdmN2QwOWM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvRG93bmxvYWRzIgogICAgIiR7V0VCS0lUX0RJUn0v
VUlQcm9jZXNzL0dhbWVwYWQiCiAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvR1BVIgorICAg
ICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3IiCiAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvTGF1bmNoZXIiCiAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvTmV0d29yayIK
ICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scyIKQEAg
LTE0OCwxMiArMTQ5LDEwIEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKICAgIFNoYXJl
ZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluCgogICAgVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSAgICBVSVByb2Nlc3MvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3Jl
Lm1lc3NhZ2VzLmluCiAgICBVSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluCiAgICBVSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
ICAgVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCi0gICAg
VUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAgICBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCiAgICBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1l
c3NhZ2VzLmluCiAgICBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KQEAgLTE2
Myw2ICsxNjIsOSBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCgogICAgVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCgorICAgIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KKyAgICBVSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisKICAgIFVJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KCiAgICBVSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCA5ODA4MWFhNmIyYy4uNmRjYmIyMzc1
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
QEAgLTc5LDExICs3OSwxMiBAQCAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvQ29jb2EvVmlkZW9G
dWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorJChQ
Uk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xl
Z2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElS
KS9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNz
L1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLm1lc3NhZ2Vz
LmluCkBAIC05MSw3ICs5Miw2IEBAICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tZXNzCiAkKFBST0pFQ1Rf
RElSKS9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9VSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluCi0kKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5tZXNzYWdlcy5pbgpAQCAt
MTEyLDYgKzExMiwxMCBAQCAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGli
V2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93
ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFu
YWdlci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVt
b3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5p
bgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwubWVzc2FnZXMuaW4KQEAgLTEzMywxMyArMTM3LDkg
QEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1l
c3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5z
cGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9W
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5t
ZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
ci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggYzM0YWY1Y2QzYTEuLjgxMGUwZTE4MzNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCkBAIC01NCw2ICs1NCw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvd2Vi
cnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlIFwKKyAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3Mv
TWVkaWFDYWNoZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhU3RyZWFtIFwKICAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTmV0d29yayBcCkBAIC03OSw2ICs4MCw3IEBAIFZQQVRI
ID0gXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0RhdGFiYXNlcyBcCiAgICAgJChXZWJLaXQy
KS9VSVByb2Nlc3MvRG93bmxvYWRzIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9HUFUgXAor
ICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0luc3BlY3RvciBcCiAgICAgJChXZWJLaXQyKS9VSVBy
b2Nlc3MvTWVkaWFTdHJlYW0gXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL05ldHdvcmsgXAog
ICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CmluZGV4IDNkYTI4MDBjOWM1Li5kN2JkMTdhZmI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNjcs
MTMgKzI2NywxMSBAQCBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKIFVJUHJvY2Vzcy9G
cmFtZUxvYWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQ
cm94eS5jcHAKLVVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKIFVJUHJvY2Vzcy9M
ZWdhY3lHbG9iYWxTZXR0aW5ncy5jcHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAogVUlQ
cm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5j
cHAKIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKLVVJUHJvY2Vzcy9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAKIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAog
VUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAogVUlQcm9jZXNzL1N1c3BlbmRlZFBhZ2VQ
cm94eS5jcHAKQEAgLTMwNiwxNSArMzA0LDExIEBAIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNw
cAogVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvV2Vi
R2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25Qcm92
aWRlci5jcHAKLVVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKLVVJUHJvY2Vzcy9XZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuY3BwCiBVSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmNwcAog
VUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwCi1VSVByb2Nlc3Mv
V2ViUGFnZURlYnVnZ2FibGUuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdl
SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwCi1VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXIuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAogVUlQcm9jZXNzL1dlYlBhc3Rl
Ym9hcmRQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTQyNiw2ICs0
MjAsMTMgQEAgVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKIAogVUlQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzUHJveHkuY3BwCiAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0UHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAK
K1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAorVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisKIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL05v
dGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uLmNwcAogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMv
V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcApAQCAtNTE3LDYgKzUxOCwxNiBAQCBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRp
b25IYW5kbGUuY3BwCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRs
ZU5vZGVIYW5kbGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgQG5vLXVuaWZ5CiAKK1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNw
cAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVy
LmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcAorV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKK1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKwogV2ViUHJv
Y2Vzcy9NZWRpYVN0cmVhbS9NZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcAogV2ViUHJv
Y2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCiAK
QEAgLTU5Myw3ICs2MDQsNiBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGll
bnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcAotV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5jcHAKQEAgLTYxMCwyMyArNjIwLDE1
IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFn
ZS9FdmVudERpc3BhdGNoZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJDb29raWVKYXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRG9j
dW1lbnRMb2FkZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCi1XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvclVJLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3Zl
cmxheS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3Bw
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDZhOGUyZTY5MDVjLi5jNDE3NDRhMzI4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dApAQCAtMjI5LDcgKzIyOSw2IEBAIFVJUHJvY2Vzcy9XZWJNZWRpYVNlc3Npb25Gb2N1
c01hbmFnZXIuY3BwCiBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyQ2xpZW50
LmNwcAogVUlQcm9jZXNzL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKIFVJUHJvY2Vzcy9X
S0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tCi1VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdo
bGlnaHRWaWV3Lm1tCiAKIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFSZWNvcmQuY3BwCiAK
QEAgLTQwMiw2ICs0MDEsMTQgQEAgVUlQcm9jZXNzL0dhbWVwYWQvY29jb2EvVUlHYW1lcGFkUHJv
dmlkZXJDb2NvYS5tbQogVUlQcm9jZXNzL0dhbWVwYWQvaW9zL1VJR2FtZXBhZFByb3ZpZGVySU9T
Lm1tCiBVSVByb2Nlc3MvR2FtZXBhZC9tYWMvVUlHYW1lcGFkUHJvdmlkZXJNYWMubW0KIAorVUlQ
cm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCitVSVByb2Nl
c3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5t
bQorCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5t
bQorVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KK1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KK1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCisKIFVJUHJvY2Vzcy9pb3Mv
Zm9ybXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tEYXRl
UGlja2VyVmlld0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2Fk
UGFuZWwubW0KQEAgLTQ1MSw3ICs0NTgsNiBAQCBVSVByb2Nlc3MvaW9zL1dLRHJhd2luZ1ZpZXcu
bW0KIFVJUHJvY2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCiBVSVByb2Nlc3Mv
aW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbQogVUlQcm9j
ZXNzL2lvcy9XS0hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLm1tCi1VSVByb2Nl
c3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCiBVSVByb2Nl
c3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQogVUlQcm9jZXNzL2lvcy9XS01v
dXNlR2VzdHVyZVJlY29nbml6ZXIubW0KIFVJUHJvY2Vzcy9pb3MvV0tQYXNzd29yZFZpZXcubW0K
QEAgLTQ3MSw3ICs0NzcsNiBAQCBVSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcAogVUlQcm9j
ZXNzL21hYy9IaWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL21hYy9MZWdh
Y3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFj
Lm1tCi1VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCiBVSVByb2Nl
c3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3BwCiBVSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJv
bGxlci5tbQogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtNDgyLDE1ICs0ODcs
MTIgQEAgVUlQcm9jZXNzL21hYy9XZWJDb2xvclBpY2tlck1hYy5tbQogVUlQcm9jZXNzL21hYy9X
ZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYkNvb2tpZU1hbmFnZXJQ
cm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25N
YWMubW0KLVVJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFj
Lm1tCiBVSVByb2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9X
aW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tCiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCi1VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KLVVJUHJvY2Vz
cy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1Zp
ZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlLm1tCiBV
SVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQpAQCAtNTc3LDYgKzU3OSw4IEBAIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXIubW0KIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5q
ZWN0ZWRCdW5kbGVNYWMubW0KIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3Rv
clVJTWFjLm1tCisKIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0b3JhZ2VNYW5h
Z2VyLmNwcAogCiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2lu
TWFjLm1tCkBAIC02MTgsNyArNjIyLDYgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVhTWFjLmNwcAogV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9QYWdlQmFubmVyTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCi1XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYkluc3BlY3RvclVJTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJh
c2UubW0KIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dE1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggMWVmNzNiYzIxNGMuLjg1YWIwYTNlMmM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0dUSy50eHQKQEAgLTIxNSw2ICsyMTUsMTIgQEAgVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKIFVJ
UHJvY2Vzcy9nZW9jbHVlL0dlb2NsdWVHZW9sb2NhdGlvblByb3ZpZGVyLmNwcAogCitVSVByb2Nl
c3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorCitVSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKK1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorVUlQcm9jZXNzL0luc3BlY3Rv
ci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcAorCiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xp
Yi9Qcm9jZXNzTGF1bmNoZXJHTGliLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9MYXVuY2hlci9n
bGliL0J1YmJsZXdyYXBMYXVuY2hlci5jcHAgQG5vLXVuaWZ5CiAKQEAgLTIzMCw3ICsyMzYsNiBA
QCBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvdW5peC9XZWJzaXRlRGF0YVN0b3JlVW5peC5jcHAKIAog
VUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcCBAbm8tdW5pZnkKIAotVUlQcm9j
ZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAogVUlQcm9jZXNzL2dsaWIvV2ViUHJv
Y2Vzc1Bvb2xHTGliLmNwcAogVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAK
IFVJUHJvY2Vzcy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcCBAbm8tdW5pZnkKQEAgLTI0
OCw3ICsyNTMsNiBAQCBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAogVUlQ
cm9jZXNzL2d0ay9Qb2ludGVyTG9ja01hbmFnZXIuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0
ay9Qb2ludGVyTG9ja01hbmFnZXJXYXlsYW5kLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsv
UG9pbnRlckxvY2tNYW5hZ2VyWDExLmNwcCBAbm8tdW5pZnkKLVVJUHJvY2Vzcy9ndGsvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNw
cCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVmlld1NuYXBzaG90U3RvcmVHdGsuY3BwCkBAIC0yNTYs
OCArMjYwLDYgQEAgVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAgQG5vLXVuaWZ5
CiBVSVByb2Nlc3MvZ3RrL1dlYkNvbG9yUGlja2VyR3RrLmNwcAogVUlQcm9jZXNzL2d0ay9XZWJD
b250ZXh0TWVudVByb3h5R3RrLmNwcAogVUlQcm9jZXNzL2d0ay9XZWJEYXRhTGlzdFN1Z2dlc3Rp
b25zRHJvcGRvd25HdGsuY3BwCi1VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cAotVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCiBVSVByb2Nlc3MvZ3Rr
L1dlYlBhZ2VQcm94eUd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1dlYlBhc3RlYm9h
cmRQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBA
IC0zOTIsNiArMzk0LDggQEAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01YUGF0aFJlc3VsdC5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9nbGli
L0luamVjdGVkQnVuZGxlR2xpYi5jcHAKIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYklu
c3BlY3RvclVJR3RrLmNwcAorCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9y
YWdlTWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3VuaXgvTmV0c2Nh
cGVQbHVnaW5Vbml4LmNwcCBAbm8tdW5pZnkKQEAgLTQyMyw3ICs0MjcsNiBAQCBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL0FjY2VsZXJhdGVkU3VyZmFjZVdheWxhbmQuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL0FjY2VsZXJhdGVkU3VyZmFjZVgxMS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNw
ZWN0b3JVSUd0ay5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKIFdl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCmluZGV4IDQzYTQ3ZGQ3ZDBhLi4y
ZTA2NDlhOGRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0
dGFjaG1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVu
dC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IE9CSkNfQ0xBU1MgTlNGaWxlV3JhcHBlcjsKK09CSkNfQ0xBU1MgTlNTdHJpbmc7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KaW5kZXggZmM0ZDg1
NmYwMmUuLmVkNTk4ODFjNWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9y
dCAiV2ViVmlld0ltcGwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKICNp
bXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9uQnViYmxlLmg+
CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9J
bnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjY5MjhjYTJmYmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcApAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgorCisjaW5jbHVk
ZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgIldlYlBhZ2VNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJn
ZXRQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIG1h
a2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0UHJveHk+KHBhZ2UsIHRhcmdldElkLCB0eXBlKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQ
cm94eTo6Y3JlYXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQor
eworICAgIGF1dG8gdGFyZ2V0ID0gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNp
b25hbFBhZ2UucGFnZSgpLCB0YXJnZXRJZCwgdHlwZSk7CisgICAgdGFyZ2V0LT5tX3Byb3Zpc2lv
bmFsUGFnZSA9IG1ha2VXZWFrUHRyKHByb3Zpc2lvbmFsUGFnZSk7CisgICAgcmV0dXJuIHRhcmdl
dDsKK30KKworSW5zcGVjdG9yVGFyZ2V0UHJveHk6Okluc3BlY3RvclRhcmdldFByb3h5KFdlYlBh
Z2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlIHR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1faWRlbnRpZmll
cih0YXJnZXRJZCkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCit2b2lkIEluc3BlY3RvclRh
cmdldFByb3h5Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAg
ICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJ
bnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICBt
X3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVy
KCksIGNvbm5lY3Rpb25UeXBlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRp
c2Nvbm5lY3QoKQoreworICAgIGlmIChpc1BhdXNlZCgpKQorICAgICAgICByZXN1bWUoKTsKKwor
ICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1By
b2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5l
Y3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJv
eHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50
aWZpZXIoKSwgbWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdl
KSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFs
VGFyZ2V0KCkKK3sKKyAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wg
SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwoKSBjb25zdAoreworICAgIHJldHVy
biAhIW1fcHJvdmlzaW9uYWxQYWdlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdl
dFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEyMjM5Y2Vj
OGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L0luc3BlY3RvclRhcmdldFByb3h5LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFByb3Zpc2lvbmFsUGFnZVByb3h5OworY2xhc3MgV2ViUGFnZVByb3h5OworCisvLyBO
T1RFOiBUaGlzIFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0IGNhcmUgYWJv
dXQgdGhlIGZyb250ZW5kIGNoYW5uZWwsIHNpbmNlCisvLyBhbnkgdGFyZ2V0IC0+IGZyb250ZW5k
IG1lc3NhZ2VzIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0aCBhIHRhcmdl
dElkLgorCitjbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQ
YWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgSW5zcGVjdG9yVGFyZ2V0UHJv
eHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRUeXBlKTsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9IGRlZmF1bHQ7
CisKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFs
VGFyZ2V0KCk7CisgICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBl
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlwZTsKKyAgICBXZWFrUHRy
PFByb3Zpc2lvbmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxOTJjMjlmNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNw
cApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVkZSAiQVBJRGVidWdn
YWJsZUluZm8uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3Rv
clVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQorICAgIDog
bV9kZWJ1Z2dhYmxlSW5mbyhBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUlu
Zm9EYXRhOjplbXB0eSgpKSkKK3sKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6On5SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eSgpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkKK3sKKyAgICBj
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2UtPnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQo
KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+
JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQorewor
ICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgbV9kZWJ1Z2dhYmxlSW5m
byA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0g
YmFja2VuZENvbW1hbmRzVVJMOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1
Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1hbmRzVVJMKSk7CisgICAgbV9pbnNwZWN0b3JQ
YWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQ
YWdlVVJMKCkpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9t
QmFja2VuZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQ3Jhc2goKQoreworICAgIC8vIEJl
aGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQganVzdCBjbG9zZWQsIHNvIGNsaWVudHMgYXJlIGluZm9y
bWVkIHRoZSBmcm9udGVuZCBpcyBnb25lLgorICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCit7CisgICAgYnJpbmdUb0Zyb250
KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1l
c3NhZ2UpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmREaWRD
bG9zZSgpCit7CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBwcm90ZWN0KCp0aGlz
KTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJvbUZyb250
ZW5kKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIEFTU0VSVCghbV9iYWNrZW5k
Q29tbWFuZHNVUkwuaXNFbXB0eSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7CisgICAgbG9hZChtX2RlYnVnZ2FibGVJbmZvLmNvcHlSZWYoKSwgbV9iYWNrZW5kQ29tbWFu
ZHNVUkwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkK
K3sKKyAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3RlZFVSTCwgY29u
dGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlRGlhbG9nKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoc3VnZ2VzdGVkVVJMLCBj
b250ZW50KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkK
K3sKKyAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgcGxh
dGZvcm1PcGVuSW5OZXdUYWIodXJsKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgdHJhY2tJbnNwZWN0
b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbnVsbHB0cik7CisKKyAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlE
KCksICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hc3N1bWVSZWFkQWNj
ZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JCYXNlVVJMKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICB1bnRyYWNr
SW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0g
bnVsbHB0cjsKKworICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30K
KworI2lmICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQorV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0KK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0
JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93
RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5O
ZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKSB7IH0KKyNlbmRpZiAvLyAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5mYWI1OGY4Y2UwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCkBAIC0w
LDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElP
YmplY3QuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMpCitPQkpDX0NMQVNTIE5TVVJMOworT0JK
Q19DTEFTUyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsK
K09CSkNfQ0xBU1MgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyOworT0JKQ19D
TEFTUyBXS1dlYlZpZXc7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2Vy
dGlmaWNhdGVJbmZvOworfQorCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIERlYnVnZ2FibGVJbmZv
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3Mg
V2ViVmlldzsKKworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgflJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0gMDsKK307CisKK2Ns
YXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpKTsK
KyAgICB9CisKKyAgICB+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIHZvaWQgc2V0
Q2xpZW50KFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQg
PSBjbGllbnQ7IH0KKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKKwor
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBsb2FkKFJlZjxBUEk6OkRlYnVnZ2Fi
bGVJbmZvPiYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7CisgICAgdm9pZCBj
bG9zZUZyb21CYWNrZW5kKCk7CisgICAgdm9pZCBzaG93KCk7CisKKyAgICB2b2lkIHNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdy5nZXQoKTsg
fQorICAgIFdLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OworCisgICAgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQorI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZShjb25z
dCBDU3RyaW5nJik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBMUkVT
VUxUIHNpemVDaGFuZ2UoKTsKKyAgICBMUkVTVUxUIG9uQ2xvc2UoKTsKKworICAgIHN0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworI2Vu
ZGlmCisKKyAgICB2b2lkIGNsb3NlRnJvbUNyYXNoKCk7CisKK3ByaXZhdGU6CisgICAgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBv
dmVycmlkZTsKKworICAgIC8vIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IG1lc3NhZ2VzLgorICAg
IHZvaWQgZnJvbnRlbmREaWRDbG9zZSgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCBy
ZXNldFN0YXRlKCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHNhdmUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVu
Y29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CisgICAgdm9pZCBzZXRTaGVldFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKTsK
KyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzaG93
Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgdm9pZCBj
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7CisKKyAgICAvLyBQbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuCisgICAgV2Vi
UGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZv
aWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZv
cm1SZXNldFN0YXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIHBs
YXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0
Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKworICAgIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIgfTsKKyAgICBX
ZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKworICAgIFJlZjxBUEk6
OkRlYnVnZ2FibGVJbmZvPiBtX2RlYnVnZ2FibGVJbmZvOworICAgIFN0cmluZyBtX2JhY2tlbmRD
b21tYW5kc1VSTDsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8V0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3OworICAgIFJldGFpblB0cjxOU1dpbmRv
dz4gbV93aW5kb3c7CisgICAgUmV0YWluUHRyPFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpD
QWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5T
VVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
bV9zaGVldFJlY3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBt
X3dlYlZpZXcgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7IG51bGxwdHIg
fTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBIV05EIG1fZnJvbnRlbmRI
YW5kbGU7CisgICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlMDkxYjc4ZmI2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkgeworICAgIEZyb250ZW5kRGlkQ2xvc2UoKQorICAgIFJlb3BlbigpCisgICAg
UmVzZXRTdGF0ZSgpCisgICAgQnJpbmdUb0Zyb250KCkKKworICAgIFNhdmUoU3RyaW5nIGZpbGVu
YW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KQorICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQorCisgICAgU2V0
U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCisgICAgU3RhcnRXaW5kb3dEcmFn
KCkKKworICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQorICAgIFNob3dDZXJ0aWZpY2F0ZShX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQorCisgICAgU2VuZE1lc3Nh
Z2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjNkNzA1ZTgzZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3Bw
CkBAIC0wLDAgKzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEx
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKwor
I2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkF1dG9t
YXRpb25TZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYklu
c3BlY3Rvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdl
R3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
U2V0Rm9yU2NvcGUuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJJbnNwZWN0
b3JQcm94eUNsaWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5p
bXVtV2luZG93V2lkdGggPSA1MDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6
bWluaW11bVdpbmRvd0hlaWdodCA9IDQwMDsKKworY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9y
UHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCA9IDEwMDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCA9IDY1MDsKKworV2ViSW5zcGVjdG9yUHJv
eHk6OldlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgOiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZEFm
dGVySW5hY3Rpdml0eVRpbWVyRmlyZWQpCisjZW5kaWYKK3sKKyAgICBpZiAoaW5zcGVjdGVkUGFn
ZSAmJiBpbnNwZWN0ZWRQYWdlLT5oYXNSdW5uaW5nUHJvY2VzcygpKSB7CisgICAgICAgIG1faW5z
cGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yUHJveHk6On5XZWJJbnNwZWN0b3JQcm94eSgpCit7
Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0aW9uTGV2ZWwoKSBjb25z
dAoreworICAgIHJldHVybiBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKTsK
K30KKworV2ViUHJlZmVyZW5jZXMmIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlUHJl
ZmVyZW5jZXMoKSBjb25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIHJl
dHVybiBtX2luc3BlY3RvclBhZ2UtPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIGlmIChtX2luc3BlY3Rl
ZFBhZ2UpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpOworICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworCisgICAgbV9pbnNwZWN0
ZWRQYWdlID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVj
dG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsK
K30KKworLy8gUHVibGljIEFQSXMKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzRnJvbnQoKQor
eworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gcGxhdGZvcm1Jc0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmNvbm5lY3QoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9zaG93TWVzc2FnZVNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2hvd01lc3NhZ2VTZW50ID0gdHJ1ZTsKKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0g
dHJ1ZTsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpOb3RpZnlO
ZWVkRGVidWdnZXJCcmVhaygpLCAwKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U2hvdygpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2hvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgICAgIGJyaW5nVG9Gcm9udCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY29ubmVjdCgpOworCisgICAgLy8gRG9uJ3QgaWdub3Jl
IHRoZSBmaXJzdCBicmluZ1RvRnJvbnQgc28gaXQgb3BlbnMgdGhlIEluc3BlY3Rvci4KKyAgICBt
X2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmhpZGUoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgcGxhdGZvcm1IaWRlKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OkNsb3NlKCkpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGb3JDcmFzaCgp
Cit7CisgICAgY2xvc2UoKTsKKworICAgIHBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIGlmICghbV9pbnNwZWN0
ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjbG9zZSgpOworICAgIHNob3coKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCit7CisgICAgaW5zcGVjdG9y
UGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKKyAgICBp
bnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7
CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNobWVu
dFNpZGUoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JT
dGFydHNBdHRhY2hlZCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUlu
c3BlY3RvcldpbmRvd0ZyYW1lKCk7CisKKyAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXQoKQoreworICAgIGlmIChtX2luc3BlY3RlZFBh
Z2UpIHsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUZv
ck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKK3sKKyAgICBBU1NF
UlQoIW1faW5zcGVjdGVkUGFnZSk7CisgICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UpOworCisgICAg
bV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnBy
b2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlz
KTsKKworICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24oKSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFj
aG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yOjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIp
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUoKQoreworICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVGcm9udGVu
ZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTaG93Q29uc29sZSgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd1Jl
c291cmNlcygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dSZXNvdXJjZXMoKSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBm
cmFtZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFt
ZUlEKCkpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoQm90dG9tKCkKK3sK
KyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmF0dGFjaFJpZ2h0KCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OlJp
Z2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoTGVmdCgpCit7CisgICAg
YXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpMZWZ0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRlIHNpZGUpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UgfHwgIWNhbkF0dGFjaCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNoZWQg
PSB0cnVlOworICAgIG1fYXR0YWNobWVudFNpZGUgPSBzaWRlOworCisgICAgaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNobWVudFNpZGUoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHNpZGUpKTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5zcGVjdG9y
UGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CisKKyAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNo
ZWQodHJ1ZSkpOworCisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExl
ZnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHBsYXRmb3JtQXR0YWNoKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmRldGFjaCgpCit7CisgICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwor
CisgICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CisKKyAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFsc2UpKTsKKyAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hl
ZCgpKTsKKworICAgIHBsYXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBpbnNw
ZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChoZWlnaHQp
OworICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0
aCkKK3sKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hl
ZFdpZHRoKHdpZHRoKTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIHBsYXRmb3JtU2V0U2hlZXRSZWN0KHJlY3QpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIHBsYXRmb3JtU3Rh
cnRXaW5kb3dEcmFnKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2dsZVBhZ2VQ
cm9maWxpbmcoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9pc1Byb2ZpbGluZ1BhZ2UpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygpKTsKKyAgICBl
bHNlCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTdGFydFBhZ2VQcm9maWxpbmcoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRv
Z2dsZUVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlKSB7CisgICAg
ICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IHRydWU7CisgICAgICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wRWxlbWVudFNlbGVj
dGlvbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25uZWN0KCk7CisgICAgICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdGFydEVsZW1lbnRTZWxl
Y3Rpb24oKSk7CisgICAgfQorfQorCitib29sIFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRl
c3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYgdXJsKQoreworICAgIC8vIFVzZSBVUkwgc28gd2Ug
Y2FuIGNvbXBhcmUgdGhlIHBhdGhzIGFuZCBwcm90b2NvbHMuCisgICAgVVJMIG1haW5QYWdlVVJM
KFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKTsKKyAgICBpZiAo
dXJsLnByb3RvY29sKCkgPT0gbWFpblBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1haW5Q
YWdlVVJMLnBhdGgoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2UgbWlnaHQg
bm90IGhhdmUgYSBUZXN0IFVSTCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KKyAgICBTdHJpbmcgdGVz
dFBhZ2VVUkxTdHJpbmcgPSBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwo
KTsKKyAgICBpZiAodGVzdFBhZ2VVUkxTdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFVSTCB0ZXN0UGFnZVVSTChVUkwoKSwgdGVzdFBhZ2VVUkxTdHJpbmcpOwor
ICAgIHJldHVybiB1cmwucHJvdG9jb2woKSA9PSB0ZXN0UGFnZVVSTC5wcm90b2NvbCgpICYmIGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXModGVzdFBhZ2VVUkwucGF0aCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
UGFnZSgpOworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0
b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNw
ZWN0b3JQYWdlLCBtX2luc3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgKnRoaXMp
OworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VV
UkwoKm1faW5zcGVjdG9yUGFnZSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwo
KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250
ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKK3sKKyAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdGVkUGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKSkgeworICAgICAgICBzaG93KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsK
KyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2Up
OworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFc3RhYmxpc2hDb25u
ZWN0aW9uKG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBpbmZvRm9yTG9jYWxEZWJ1Z2dh
YmxlKCksIG1fdW5kZXJUZXN0LCBpbnNwZWN0aW9uTGV2ZWwoKSkpOworCisgICAgQVNTRVJUKCFt
X2lzQWN0aXZlRnJvbnRlbmQpOworICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IHRydWU7CisgICAg
bV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCp0
aGlzKTsKKworICAgIGlmICghbV91bmRlclRlc3QpIHsKKyAgICAgICAgbV9jYW5BdHRhY2ggPSBw
bGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2gpOworICAgICAgICBtX2lzQXR0YWNoZWQgPSBzaG91
bGRPcGVuQXR0YWNoZWQoKTsKKyAgICAgICAgbV9hdHRhY2htZW50U2lkZSA9IHN0YXRpY19jYXN0
PEF0dGFjaG1lbnRTaWRlPihpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRh
Y2htZW50U2lkZSgpKTsKKworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSk7CisKKyAgICAgICAgaWYg
KG1faXNBdHRhY2hlZCkgeworICAgICAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7
CisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206CisgICAgICAgICAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNo
ZWRCb3R0b20oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
QXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6
CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOworCisgICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2
YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKyAgICB9CisKKyAgICAvLyBOb3RpZnkgV2ViS2l0IGNs
aWVudCB3aGVuIGEgbG9jYWwgaW5zcGVjdG9yIGF0dGFjaGVzIHNvIHRoYXQgaXQgbWF5IGluc3Rh
bGwgZGVsZWdhdGVzIHByaW9yIHRvIHRoZSBfV0tJbnNwZWN0b3IgbG9hZGluZyBpdHMgZnJvbnRl
bmQuCisgICAgbV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgpLmRpZEF0dGFjaEluc3BlY3Rvcigq
bV9pbnNwZWN0ZWRQYWdlLCAqdGhpcyk7CisKKyAgICAvLyBCYWlsIG91dCBpZiB0aGUgY2xpZW50
IGNsb3NlZCB0aGUgaW5zcGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1ldGhvZC4KKyAgICBpZiAo
IW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdl
LT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclRlc3RQYWdlVVJMKCkgOiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFn
ZVVSTCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW4oKQoreworICAgIGlm
IChtX3VuZGVyVGVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2luc3BlY3RvclBh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIFNldEZvclNjb3BlPGJvb2w+IGlzT3BlbmluZyht
X2lzT3BlbmluZywgdHJ1ZSk7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lz
VmlzaWJsZSkpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAgICAgcGxhdGZvcm1BdHRh
Y2goKTsKKyAgICBlbHNlCisgICAgICAgIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsK
KworICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmRpZENsb3NlKCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7
CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNW
aXNpYmxlID0gZmFsc2U7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBmYWxzZTsKKyAgICBtX3No
b3dNZXNzYWdlU2VudCA9IGZhbHNlOworICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBm
YWxzZTsKKworICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSk7CisKKyAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zp
c2libGUobV9pc1Zpc2libGUpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpKTsKKworICAgIGlmICht
X2lzQWN0aXZlRnJvbnRlbmQpIHsKKyAgICAgICAgbV9pc0FjdGl2ZUZyb250ZW5kID0gZmFsc2U7
CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5l
Y3RGcm9udGVuZCgqdGhpcyk7CisgICAgfQorCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAg
ICAgcGxhdGZvcm1EZXRhY2goKTsKKworICAgIC8vIE51bGwgb3V0IG1faW5zcGVjdG9yUGFnZSBh
ZnRlciBwbGF0Zm9ybURldGFjaCgpLCBzbyB0aGUgdmlld3MgY2FuIGJlIGNsZWFuZWQgdXAgY29y
cmVjdGx5LgorICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisKKyAgICBtX2lzQXR0YWNo
ZWQgPSBmYWxzZTsKKyAgICBtX2NhbkF0dGFjaCA9IGZhbHNlOworICAgIG1fdW5kZXJUZXN0ID0g
ZmFsc2U7CisKKyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkKKyAgICAg
ICAgYXV0b21hdGlvblNlc3Npb24tPmluc3BlY3RvckZyb250ZW5kTG9hZGVkKCptX2luc3BlY3Rl
ZFBhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQoKQorewor
ICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgdGVsbHMgdXMgdG8g
ZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50IHRvCisgICAgLy8gaWdub3JlIGl0IG9uY2UgaWYgd2Ug
b25seSB3YW50ZWQgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgdGhlIEluc3BlY3RvciB0byBsYXRl
cgorICAgIC8vIHJlcXVlc3QgdG8gYmUgYnJvdWdodCB0byB0aGUgZnJvbnQgd2hlbiBhIGJyZWFr
cG9pbnQgaXMgaGl0IG9yIHNvbWUgb3RoZXIgYWN0aW9uLgorICAgIGlmIChtX2lnbm9yZUZpcnN0
QnJpbmdUb0Zyb250KSB7CisgICAgICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAg
ICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlCisgICAgICAgIG9wZW4oKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7
CisgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUp
Cit7CisgICAgYm9vbCBwcmV2aW91c0NhbkF0dGFjaCA9IG1fY2FuQXR0YWNoOworCisgICAgbV9j
YW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChhdmFpbGFibGUpOworCisgICAgaWYgKHByZXZp
b3VzQ2FuQXR0YWNoID09IG1fY2FuQXR0YWNoKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9pbnNwZWN0b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFt
X2NhbkF0dGFjaCkpOworCisgICAgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKG1f
Y2FuQXR0YWNoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBwbGF0Zm9ybUluc3BlY3RlZFVS
TENoYW5nZWQodXJsU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0Nl
cnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAg
IHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQorewor
ICAgIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSA9IGFjdGl2ZTsKKworICAgIGlmIChtX2lnbm9y
ZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UpIHsKKyAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0
aW9uQ2hhbmdlID0gZmFsc2U7CisgICAgICAgIGlmICghbV9pc1Zpc2libGUpCisgICAgICAgICAg
ICBjbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFjdGl2ZSkKKyAg
ICAgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAgZWxzZSBpZiAo
aXNDb25uZWN0ZWQoKSkKKyAgICAgICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAg
ICBtX2lzUHJvZmlsaW5nUGFnZSA9IGFjdGl2ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVu
YWJsZWQpCit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZXRNb2NrQ2Fw
dHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRE
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUo
YXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCit7CisgICAgcGxhdGZvcm1TYXZl
KGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoZmlsZW5hbWUsIGNvbnRl
bnQpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpzaG91bGRPcGVuQXR0YWNoZWQoKQor
eworICAgIHJldHVybiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JTdGFydHNB
dHRhY2hlZCgpICYmIGNhbkF0dGFjaCgpOworfQorCisvLyBVbnN1cHBvcnRlZCBjb25maWd1cmF0
aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBwcm92aWRlZCBoZXJlLgorCisjaWYgIVBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworV2ViUGFnZVByb3h5KiBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVu
ZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybURldGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFn
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRl
c3RQYWdlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworRGVidWdn
YWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6
OmVtcHR5KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQo
Ym9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yYjFmZGZjYTFkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJBdHRhY2htZW50LmgiCisjaW5jbHVkZSAi
RGVidWdnYWJsZUluZm9EYXRhLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNs
dWRlICJXS0dlb21ldHJ5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KKworT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNWaWV3Owor
T0JKQ19DTEFTUyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNB
ZGFwdGVyOworT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOworI2VsaWYgUExB
VEZPUk0oV0lOKQorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQ7Citj
bGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJQcmVmZXJlbmNlczsKKworZW51bSBjbGFzcyBB
dHRhY2htZW50U2lkZSB7CisgICAgQm90dG9tLAorICAgIFJpZ2h0LAorICAgIExlZnQsCit9Owor
CitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eQorICAgIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6SW5zcGVjdG9yPgorICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCisgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCisj
ZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclByb3h5PiBjcmVh
dGUoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yUHJveHkoaW5zcGVjdGVkUGFnZSkpOworICAgIH0KKwor
ICAgIH5XZWJJbnNwZWN0b3JQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAg
ICAvLyBQdWJsaWMgQVBJcworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQorICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9y
UGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsgfQorCisgICAgYm9vbCBpc0Nv
bm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQYWdlOyB9CisgICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQorICAgIGJvb2wgaXNGcm9u
dCgpOworCisgICAgdm9pZCBjb25uZWN0KCk7CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lk
IGhpZGUoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZUZvckNyYXNoKCk7Cisg
ICAgdm9pZCByZW9wZW4oKTsKKyAgICB2b2lkIHJlc2V0U3RhdGUoKTsKKworICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSopOwor
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGVudW0gY2xhc3MgSW5zcGVjdGlvblRhcmdldFR5cGUg
eyBMb2NhbCwgUmVtb3RlIH07CisgICAgc3RhdGljIFJldGFpblB0cjxOU1dpbmRvdz4gY3JlYXRl
RnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRU
eXBlKTsKKworICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyAg
ICB2b2lkIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0ID0gMCk7CisgICAgdm9p
ZCB3aW5kb3dGcmFtZURpZENoYW5nZSgpOworICAgIHZvaWQgd2luZG93RnVsbFNjcmVlbkRpZENo
YW5nZSgpOworICAgIE5TV2luZG93KiBpbnNwZWN0b3JXaW5kb3coKSBjb25zdCB7IHJldHVybiBt
X2luc3BlY3RvcldpbmRvdy5nZXQoKTsgfQorCisgICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZSgp
OworICAgIHZvaWQgY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKTsKKwor
ICAgIHZvaWQgYXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcg
Km5ld1ZpZXcpOworICAgIHZvaWQgYXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRv
dyAqb2xkV2luZG93KTsKKyAgICB2b2lkIGF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5k
b3cgKm5ld1dpbmRvdyk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KEdUSykKKyAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXcoKSBjb25zdCB7IHJldHVybiBtX2lu
c3BlY3RvclZpZXc7IH07CisgICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYklu
c3BlY3RvclByb3h5Q2xpZW50PiYmKTsKKyNlbmRpZgorCisgICAgdm9pZCBzaG93Q29uc29sZSgp
OworICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOworICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZv
ckZyYW1lKFdlYkZyYW1lUHJveHkqKTsKKworICAgIEF0dGFjaG1lbnRTaWRlIGF0dGFjaG1lbnRT
aWRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2lkZTsgfQorICAgIGJvb2wgaXNBdHRh
Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRhY2hlZDsgfQorICAgIHZvaWQgYXR0YWNoUmln
aHQoKTsKKyAgICB2b2lkIGF0dGFjaExlZnQoKTsKKyAgICB2b2lkIGF0dGFjaEJvdHRvbSgpOwor
ICAgIHZvaWQgYXR0YWNoKEF0dGFjaG1lbnRTaWRlID0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7
CisgICAgdm9pZCBkZXRhY2goKTsKKworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQpOworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisK
KyAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworICAg
IHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7CisKKyAgICBib29sIGlzUHJvZmlsaW5nUGFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNQcm9maWxpbmdQYWdlOyB9CisgICAgdm9pZCB0b2dnbGVQYWdlUHJv
ZmlsaW5nKCk7CisKKyAgICBib29sIGlzRWxlbWVudFNlbGVjdGlvbkFjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZTsgfQorICAgIHZvaWQgdG9nZ2xlRWxlbWVu
dFNlbGVjdGlvbigpOworCisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dW5kZXJUZXN0OyB9CisKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJv
b2wpOworCisgICAgLy8gUHJvdmlkZWQgYnkgcGxhdGZvcm0gV2ViSW5zcGVjdG9yUHJveHkgaW1w
bGVtZW50YXRpb25zLgorICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVSTCgpOworICAg
IHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5n
IGluc3BlY3RvckJhc2VVUkwoKTsKKyAgICBzdGF0aWMgYm9vbCBpc01haW5PclRlc3RJbnNwZWN0
b3JQYWdlKGNvbnN0IFVSTCYpOworICAgIHN0YXRpYyBEZWJ1Z2dhYmxlSW5mb0RhdGEgaW5mb0Zv
ckxvY2FsRGVidWdnYWJsZSgpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1X
aW5kb3dXaWR0aDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdpbmRvd0hlaWdo
dDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93V2lkdGg7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWlnaHQ7CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5Kik7CisKKyAgICB2b2lk
IGNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAg
IC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBDb25uZWN0aW9uVHlw
ZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbm5lY3Rpb25UeXBl
OjpMb2NhbDsgfQorCisgICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFn
ZSgpOworICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOworICAgIHZvaWQg
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgdm9pZCBwbGF0Zm9y
bURpZENsb3NlRm9yQ3Jhc2goKTsKKyAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworICAg
IHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAg
dm9pZCBwbGF0Zm9ybUhpZGUoKTsKKyAgICBib29sIHBsYXRmb3JtSXNGcm9udCgpOworICAgIHZv
aWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgcGxh
dGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcGxhdGZv
cm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisgICAg
dW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7CisgICAgdm9pZCBwbGF0Zm9ybUF0dGFjaCgp
OworICAgIHZvaWQgcGxhdGZvcm1EZXRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd1dpZHRoKHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWco
KTsKKyAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Cisg
ICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgcGxhdGZvcm1DYW5B
dHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKKyNlbHNlCisgICAgYm9vbCBwbGF0Zm9y
bUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsgcmV0dXJuIHdlYlByb2Nlc3ND
YW5BdHRhY2g7IH0KKyNlbmRpZgorCisgICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclByb3h5
IG1lc3NhZ2VzCisgICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0
dGFjaCwgYm9vbCB1bmRlclRlc3QpOworICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQ
Qzo6QXR0YWNobWVudCk7CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7
CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGJyaW5nSW5zcGVjdGVkUGFnZVRv
RnJvbnQoKTsKKyAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAg
dm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHZvaWQgZWxl
bWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0No
YW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoT3B0aW9uYWw8Ym9vbD4pOworCisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNl
U2F2ZUFzKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpOworCisgICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7IHJldHVybiBt
X2NhbkF0dGFjaDsgfQorICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7CisKKyAgICB2b2lk
IG9wZW4oKTsKKworICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0OworCisgICAg
V2ViUHJlZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0OworCisjaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JX
aW5kb3dUaXRsZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgc3Rh
dGljIExSRVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7
CisgICAgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgdm9pZCB3aW5kb3dSZWNlaXZl
ZE1lc3NhZ2UoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92ZXJyaWRlOworI2VuZGlmCisK
KyAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51bGxwdHIgfTsKKyAgICBXZWJQ
YWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKworICAgIGJvb2wgbV91bmRl
clRlc3QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc0F0dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQXR0YWNoIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hv
d01lc3NhZ2VTZW50IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlRmlyc3RCcmluZ1RvRnJv
bnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lzT3BlbmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQWN0aXZlRnJvbnRl
bmQgeyBmYWxzZSB9OworCisgICAgQXR0YWNobWVudFNpZGUgbV9hdHRhY2htZW50U2lkZSB7QXR0
YWNobWVudFNpZGU6OkJvdHRvbX07CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRy
PFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Cisg
ICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRvdzsKKyAgICBSZXRhaW5QdHI8
V0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOworICAgIEhhc2hN
YXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOwor
ICAgIFJ1bkxvb3A6OlRpbWVyPFdlYkluc3BlY3RvclByb3h5PiBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lcjsKKyAgICBTdHJpbmcgbV91cmxTdHJpbmc7CisgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworICAgIGJvb2wgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlv
dXRSZWN0IHsgZmFsc2UgfTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+IG1fY2xpZW50OworICAgIEd0a1dpZGdldCogbV9p
bnNwZWN0b3JWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5k
b3cgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX2hlYWRlckJhciB7IG51bGxwdHIgfTsK
KyAgICBTdHJpbmcgbV9pbnNwZWN0ZWRVUkxTdHJpbmc7CisjZWxpZiBQTEFURk9STShXSU4pCisg
ICAgSFdORCBtX2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2lu
c3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3Rv
clZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3RvckRldGFjaFdpbmRv
dyB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8V2ViVmlldz4gbV9pbnNwZWN0b3JWaWV3OworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJiNzc1NTNjNmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw1OCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJbnNwZWN0
b3JQcm94eSB7CisgICAgT3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gs
IGJvb2wgdW5kZXJUZXN0KQorICAgIFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1l
bnQgY29ubmVjdGlvbklkZW50aWZpZXIpCisKKyAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJp
bmcgbWVzc2FnZSkKKworICAgIEZyb250ZW5kTG9hZGVkKCkKKyAgICBEaWRDbG9zZSgpCisgICAg
QnJpbmdUb0Zyb250KCkKKyAgICBCcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKKyAgICBSZW9w
ZW4oKQorICAgIFJlc2V0U3RhdGUoKQorCisgICAgSW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJpbmcg
dXJsU3RyaW5nKQorICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8g
Y2VydGlmaWNhdGVJbmZvKQorICAgIEVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZl
KQorICAgIFRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAgICBTZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKKwor
ICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNv
ZGVkLCBib29sIGZvcmNlU2F2ZUFzKQorICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmlu
ZyBjb250ZW50KQorCisgICAgQXR0YWNoQm90dG9tKCkKKyAgICBBdHRhY2hSaWdodCgpCisgICAg
QXR0YWNoTGVmdCgpCisgICAgRGV0YWNoKCkKKworICAgIEF0dGFjaEF2YWlsYWJpbGl0eUNoYW5n
ZWQoYm9vbCBhdmFpbGFibGUpCisKKyAgICBTZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCisgICAgU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKKwor
ICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKworICAgIFN0YXJ0V2lu
ZG93RHJhZygpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5jZmVhMTVlZTY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCkBAIC0w
LDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVy
cy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiBIYXNoTWFwPFdlYlBhZ2VQcm94
eSosIHVuc2lnbmVkPiBQYWdlTGV2ZWxNYXA7CisKK3N0YXRpYyBQYWdlTGV2ZWxNYXAmIHBhZ2VM
ZXZlbE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBhZ2VMZXZlbE1hcD4gbWFw
OworICAgIHJldHVybiBtYXA7Cit9CisKK3Vuc2lnbmVkIGluc3BlY3RvckxldmVsRm9yUGFnZShX
ZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpIHsKKyAgICAgICAgYXV0byBmaW5k
UmVzdWx0ID0gcGFnZUxldmVsTWFwKCkuZmluZChwYWdlKTsKKyAgICAgICAgaWYgKGZpbmRSZXN1
bHQgIT0gcGFnZUxldmVsTWFwKCkuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmluZFJlc3Vs
dC0+dmFsdWUgKyAxOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitTdHJpbmcgaW5zcGVj
dG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91cExldmVsIiwgaW5zcGVj
dG9yTGV2ZWxGb3JQYWdlKHBhZ2UpLCAiX18iKTsKK30KKwordm9pZCB0cmFja0luc3BlY3RvclBh
Z2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlLCBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBh
Z2UpCit7CisgICAgcGFnZUxldmVsTWFwKCkuc2V0KGluc3BlY3RvclBhZ2UsIGluc3BlY3Rvckxl
dmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKSk7Cit9CisKK3ZvaWQgdW50cmFja0luc3BlY3RvclBh
Z2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKQoreworICAgIHBhZ2VMZXZlbE1hcCgpLnJl
bW92ZShpbnNwZWN0b3JQYWdlKTsKK30KKworc3RhdGljIFdlYlByb2Nlc3NQb29sKiBzX21haW5J
bnNwZWN0b3JQcm9jZXNzUG9vbDsKK3N0YXRpYyBXZWJQcm9jZXNzUG9vbCogc19uZXN0ZWRJbnNw
ZWN0b3JQcm9jZXNzUG9vbDsKKworV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29s
KHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICAvLyBIYXZpbmcgb3VyIG93biBwcm9j
ZXNzIHBvb2wgcmVtb3ZlcyB1cyBmcm9tIHRoZSBtYWluIHByb2Nlc3MgcG9vbCBhbmQKKyAgICAv
LyBndWFyYW50ZWVzIG5vIHByb2Nlc3Mgc2hhcmluZyBmb3Igb3VyIHVzZXIgaW50ZXJmYWNlLgor
ICAgIFdlYlByb2Nlc3NQb29sKiYgcG9vbCA9IChpbnNwZWN0aW9uTGV2ZWwgPT0gMSkgPyBzX21h
aW5JbnNwZWN0b3JQcm9jZXNzUG9vbCA6IHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7Cisg
ICAgaWYgKCFwb29sKSB7CisgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IEFQSTo6UHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcG9vbCA9ICZXZWJQcm9jZXNz
UG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24uZ2V0KCkpLmxlYWtSZWYoKTsKKyAgICAgICAgLy8g
RG8gbm90IGRlbGF5IHByb2Nlc3MgbGF1bmNoIGZvciBpbnNwZWN0b3IgcGFnZXMgYXMgaW5zcGVj
dG9yIHBhZ2VzIGRvIG5vdCBrbm93IGhvdyB0byB0cmFuc2l0aW9uIGZyb20gYSB0ZXJtaW5hdGVk
IHByb2Nlc3MuCisgICAgICAgIHBvb2wtPmRpc2FibGVEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaCgp
OworICAgIH0KKyAgICByZXR1cm4gKnBvb2w7Cit9CisKK2Jvb2wgaXNJbnNwZWN0b3JQcm9jZXNz
UG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCit7CisgICAgcmV0dXJuIChzX21haW5J
bnNwZWN0b3JQcm9jZXNzUG9vbCAmJiBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCA9PSAmcHJv
Y2Vzc1Bvb2wpCisgICAgICAgIHx8IChzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sICYmIHNf
bmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQb29sKTsKK30KKworYm9vbCBp
c0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAgIHJldHVybiBwYWdl
TGV2ZWxNYXAoKS5jb250YWlucygmd2ViUGFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclV0aWxpdGllcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvclV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5jMTllYTc1ODhjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlBy
b2Nlc3NQb29sOworCisvLyBUaGUgaW5zcGVjdG9yIHBhZ2UgZ3JvdXBzIGFyZSB1c2VkIHRvIGdp
dmUgZGlmZmVyZW50IHByZWZlcmVuY2VzIHRvIGVhY2gKKy8vIGluc3BlY3RvciBsZXZlbCBieSBz
ZXR0aW5nIGEgcGVyLWxldmVsIHBhZ2UgZ3JvdXAgaWRlbnRpZmllci4KK3Vuc2lnbmVkIGluc3Bl
Y3RvckxldmVsRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKK1N0cmluZyBpbnNwZWN0b3JQYWdlR3Jv
dXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKK3ZvaWQgdHJhY2tJbnNwZWN0b3JQ
YWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQ
YWdlKTsKK3ZvaWQgdW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQ
YWdlKTsKKworV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVkIGlu
c3BlY3Rpb25MZXZlbCk7Citib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bv
b2wmKTsKK2Jvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYpOworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmViYmRmODdhY2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
UGFnZURlYnVnZ2FibGUuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlBhZ2VEZWJ1Z2dhYmxlLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKwor
I2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworV2ViUGFnZURlYnVnZ2FibGU6Oldl
YlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQor
eworfQorCitTdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6Om5hbWUoKSBjb25zdAoreworICAgIGlm
ICghbV9uYW1lT3ZlcnJpZGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX25hbWVPdmVycmlk
ZTsKKworICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLT50aXRsZSgpOworfQorCitTdHJp
bmcgV2ViUGFnZURlYnVnZ2FibGU6OnVybCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UubWFp
bkZyYW1lKCkpCisgICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7CisKKyAg
ICBTdHJpbmcgdXJsID0gbV9wYWdlLm1haW5GcmFtZSgpLT51cmwoKS5zdHJpbmcoKTsKKyAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6YmxhbmtVUkwoKS5zdHJpbmco
KTsKKworICAgIHJldHVybiB1cmw7Cit9CisKK2Jvb2wgV2ViUGFnZURlYnVnZ2FibGU6Omhhc0xv
Y2FsRGVidWdnZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuaW5zcGVjdG9yQ29udHJv
bGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6
Y29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0
aW9uLCBib29sIGltbWVkaWF0ZWx5UGF1c2UpCit7CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoY2hhbm5lbCwgaXNBdXRvbWF0aWNDb25uZWN0aW9uLCBp
bW1lZGlhdGVseVBhdXNlKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6ZGlzY29ubmVj
dChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCit7CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7Cit9CisKK3ZvaWQgV2ViUGFnZURl
YnVnZ2FibGU6OmRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJv
bUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXRJbmRp
Y2F0aW5nKGJvb2wgaW5kaWNhdGluZykKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxl
cigpLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2Fi
bGU6OnNldE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9uYW1lT3Zl
cnJpZGUgPSBuYW1lOworICAgIHVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGY4NDhkZTExNmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rpb25UYXJnZXQuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlBhZ2VQcm94eTsKKworY2xhc3MgV2ViUGFnZURlYnVnZ2FibGUgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlRGVidWdnYWJsZSk7CitwdWJs
aWM6CisgICAgV2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVByb3h5Jik7CisgICAgfldlYlBhZ2VE
ZWJ1Z2dhYmxlKCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpSZW1vdGVDb250cm9sbGFi
bGVUYXJnZXQ6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6UmVt
b3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlOjpXZWJQYWdlOyB9CisKKyAgICBTdHJpbmcgbmFt
ZSgpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyB1cmwoKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IGhhc0xvY2FsRGVidWdnZXIoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY29ubmVjdChJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0aW9uID0gZmFs
c2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBmaW5hbDsKKyAgICB2b2lkIGRpc2Nv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2
b2lkIHNldEluZGljYXRpbmcoYm9vbCkgZmluYWw7CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWVP
dmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZU92ZXJyaWRlOyB9CisgICAgdm9pZCBzZXRO
YW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZVByb3h5
JiBtX3BhZ2U7CisgICAgU3RyaW5nIG1fbmFtZU92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ09OVFJPTExBQkxFX1RBUkdFVChX
ZWJLaXQ6OldlYlBhZ2VEZWJ1Z2dhYmxlLCBXZWJQYWdlKTsKKworI2VuZGlmIC8vIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFlZTI4YmY3MTYzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JUYXJnZXRBZ2VudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitzdGF0aWMgU3RyaW5n
IGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2Up
Cit7CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlz
aW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKK30KKworV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1f
cGFnZShwYWdlKQorICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRl
KCkpCisgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
bV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQoreworICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBt
YWtlVW5pcXVlPEluc3BlY3RvclRhcmdldEFnZW50PihtX2Zyb250ZW5kUm91dGVyLmdldCgpLCBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKworICAgIG1fdGFyZ2V0QWdlbnQgPSB0YXJnZXRB
Z2VudC5nZXQoKTsKKworICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdldEFnZW50KSk7
Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmluaXQoKQoreworICAgIFN0
cmluZyBwYWdlVGFyZ2V0SWQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG1f
cGFnZS53ZWJQYWdlSUQoKSk7CisgICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJ
ZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKTsKK30KKwordm9pZCBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6cGFnZUNsb3NlZCgpCit7CisgICAgZGlzY29ubmVjdEFs
bEZyb250ZW5kcygpOworCisgICAgbV9hZ2VudHMuZGlzY2FyZFZhbHVlcygpOworfQorCitib29s
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNMb2NhbEZyb250ZW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9mcm9udGVuZFJvdXRlci0+aGFzTG9jYWxGcm9udGVuZCgpOworfQorCit2
b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCwgYm9vbCwgYm9vbCkKK3sKKyAgICBi
b29sIGNvbm5lY3RpbmdGaXJzdEZyb250ZW5kID0gIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250
ZW5kcygpOworCisgICAgbV9mcm9udGVuZFJvdXRlci0+Y29ubmVjdEZyb250ZW5kKGZyb250ZW5k
Q2hhbm5lbCk7CisKKyAgICBpZiAoY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQpCisgICAgICAgIG1f
YWdlbnRzLmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCgmbV9mcm9udGVuZFJvdXRlci5nZXQo
KSwgJm1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOworCisgICAgbV9wYWdlLmRpZENoYW5nZUlu
c3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsK
KworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIGlmIChoYXNMb2NhbEZyb250ZW5k
KCkpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgp
OworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5l
Y3RGcm9udGVuZChGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCkKK3sKKyAgICBtX2Zy
b250ZW5kUm91dGVyLT5kaXNjb25uZWN0RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVsKTsKKworICAg
IGJvb2wgZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNG
cm9udGVuZHMoKTsKKyAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkKKyAgICAgICAg
bV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6
SW5zcGVjdG9yRGVzdHJveWVkKTsKKworICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9u
dGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkK
KyAgICAgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEFs
bEZyb250ZW5kcygpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSBhIGxvY2FsIGluc3BlY3RvciBj
bGllbnQuCisKKyAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBOb3RpZnkgYWdlbnRzIGZpcnN0LCBzaW5jZSB0aGV5IG1h
eSBuZWVkIHRvIHVzZSBJbnNwZWN0b3JDbGllbnQuCisgICAgbV9hZ2VudHMud2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJv
eWVkKTsKKworICAgIC8vIERpc2Nvbm5lY3QgYW55IHJlbWFpbmluZyByZW1vdGUgZnJvbnRlbmRz
LgorICAgIG1fZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAg
IG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXIt
PmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBt
X3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQor
Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PmRpc3BhdGNoKG1lc3NhZ2UpOworfQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCit2
b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNh
dGluZykKK3sKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBtX3BhZ2Uuc2V0SW5kaWNh
dGluZyhpbmRpY2F0aW5nKTsKKyNlbHNlCisgICAgaWYgKGluZGljYXRpbmcpCisgICAgICAgIG1f
cGFnZS5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOworICAgIGVsc2UKKyAgICAgICAgbV9wYWdl
LmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7CisjZW5kaWYKK30KKyNlbmRpZgorCit2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7Cisg
ICAgYWRkVGFyZ2V0KEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJ
ZCwgdHlwZSkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95
SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit7CisgICAgYXV0byBpdCA9
IG1fdGFyZ2V0cy5maW5kKHRhcmdldElkKTsKKyAgICBpZiAoaXQgPT0gbV90YXJnZXRzLmVuZCgp
KQorICAgICAgICByZXR1cm47CisgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCpp
dC0+dmFsdWUpOworICAgIG1fdGFyZ2V0cy5yZW1vdmUoaXQpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fdGFyZ2V0
QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2Up
OworfQorCitib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzaG91bGRQYXVzZUxvYWRp
bmcoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkgY29uc3QKK3sK
KyAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdldElE
KHByb3Zpc2lvbmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHJldHVybiB0YXJn
ZXQtPmlzUGF1c2VkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGF1
dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7
CisgICAgQVNTRVJUKHRhcmdldCk7CisgICAgdGFyZ2V0LT5zZXRSZXN1bWVDYWxsYmFjayhXVEZN
b3ZlKGNhbGxiYWNrKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQ
YWdlKQoreworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zp
c2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXI6OndpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVBy
b3h5JiBwcm92aXNpb25hbFBhZ2UpCit7CisgICAgZGVzdHJveUluc3BlY3RvclRhcmdldChnZXRU
YXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
IG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlEKQorewor
ICAgIFN0cmluZyBvbGRJRCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQob2xk
V2ViUGFnZUlEKTsKKyAgICBTdHJpbmcgbmV3SUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0
b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7CisgICAgYXV0byBuZXdUYXJnZXQgPSBtX3RhcmdldHMu
dGFrZShuZXdJRCk7CisgICAgQVNTRVJUKG5ld1RhcmdldCk7CisgICAgbmV3VGFyZ2V0LT5kaWRD
b21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAgIG1fdGFyZ2V0QWdlbnQtPmRpZENvbW1pdFBy
b3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBuZXdJRCk7CisKKyAgICAvLyBXZSd2ZSBkaXNjb25uZWN0
ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5kIHdpbGwgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2UgZnJv
bSBpdCwgc28KKyAgICAvLyB3ZSBkZXN0cm95IGV2ZXJ5dGhpbmcgYnV0IHRoZSBuZXcgdGFyZ2V0
IGhlcmUuCisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDI5Mzc+IGRvIG5v
dCBkZXN0cm95IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvbW1pdHRlZCBwYWdlLgorICAg
IGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQorICAgICAgICBtX3Rhcmdl
dEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7CisgICAgbV90YXJnZXRzLmNsZWFyKCk7
CisgICAgbV90YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZShuZXdU
YXJnZXQpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkVGFyZ2V0
KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJiB0YXJnZXQpCit7CisgICAg
bV90YXJnZXRBZ2VudC0+dGFyZ2V0Q3JlYXRlZCgqdGFyZ2V0KTsKKyAgICBtX3RhcmdldHMuc2V0
KHRhcmdldC0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKHRhcmdldCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4Y2FlZGYwYzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHku
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5Lmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKK2Ns
YXNzIEZyb250ZW5kQ2hhbm5lbDsKK2NsYXNzIEZyb250ZW5kUm91dGVyOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcihXZWJQYWdlUHJveHkmKTsKKworICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgcGFnZUNs
b3NlZCgpOworCisgICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7CisKKyAgICB2b2lk
IGNvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRv
bWF0aWNJbnNwZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsK
KyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYp
OworICAgIHZvaWQgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOworCisgICAgdm9pZCBkaXNwYXRj
aE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKKyNlbmRp
ZgorCisgICAgdm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICB2b2lkIGRlc3Ryb3lJbnNw
ZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7CisgICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKTsKKworICAgIGJvb2wgc2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lv
bmFsUGFnZVByb3h5JikgY29uc3Q7CisgICAgdm9pZCBzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFj
ayhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsK
KworICAgIHZvaWQgZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5
Jik7CisgICAgdm9pZCB3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25h
bFBhZ2VQcm94eSYpOworICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3
V2ViUGFnZUlEKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZFRhcmdldChzdGQ6OnVuaXF1ZV9w
dHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYpOworCisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7
CisgICAgUmVmPEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7Cisg
ICAgUmVmPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
CisgICAgSW5zcGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOworICAgIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7CisgICAgSGFzaE1hcDxTdHJpbmcs
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5ZDUwZGMyODZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rv
clV0aWxzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgor
I2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBm
aW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm94eShS
ZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCwgdWludDY0X3QgY29ubmVjdGlv
bklELCB1aW50NjRfdCB0YXJnZXRJRCkKKyAgICAgICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0
b3JDbGllbnQpCisgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQorICAgICAg
ICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGll
bnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3RvclByb3h5KCkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9wcm94eS0+aW52
YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisgICAgeworICAgICAgICAvLyBG
SVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2PjogdGhpcyBzaG91bGQgaW5mZXIgbW9y
ZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgorICAgICAgICBSZWY8QVBJOjpE
ZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8gPSBBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVh
dGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKTsKKyAgICAgICAgZGVidWdnYWJsZUluZm8t
PnNldERlYnVnZ2FibGVUeXBlKEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2UpOwor
ICAgICAgICBtX3Byb3h5LT5sb2FkKFdURk1vdmUoZGVidWdnYWJsZUluZm8pLCBtX2luc3BlY3Rv
ckNsaWVudC5iYWNrZW5kQ29tbWFuZHNVUkwoKSk7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkK
KyAgICB7CisgICAgICAgIG1fcHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRh
cmdldE5hbWUoY29uc3QgQ1N0cmluZyYgbmFtZSkKKyAgICB7CisjaWYgUExBVEZPUk0oR1RLKQor
ICAgICAgICBtX3Byb3h5LT51cGRhdGVXaW5kb3dUaXRsZShuYW1lKTsKKyNlbmRpZgorICAgIH0K
KworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
KyAgICB7CisgICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsK
KyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNz
YWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdlKTsKKyAgICB9
CisKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlvbklELCBtX3Rh
cmdldElEKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5PiBtX3Byb3h5OworICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGll
bnQ7CisgICAgdWludDY0X3QgbV9jb25uZWN0aW9uSUQ7CisgICAgdWludDY0X3QgbV90YXJnZXRJ
RDsKK307CisKK2NvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyYgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjptZXNzYWdlSGFuZGxlcnMoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnM+IG1lc3NhZ2VI
YW5kbGVycyA9IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyh7CisgICAgeyAiRGlk
Q2xvc2UiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxi
YWNrPiB7IHsgfSwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiwgZ3Bv
aW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2Fz
dDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBjbGllbnQu
Y29ubmVjdGlvbkRpZENsb3NlKCk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJEaWRTZXR1
cEluc3BlY3RvckNsaWVudCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpN
ZXNzYWdlQ2FsbGJhY2s+IHsgIihheSkiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwg
R1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBh
dXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRh
dGEpOworICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gYmFja2VuZENvbW1hbmRzVmFyaWFu
dDsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihAYXkpIiwgJmJhY2tl
bmRDb21tYW5kc1ZhcmlhbnQub3V0UHRyKCkpOworICAgICAgICAgICAgY2xpZW50LnNldEJhY2tl
bmRDb21tYW5kcyhnX3ZhcmlhbnRfZ2V0X2J5dGVzdHJpbmcoYmFja2VuZENvbW1hbmRzVmFyaWFu
dC5nZXQoKSkpOworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiU2V0VGFyZ2V0TGlzdCIsIHN0
ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0
YSh0c3NzYikpIiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJh
bWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgY2xpZW50ID0g
KnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAg
ICAgIGd1aW50NjQgY29ubmVjdGlvbklEOworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHVmFy
aWFudEl0ZXI+IGl0ZXI7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIo
dGEodHNzc2IpKSIsICZjb25uZWN0aW9uSUQsICZpdGVyLm91dFB0cigpKTsKKyAgICAgICAgICAg
IHNpemVfdCB0YXJnZXRDb3VudCA9IGdfdmFyaWFudF9pdGVyX25fY2hpbGRyZW4oaXRlci5nZXQo
KSk7CisgICAgICAgICAgICBWZWN0b3I8UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpUYXJnZXQ+IHRh
cmdldExpc3Q7CisgICAgICAgICAgICB0YXJnZXRMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
dGFyZ2V0Q291bnQpOworICAgICAgICAgICAgZ3VpbnQ2NCB0YXJnZXRJRDsKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIHR5cGU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAg
ICAgICAgY29uc3QgY2hhciogdXJsOworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFzTG9jYWxEZWJ1
Z2dlcjsKKyAgICAgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKGl0ZXIuZ2V0KCks
ICIodCZzJnMmc2IpIiwgJnRhcmdldElELCAmdHlwZSwgJm5hbWUsICZ1cmwsICZoYXNMb2NhbERl
YnVnZ2VyKSkgeworICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHR5cGUsICJXZWIiKSB8
fCAhZ19zdHJjbXAwKHR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICAgICAgICAgIHRh
cmdldExpc3QudW5jaGVja2VkQXBwZW5kKHsgdGFyZ2V0SUQsIHR5cGUsIG5hbWUsIHVybCB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsaWVudC5zZXRUYXJnZXRMaXN0KGNvbm5lY3Rp
b25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlv
bjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodHRzKSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rp
b24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAg
ICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1
c2VyRGF0YSk7CisgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQ7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworICAgICAgICAgICAgZ192YXJpYW50X2dl
dChwYXJhbWV0ZXJzLCAiKHR0JnMpIiwgJmNvbm5lY3Rpb25JRCwgJnRhcmdldElELCAmbWVzc2Fn
ZSk7CisgICAgICAgICAgICBjbGllbnQuc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbm5lY3Rpb25J
RCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAgICB9fQorICAgIH0KKyAgICB9KTsKKyAgICBy
ZXR1cm4gbWVzc2FnZUhhbmRsZXJzOworfQorCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90
ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1v
dGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX2hvc3RBbmRQb3J0KFN0cmlu
Zzo6ZnJvbVVURjgoYWRkcmVzcykgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0KSkKKyAgICAs
IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0R1JlZihnX2Nh
bmNlbGxhYmxlX25ldygpKSkKK3sKKyAgICBHUmVmUHRyPEdTb2NrZXRDbGllbnQ+IHNvY2tldENs
aWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfbmV3KCkpOworICAgIGdfc29ja2V0X2Ns
aWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29ja2V0Q2xpZW50LmdldCgpLCBtX2hvc3RBbmRQ
b3J0LnV0ZjgoKS5kYXRhKCksIDAsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIFtdKEdP
YmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7
CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBH
UmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0
X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKEdfU09DS0VUX0NMSUVOVChvYmplY3QpLCBy
ZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hl
cyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1dG8qIGNsaWVudCA9IHN0YXRpY19jYXN0
PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGlmIChjb25u
ZWN0aW9uKQorICAgICAgICAgICAgICAgIGNsaWVudC0+c2V0dXBDb25uZWN0aW9uKFNvY2tldENv
bm5lY3Rpb246OmNyZWF0ZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBtZXNzYWdlSGFuZGxlcnMoKSwg
Y2xpZW50KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIlJlbW90ZUluc3BlY3RvckNsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byBpbnNwZWN0b3Ig
c2VydmVyOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBjbGllbnQtPm1f
b2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqY2xpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICB9
LCB0aGlzKTsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50KCkKK3sKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsK
K30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldHVwQ29ubmVjdGlvbihSZWY8U29j
a2V0Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQoreworICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9
IFdURk1vdmUoY29ubmVjdGlvbik7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2Fn
ZSgiU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBnX3ZhcmlhbnRfbmV3KCIoQGF5KSIsIGdfdmFyaWFu
dF9uZXdfYnl0ZXN0cmluZyhJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2goKS5kYXRhKCkp
KSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMo
Y29uc3QgY2hhciogYmFja2VuZENvbW1hbmRzKQoreworICAgIGlmICghYmFja2VuZENvbW1hbmRz
IHx8ICFiYWNrZW5kQ29tbWFuZHNbMF0pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwg
PSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNr
ZW5kQ29tbWFuZHMpLCBiYXNlNjREYXRhKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJk
YXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK3ZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQoreworICAgIG1fdGFyZ2V0
cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKKyAgICBtX3NvY2tl
dENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgq
dGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0KHVpbnQ2NF90
IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCit7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQs
IHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SURdIHsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQs
IHRhcmdldElEKTsKKyAgICB9KTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3coKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwIiwg
Z192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKyAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2
NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9zb2NrZXRDb25u
ZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiLCBnX3ZhcmlhbnRfbmV3
KCIodHRzKSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkp
OworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQodWlu
dDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKK3sKKyAgICBBU1NFUlQobV9p
bnNwZWN0b3JQcm94eU1hcC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRh
cmdldElEKSkpOworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIkZyb250ZW5k
RGlkQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCkp
OworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rp
b25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRh
cmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmIHRhcmdldExp
c3QpCit7CisgICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0cyB0byByZW1vdmUgdGhlbS4KKyAgICBW
ZWN0b3I8dWludDY0X3QsIDQ+IHRhcmdldHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGNvbm5l
Y3Rpb25UYXJnZXRQYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKKyAgICAgICAg
aWYgKGNvbm5lY3Rpb25UYXJnZXRQYWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0TGlzdCkgeworICAgICAgICAgICAgaWYgKHRhcmdl
dC5pZCA9PSBjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBt
X2luc3BlY3RvclByb3h5TWFwLmdldChjb25uZWN0aW9uVGFyZ2V0UGFpciktPnNldFRhcmdldE5h
bWUodGFyZ2V0Lm5hbWUpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZv
dW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChjb25uZWN0aW9uVGFyZ2V0
UGFpci5zZWNvbmQpOworICAgIH0KKyAgICBmb3IgKGF1dG8gdGFyZ2V0SUQgOiB0YXJnZXRzVG9S
ZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlv
bklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFu
Z2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25z
dCBjaGFyKiBtZXNzYWdlKQoreworICAgIGF1dG8gcHJveHkgPSBtX2luc3BlY3RvclByb3h5TWFw
LmdldChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisgICAgQVNTRVJU
KHByb3h5KTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm47CisgICAgcHJveHktPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90
ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2ds
aWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmFkZWUwMmNlNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxh
YmxlIEdDYW5jZWxsYWJsZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUlu
c3BlY3RvckNsaWVudDsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OworY2xhc3MgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50
JikgPSAwOworfTsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChj
b25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZl
ciYpOworICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKKworICAgIHN0cnVjdCBUYXJnZXQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdWludDY0X3QgaWQ7CisgICAgICAgIENTdHJpbmcgdHlw
ZTsKKyAgICAgICAgQ1N0cmluZyBuYW1lOworICAgICAgICBDU3RyaW5nIHVybDsKKyAgICB9Owor
CisgICAgY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9CisgICAgY29uc3QgU3RyaW5nJiBob3N0QW5kUG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIGJh
Y2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9
CisKKyAgICB2b2lkIGluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJn
ZXRJRCk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9u
SUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsb3NlRnJv
bUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxl
cnMmIG1lc3NhZ2VIYW5kbGVycygpOworICAgIHZvaWQgc2V0dXBDb25uZWN0aW9uKFJlZjxTb2Nr
ZXRDb25uZWN0aW9uPiYmKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25EaWRDbG9zZSgpOworCisgICAg
dm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOworICAgIHZvaWQgc2V0VGFyZ2V0
TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYpOworICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFy
Z2V0SUQsIGNvbnN0IGNoYXIqKTsKKworICAgIFN0cmluZyBtX2hvc3RBbmRQb3J0OworICAgIFN0
cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKKyAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYg
bV9vYnNlcnZlcjsKKyAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0
aW9uOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIEhhc2hN
YXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxzdGQ6
OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3Rv
clByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclBy
b3h5Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU5OWM0
NDY1NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkluc3BlY3RvclByb3h5OworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eUNs
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKSA9
IGRlZmF1bHQ7CisgICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coV2ViSW5zcGVjdG9yUHJveHkm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKFdlYkluc3BlY3RvclByb3h5JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2ViSW5zcGVjdG9yUHJveHkm
LCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goV2ViSW5z
cGVjdG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRldGFjaChXZWJJbnNwZWN0b3JQ
cm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoV2Vi
SW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIHdpZHRo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eShXZWJJ
bnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
dGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmNmZGUzNDliYjcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAK
QEAgLTAsMCArMSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR3VzdGF2byBOb3Jvbmhh
IFNpbHZhIDxnbnNAZ25vbWUub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9u
LmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1ZGUgIldLQXJyYXku
aCIKKyNpbmNsdWRlICJXS0NvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFy
cmF5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCisjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQgaW5zcGVjdG9yVmlld0Rl
c3Ryb3llZChHdGtXaWRnZXQqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJJbnNwZWN0
b3JQcm94eSogaW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+
KHVzZXJEYXRhKTsKKworICAgIC8vIEluZm9ybSBXZWJQcm9jZXNzIGFib3V0IHdlYmluc3BlY3Rv
ciBjbG9zdXJlLiBOb3QgZG9pbmcgc28sCisgICAgLy8gcmVzdWx0cyBpbiBmYWlsdXJlIG9mIHN1
YnNlcXVlbnQgaW52b2NhdGlvbiBvZiB3ZWJpbnNwZWN0b3IuCisgICAgaW5zcGVjdG9yUHJveHkt
PmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldENsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+JiYgY2xpZW50KQoreworICAgIG1fY2xp
ZW50ID0gV1RGTW92ZShjbGllbnQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRh
dGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faW5zcGVjdG9y
V2luZG93KTsKKyAgICB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXRUJLSVRfSU5T
UEVDVE9SX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksICFtX2luc3BlY3RlZFVSTFN0cmluZy5p
c0VtcHR5KCkgPyBtX2luc3BlY3RlZFVSTFN0cmluZy51dGY4KCkuZGF0YSgpIDogbnVsbHB0cik7
Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdL
UGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tTdHJpbmdSZWYsIFdL
U3RyaW5nUmVmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWdu
ZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhw
ZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVk
IGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudERhdGFiYXNlVXNhZ2UgKiAxLjI1KTsK
K30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJv
eHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNs
aWVudEluZm8pKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworICAgIHdlYkluc3Bl
Y3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlv
blJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVu
ZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICAvLyBBbGxv
dyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgQVBJOjpGcmFtZUlu
Zm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFt
ZSgpOworICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkp
IHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJv
eHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOwor
ICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOwor
CisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBp
ZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51
cmwoKSkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxv
YWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+
aWdub3JlKCk7CisKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQg
cGFnZS4KKyAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVz
dChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Q29udGV4dE1lbnVGcm9t
UHJvcG9zZWRNZW51KFdLUGFnZVJlZiBwYWdlUmVmLCBXS0FycmF5UmVmIHByb3Bvc2VkTWVudVJl
ZiwgV0tBcnJheVJlZiogbmV3TWVudVJlZiwgV0tIaXRUZXN0UmVzdWx0UmVmLCBXS1R5cGVSZWYs
IGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIG1lbnVJdGVtcyA9IFdLTXV0
YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZShw
cm9wb3NlZE1lbnVSZWYpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBjb250ZXh0TWVudUl0ZW0gPSBzdGF0aWNf
Y2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KHByb3Bvc2Vk
TWVudVJlZiwgaSkpOworICAgICAgICBzd2l0Y2ggKFdLQ29udGV4dE1lbnVJdGVtR2V0VGFnKGNv
bnRleHRNZW51SXRlbSkpIHsKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5J
bWFnZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5G
cmFtZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5N
ZWRpYUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9h
ZEltYWdlVG9EaXNrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZW51SXRlbXMsIGNvbnRleHRNZW51SXRlbSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgICpuZXdNZW51UmVmID0g
bWVudUl0ZW1zOworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7Cisg
ICAgQVNTRVJUKCFtX2luc3BlY3RvclZpZXcpOworCisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdl
YlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwor
I2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGlu
c3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcg
c2V0dGluZ3MuCisgICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1
ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVF
bmFibGVkKHRydWUpOworI2VuZGlmCisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50
aW1lRmxhZ3MoeworICAgIH0pOworICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpj
cmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgp
KSk7CisKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlv
bjo6Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNw
ZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0aW9uTGV2ZWwoKSkpOworICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7CisgICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOworICAgIG1faW5zcGVjdG9yVmll
dyA9IEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2VDcmVhdGUoKnBhZ2VDb25maWd1cmF0aW9u
LnB0cigpKSk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2luc3Bl
Y3RvclZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yVmlldykpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JWaWV3LCAiZGVzdHJveSIsIEdfQ0FMTEJB
Q0soaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworCisgICAgV0tQYWdlVUlDbGllbnRW
MiB1aUNsaWVudCA9IHsKKyAgICAgICAgeyAyLCB0aGlzIH0sCisgICAgICAgIG51bGxwdHIsIC8v
IGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAv
LyBzaG93UGFnZQorICAgICAgICBudWxscHRyLCAvLyBjbG9zZVBhZ2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gdGFrZUZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIGZvY3VzCisgICAgICAgIG51bGxw
dHIsIC8vIHVuZm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdEFsZXJ0Cisg
ICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRDb25maXJtCisgICAgICAgIG51bGxwdHIs
IC8vIHJ1bkphdmFTY3JpcHRQcm9tcHQKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzVGV4
dAorICAgICAgICBudWxscHRyLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudF9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIG1pc3NpbmdQbHVnaW5CdXR0b25DbGlj
a2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkTm90SGFu
ZGxlS2V5RXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkTm90SGFuZGxlV2hlZWxFdmVudAor
ICAgICAgICBudWxscHRyLCAvLyBhcmVUb29sYmFyc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwg
Ly8gc2V0VG9vbGJhcnNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzTWVudUJhclZpc2li
bGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0TWVudUJhclZpc2libGUKKyAgICAgICAgbnVsbHB0
ciwgLy8gaXNTdGF0dXNCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c0Jh
clZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNSZXNpemFibGUKKyAgICAgICAgbnVsbHB0
ciwgLy8gc2V0UmVzaXphYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGdldFdpbmRvd0ZyYW1lLAor
ICAgICAgICBudWxscHRyLCAvLyBzZXRXaW5kb3dGcmFtZSwKKyAgICAgICAgbnVsbHB0ciwgLy8g
cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsCisgICAgICAgIG51bGxwdHIsIC8vIGRpZERyYXcK
KyAgICAgICAgbnVsbHB0ciwgLy8gcGFnZURpZFNjcm9sbAorICAgICAgICBleGNlZWRlZERhdGFi
YXNlUXVvdGEsCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bk9wZW5QYW5lbCwKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAorICAg
ICAgICBudWxscHRyLCAvLyBoZWFkZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwgLy8gZm9vdGVy
SGVpZ2h0CisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdIZWFkZXIKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZHJhd0Zvb3RlcgorICAgICAgICBudWxscHRyLCAvLyBwcmludEZyYW1lCisgICAgICAgIG51
bGxwdHIsIC8vIHJ1bk1vZGFsCisgICAgICAgIG51bGxwdHIsIC8vIHVudXNlZAorICAgICAgICBu
dWxscHRyLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCisgICAgICAgIG51bGxw
dHIsIC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQKKyAgICAgICAgbnVsbHB0ciwgLy8gY3Jl
YXRlUGFnZQorICAgICAgICBudWxscHRyLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAg
ICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdAorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWRf
ZGVwcmVjYXRlZEZvclVzZVdpdGhWMQorICAgICAgICBudWxscHRyLCAvLyBzaG93Q29sb3JQaWNr
ZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbG9yUGlja2VyCisgICAgICAgIG51bGxwdHIs
IC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZAorICAgIH07CisKKyAgICBXS1BhZ2VO
YXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKKyAgICAgICAgeyAwLCB0aGlz
IH0sCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCisgICAgICAgIG51
bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQorICAgICAgICBudWxs
cHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRy
LCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZENvbW1pdE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlv
bgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRy
LCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQorICAgICAgICBudWxscHRyLCAv
LyBkaWRGaW5pc2hEb2N1bWVudExvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3Vt
ZW50TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENo
YW5nZQorICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZQorICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCisgICAgICAgIG51bGxwdHIsIC8vIGNv
cHlXZWJDcnlwdG9NYXN0ZXJLZXkKKworICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmln
YXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVy
ZQorICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBu
dWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CisgICAgfTsKKwor
ICAgIFdLUGFnZUNvbnRleHRNZW51Q2xpZW50VjMgY29udGV4dE1lbnVDbGllbnQgPSB7CisgICAg
ICAgIHsgMywgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBnZXRDb250ZXh0TWVudUZyb21Q
cm9wb3NlZE1lbnVfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBj
dXN0b21Db250ZXh0TWVudUl0ZW1TZWxlY3RlZAorICAgICAgICBudWxscHRyLCAvLyBjb250ZXh0
TWVudURpc21pc3NlZAorICAgICAgICBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUsCisg
ICAgICAgIG51bGxwdHIsIC8vIHNob3dDb250ZXh0TWVudQorICAgICAgICBudWxscHRyLCAvLyBo
aWRlQ29udGV4dE1lbnUKKyAgICB9OworCisgICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdl
ID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1faW5zcGVj
dG9yVmlldykpOworICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsKKworICAgIFdLUGFnZVNldFBh
Z2VVSUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJnVpQ2xpZW50LmJhc2UpOworICAgIFdL
UGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmbmF2aWdh
dGlvbkNsaWVudC5iYXNlKTsKKyAgICBXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVDbGllbnQodG9B
UEkoaW5zcGVjdG9yUGFnZSksICZjb250ZXh0TWVudUNsaWVudC5iYXNlKTsKKworICAgIHJldHVy
biBpbnNwZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPm9w
ZW5XaW5kb3coKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIGluc3Bl
Y3RlZFZpZXdQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChpbnNwZWN0ZWRQYWdlKCkt
PnZpZXdXaWRnZXQoKSk7CisgICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2
ZWxXaW5kb3coaW5zcGVjdGVkVmlld1BhcmVudCkpCisgICAgICAgIGluc3BlY3RlZFZpZXdQYXJl
bnQgPSBudWxscHRyOworCisgICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7CisgICAgbV9p
bnNwZWN0b3JXaW5kb3cgPSB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoaW5zcGVjdGVkVmlld1Bh
cmVudCA/IEdUS19XSU5ET1coaW5zcGVjdGVkVmlld1BhcmVudCkgOiBudWxscHRyKTsKKyAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNw
ZWN0b3JWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKKworICAg
IGlmICghbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICB1cGRhdGVJbnNw
ZWN0b3JXaW5kb3dUaXRsZSgpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09C
SkVDVChtX2luc3BlY3RvcldpbmRvdyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNw
ZWN0b3JXaW5kb3cpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX2luc3Bl
Y3RvcldpbmRvdykpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3KSB7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2luc3BlY3RvclZp
ZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlz
KTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
bV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZSgqdGhpcyk7CisKKyAgICBpZiAo
bV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVj
dG9yV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBudWxscHRyOworICAgIH0K
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkK
K3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0
U3RhdGUoKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9G
cm9udCgpCit7CisgICAgaWYgKG1faXNPcGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmJyaW5nVG9Gcm9udCgqdGhpcykpCisgICAgICAgIHJl
dHVybjsKKworICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwo
bV9pbnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxl
dmVsV2luZG93KHBhcmVudCkpCisgICAgICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9X
KHBhcmVudCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5z
cGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgR3RrV2lkZ2V0KiBw
YXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOworICAgIGlm
IChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAgICAg
ICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIGd0a193aW5kb3dfaXNfYWN0aXZlKEdUS19XSU5ET1co
cGFyZW50KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAg
bV9pbnNwZWN0ZWRVUkxTdHJpbmcgPSB1cmw7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZCgqdGhpcywgdXJsKTsKKworICAgIGlmIChtX2lu
c3BlY3RvcldpbmRvdykKKyAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3Qg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIHJl
dHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sIik7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9y
VGVzdFBhZ2VVUkwoKQoreworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJr
aXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sIik7Cit9CisKK1N0cmluZyBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCit7CisgICAgcmV0dXJuIFN0cmluZygi
cmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS8iKTsKK30KKwor
RGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dh
YmxlKCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2PjogdGhp
cyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0Lgor
ICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3Vuc2lnbmVkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAg
cmV0dXJuIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF9oZWlnaHQoaW5zcGVjdGVkUGFnZSgpLT52
aWV3V2lkZ2V0KCkpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X2FsbG9j
YXRlZF93aWR0aChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBHUmVmUHRyPEd0a1dpZGdl
dD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldzsKKyAgICBpZiAobV9pbnNwZWN0b3JX
aW5kb3cpIHsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihtX2lu
c3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CisgICAgICAgIGd0a193aWRnZXRfZGVz
dHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsK
KyAgICB9CisKKyAgICAvLyBTZXQgYSBkZWZhdWx0IHNpemVzIGJhc2VkIG9uIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRh
Y2hlZFNpemUgPSAzMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hl
ZFdpZHRoID0gNzUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQgPSAyNTA7CisKKyAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lk
ZTo6Qm90dG9tKSB7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBs
YXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0
ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRm
b3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93V2lkdGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWlu
KGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOworICAgIH0KKwor
ICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YXR0YWNoKCp0aGlzKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV0VCS0lUX1dFQl9W
SUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCBtX2luc3BlY3RvclZpZXcs
IG1fYXR0YWNobWVudFNpZGUpOworICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAg
aWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JW
aWV3OworICAgIGlmICghbV9jbGllbnQgfHwgIW1fY2xpZW50LT5kZXRhY2goKnRoaXMpKSB7Cisg
ICAgICAgIC8vIERldGFjaCBpcyBjYWxsZWQgd2hlbiBtX2lzQXR0YWNoZWQgaXMgdHJ1ZSwgYnV0
IGl0IGNvdWxkIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgLy8gdGhlIGluc3BlY3RvciBpcyBvcGVu
ZWQgaWYgdGhlIGluc3BlY3RvciBpcyBzaG93bi9jbG9zZWQgcXVpY2tseS4gU28sCisgICAgICAg
IC8vIHdlIG1pZ2h0IG5vdCBoYXZlIGEgcGFyZW50IHlldC4KKyAgICAgICAgaWYgKEd0a1dpZGdl
dCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KG1faW5zcGVjdG9yVmlldykpCisgICAg
ICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhcmVudCksIG1faW5z
cGVjdG9yVmlldyk7CisgICAgfQorCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdlIGFyZSBub3Qg
dmlzaWJsZS4gVGhpcyBtZWFucyB0aGUgaW5zcGVjdG9yIHdhcyBjbG9zZWQgd2hpbGUgYXR0YWNo
ZWQKKyAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW5kIHNob3cgdGhlIGluc3BlY3Rv
ciB3aW5kb3cuCisgICAgaWYgKCFtX2lzVmlzaWJsZSkgeworICAgICAgICAvLyBUaGUgaW5zcGVj
dG9yIHZpZXcgd2lsbCBiZSBkZXN0cm95ZWQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIG5vdGlmeSB0
aGUgd2ViIHByb2Nlc3MgdG8gY2xvc2UgdGhlCisgICAgICAgIC8vIGluc3BlY3RvciBpbiB0aGlz
IGNhc2UsIHNpbmNlIGl0J3MgYWxyZWFkeSBjbG9zZWQuCisgICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2luc3BlY3RvclZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKyAgICAgICAgbV9pbnNwZWN0
b3JWaWV3ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG9wZW4oKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoYW5n
ZUF0dGFjaGVkSGVpZ2h0KCp0aGlzLCBoZWlnaHQpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0
SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52
aWV3V2lkZ2V0KCkpLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgaWYgKCFt
X2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFjaGVkV2lkdGgoKnRoaXMsIHdpZHRoKTsKKyAgICB3
ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNF
KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgd2lkdGgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitzdGF0aWMgdm9pZCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2soR09iamVjdCogc291
cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCit7Cisg
ICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKKyAgICBpZiAoIWdfZmlsZV9y
ZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIsIG51bGxwdHIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViUGFnZVBy
b3h5Kj4odXNlckRhdGEpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3Bh
dGgoZmlsZSkpOworICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSwgcGFnZS0+d2ViUGFnZUlEKCkpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNl
U2F2ZURpYWxvZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZm9yY2VTYXZlRGlhbG9nKTsKKworICAg
IEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JW
aWV3KTsKKyAgICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhw
YXJlbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a0ZpbGVDaG9vc2VyTmF0
aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9uYXRpdmVfbmV3KCJTYXZl
IEZpbGUiLAorICAgICAgICBHVEtfV0lORE9XKHBhcmVudCksIEdUS19GSUxFX0NIT09TRVJfQUNU
SU9OX1NBVkUsICJTYXZlIiwgIkNhbmNlbCIpKTsKKworICAgIEd0a0ZpbGVDaG9vc2VyKiBjaG9v
c2VyID0gR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cuZ2V0KCkpOworICAgIGd0a19maWxlX2Nob29z
ZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25maXJtYXRpb24oY2hvb3NlciwgVFJVRSk7CisKKyAgICAv
LyBTb21lIGluc3BlY3RvciB2aWV3cyAoQXVkaXRzIGZvciBpbnN0YW5jZSkgdXNlIGEgY3VzdG9t
IFVSSSBzY2hlbWUsIHN1Y2gKKyAgICAvLyBhcyB3ZWItaW5zcGVjdG9yLiBTbyB3ZSBjYW4ndCBy
ZWx5IG9uIHRoZSBVUkwgYmVpbmcgYSB2YWxpZCBmaWxlOi8vLyBVUkwKKyAgICAvLyB1bmZvcnR1
bmF0ZWx5LgorICAgIFVSTCB1cmwoVVJMKCksIHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gU3RyaXAg
bGVhZGluZyAvIGNoYXJhY3Rlci4KKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9jdXJyZW50X25h
bWUoY2hvb3NlciwgdXJsLnBhdGgoKS5zdWJzdHJpbmcoMSkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZy5nZXQo
KSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxjaGFyPiBkYXRhVmVjdG9yOworICAgIENTdHJpbmcgZGF0YVN0cmluZzsKKyAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgeworICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVj
dG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFTdHJp
bmcgPSBjb250ZW50LnV0ZjgoKTsKKworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmlu
Zy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAg
c2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcubGVu
Z3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRv
cHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIGdfZmlsZV9y
ZXBsYWNlX2NvbnRlbnRzX2FzeW5jKGZpbGUuZ2V0KCksIGRhdGEsIGRhdGFMZW5ndGgsIG51bGxw
dHIsIGZhbHNlLAorICAgICAgICBHX0ZJTEVfQ1JFQVRFX1JFUExBQ0VfREVTVElOQVRJT04sIG51
bGxwdHIsIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjaywgbV9pbnNwZWN0b3JQYWdlKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFp
bGFibGUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdl
QXR0YWNoQXZhaWxhYmlsaXR5KCp0aGlzLCBhdmFpbGFibGUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
dGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ5MGYwZTZmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5j
cHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3Rv
cldpbmRvdy5oIgorCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgewor
ICAgIEd0a1dpbmRvdyBwYXJlbnQ7CisKKyAgICBHdGtXaWRnZXQqIGhlYWRlckJhcjsKK307CisK
K3N0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MgeworICAgIEd0a1dpbmRvd0NsYXNz
IHBhcmVudDsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0SW5zcGVjdG9yV2luZG93LCB3ZWJr
aXRfaW5zcGVjdG9yX3dpbmRvdywgR1RLX1RZUEVfV0lORE9XKQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfaW5zcGVjdG9yX3dpbmRvd19jbGFzc19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNz
KikKK3sKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfaW5pdChXZWJL
aXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdykKK3sKKyAgICB3aW5kb3ctPmhlYWRlckJhciA9IGd0
a19oZWFkZXJfYmFyX25ldygpOworICAgIGd0a19oZWFkZXJfYmFyX3NldF90aXRsZShHVEtfSEVB
REVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIF8oIldlYiBJbnNwZWN0b3IiKSk7CisgICAgZ3Rr
X2hlYWRlcl9iYXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+
aGVhZGVyQmFyKSwgVFJVRSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGViYXIoR1RLX1dJTkRP
Vyh3aW5kb3cpLCB3aW5kb3ctPmhlYWRlckJhcik7CisgICAgZ3RrX3dpZGdldF9zaG93KHdpbmRv
dy0+aGVhZGVyQmFyKTsKK30KKworR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXco
R3RrV2luZG93KiBwYXJlbnQpCit7CisgICAgcmV0dXJuIEdUS19XSURHRVQoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZF
TCwgInRyYW5zaWVudC1mb3IiLCBwYXJlbnQsCisgICAgICAgICJkZWZhdWx0LXdpZHRoIiwgV2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0IiwgV2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsKK30KKwordm9p
ZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cq
IHdpbmRvdywgY29uc3QgY2hhciogc3VidGl0bGUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyh3aW5kb3cpKTsKKworICAgIGd0a19oZWFkZXJfYmFy
X3NldF9zdWJ0aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIHN1YnRpdGxl
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsv
V2ViS2l0SW5zcGVjdG9yV2luZG93LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5lYmRjMjhkMTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmgKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XICAgICAgICAgICAgKHdlYmtp
dF9pbnNwZWN0b3Jfd2luZG93X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9JTlNQRUNUT1Jf
V0lORE9XKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIFdlYktpdEluc3BlY3RvcldpbmRvdykpCisj
ZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQor
I2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBX
ZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1Jf
V0lORE9XX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQorI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJ
TkRPV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgV2ViS2l0SW5zcGVjdG9y
V2luZG93OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzIFdlYktp
dEluc3BlY3RvcldpbmRvd0NsYXNzOworCitHVHlwZSB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19n
ZXRfdHlwZSh2b2lkKTsKKworR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3Rr
V2luZG93KiBwYXJlbnQpOwordm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShX
ZWJLaXRJbnNwZWN0b3JXaW5kb3cqLCBjb25zdCBjaGFyKiBzdWJ0aXRsZSk7CisKK0dfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dL
SW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYTk4MzkxYzQyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5o
CkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KworI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0
IEhpZ2hsaWdodDsKK30KKworQGludGVyZmFjZSBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgOiBV
SVZpZXcgeworICAgIE5TTXV0YWJsZUFycmF5ICpfbGF5ZXJzOyAvLyBDQVNoYXBlTGF5ZXJzLgor
fQorLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Owor
QGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA2NWYwYzAzZTMzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcubW0KQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIgorCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW5zcGVj
dG9yT3ZlcmxheS5oPgorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBfbGF5ZXJzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzZWxmIF9yZW1vdmVB
bGxMYXllcnNdOworICAgIFtfbGF5ZXJzIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworLSAodm9pZClfcmVtb3ZlQWxsTGF5ZXJzCit7CisgICAgZm9yIChDQVNoYXBlTGF5ZXIg
KmxheWVyIGluIF9sYXllcnMpCisgICAgICAgIFtsYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07
CisgICAgW19sYXllcnMgcmVtb3ZlQWxsT2JqZWN0c107Cit9CisKKy0gKHZvaWQpX2NyZWF0ZUxh
eWVyczooTlNVSW50ZWdlciludW1MYXllcnMKK3sKKyAgICBpZiAoW19sYXllcnMgY291bnRdID09
IG51bUxheWVycykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3JlbW92ZUFsbExheWVy
c107CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgewor
ICAgICAgICBDQVNoYXBlTGF5ZXIgKmxheWVyID0gW1tDQVNoYXBlTGF5ZXIgYWxsb2NdIGluaXRd
OworICAgICAgICBbX2xheWVycyBhZGRPYmplY3Q6bGF5ZXJdOworICAgICAgICBbc2VsZi5sYXll
ciBhZGRTdWJsYXllcjpsYXllcl07CisgICAgICAgIFtsYXllciByZWxlYXNlXTsKKyAgICB9Cit9
CisKK3N0YXRpYyBib29sIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHAxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwMiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgZDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGQyLCBXZWJDb3JlOjpGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pIAoreworICAgIC8vIERvIHRo
ZSBsaW5lcyBpbnRlcnNlY3Q/CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZW1wb3JhcnlJbnRl
cnNlY3Rpb25Qb2ludDsKKyAgICBpZiAoIWZpbmRJbnRlcnNlY3Rpb24ocDEsIHAyLCBkMSwgZDIs
IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gSXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIG9uIHRoZSBs
aW5lPworICAgIGlmIChwMS54KCkgPj0gcDIueCgpKSB7CisgICAgICAgIGlmICh0ZW1wb3JhcnlJ
bnRlcnNlY3Rpb25Qb2ludC54KCkgPiBwMS54KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9p
bnQueCgpIDwgcDIueCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPiBwMi54KCkgfHwg
dGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpIDwgcDEueCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocDEueSgpID49IHAyLnkoKSkgeworICAgICAgICBp
ZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpID4gcDEueSgpIHx8IHRlbXBvcmFyeUlu
dGVyc2VjdGlvblBvaW50LnkoKSA8IHAyLnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgp
ID4gcDIueSgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA8IHAxLnkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnRlcnNlY3Rpb24gPSB0ZW1w
b3JhcnlJbnRlcnNlY3Rpb25Qb2ludDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVGhpcyBx
dWFkIGludGVyc2VjdGlvbiB3b3JrcyBiZWNhdXNlIHRoZSB0d28gcXVhZHMgYXJlIGtub3duIHRv
IGJlIGF0IHRoZSBzYW1lCisvLyByb3RhdGlvbiBhbmQgY2xvY2t3aXNlLW5lc3MuCitzdGF0aWMg
V2ViQ29yZTo6RmxvYXRRdWFkIHF1YWRJbnRlcnNlY3Rpb24oV2ViQ29yZTo6RmxvYXRRdWFkIGJv
dW5kcywgV2ViQ29yZTo6RmxvYXRRdWFkIHRvQ2xhbXApCit7CisgICAgLy8gUmVzdWx0aW5nIHBv
aW50cy4KKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHAxLCBwMiwgcDMsIHA0OworICAgIGJvb2wg
Y29udGFpbnNQb2ludDEgPSBmYWxzZTsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQyID0gZmFsc2U7
CisgICAgYm9vbCBjb250YWluc1BvaW50MyA9IGZhbHNlOworICAgIGJvb2wgY29udGFpbnNQb2lu
dDQgPSBmYWxzZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50MSA9IGZhbHNlOworICAgIGJv
b2wgaW50ZXJzZWN0Rm9yUG9pbnQyID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2lu
dDMgPSBmYWxzZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50NCA9IGZhbHNlOworCisgICAg
Ly8gVG9wIC8gYm90dG9tIHZlcnRpY2FsIGNsYW1waW5nLgorICAgIGlmIChib3VuZHMuY29udGFp
bnNQb2ludCh0b0NsYW1wLnAxKCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1ZTsK
KyAgICAgICAgcDEgPSB0b0NsYW1wLnAxKCk7CisgICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZv
clBvaW50MSA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgp
LCBib3VuZHMucDIoKSwgdG9DbGFtcC5wMSgpLCB0b0NsYW1wLnA0KCksIHAxKSkpCisgICAgICAg
IHAxID0gdG9DbGFtcC5wMSgpOworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xh
bXAucDIoKSkpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVlOworICAgICAgICBwMiA9
IHRvQ2xhbXAucDIoKTsKKyAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQyID0gZmlu
ZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wMigp
LCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwgcDIpKSkKKyAgICAgICAgcDIgPSB0b0NsYW1w
LnAyKCk7CisKKyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMygpKSkgewor
ICAgICAgICBjb250YWluc1BvaW50MyA9IHRydWU7CisgICAgICAgIHAzID0gdG9DbGFtcC5wMygp
OworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDMgPSBmaW5kSW50ZXJzZWN0aW9u
T25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDIo
KSwgdG9DbGFtcC5wMygpLCBwMykpKQorICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKKworICAg
IGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnA0KCkpKSB7CisgICAgICAgIGNvbnRh
aW5zUG9pbnQ0ID0gdHJ1ZTsKKyAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7CisgICAgfSBlbHNl
IGlmICghKGludGVyc2VjdEZvclBvaW50NCA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVu
UG9pbnRzKGJvdW5kcy5wNCgpLCBib3VuZHMucDMoKSwgdG9DbGFtcC5wMSgpLCB0b0NsYW1wLnA0
KCksIHA0KSkpCisgICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOworCisgICAgLy8gSWYgb25seSBv
bmUgb2YgdGhlIHBvaW50cyBpbnRlcnNlY3RlZCBvbiBlaXRoZXIgdGhlIHRvcCBvciBib3R0b20g
bGluZSB0aGVuIHdlCisgICAgLy8gY2FuIGNsYW1wIHRoZSBvdGhlciBwb2ludCBvbiB0aGF0IGxp
bmUgdG8gdGhlIGNvcm5lciBvZiB0aGUgYm91bmRzLgorICAgIGlmICghY29udGFpbnNQb2ludDEg
JiYgaW50ZXJzZWN0Rm9yUG9pbnQyICYmICFpbnRlcnNlY3RGb3JQb2ludDEpIHsKKyAgICAgICAg
Y29udGFpbnNQb2ludDEgPSB0cnVlOworICAgICAgICBwMSA9IGJvdW5kcy5wMSgpOworICAgIH0g
ZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQyICYmIGludGVyc2VjdEZvclBvaW50MSAmJiAhaW50ZXJz
ZWN0Rm9yUG9pbnQyKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKKyAgICAgICAg
cDIgPSBib3VuZHMucDIoKTsKKyAgICB9CisgICAgaWYgKCFjb250YWluc1BvaW50NCAmJiBpbnRl
cnNlY3RGb3JQb2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50NCkgeworICAgICAgICBjb250YWlu
c1BvaW50NCA9IHRydWU7CisgICAgICAgIHA0ID0gYm91bmRzLnA0KCk7CisgICAgfSBlbHNlIGlm
ICghY29udGFpbnNQb2ludDMgJiYgaW50ZXJzZWN0Rm9yUG9pbnQ0ICYmICFpbnRlcnNlY3RGb3JQ
b2ludDMpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDMgPSB0cnVlOworICAgICAgICBwMyA9IGJv
dW5kcy5wMygpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBo
b3Jpem9udGFsIGNsYW1waW5nIGZvciB1bmFkanVzdGVkIHBvaW50cy4KKyAgICBpZiAoIWNvbnRh
aW5zUG9pbnQyICYmICFpbnRlcnNlY3RGb3JQb2ludDIpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rp
b25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMigpLCBib3VuZHMucDMoKSwgcDEsIHAyLCBw
Mik7CisgICAgaWYgKCFjb250YWluc1BvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKQorICAg
ICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDIoKSwgYm91
bmRzLnAzKCksIHA0LCBwMywgcDMpOworICAgIGlmICghY29udGFpbnNQb2ludDEgJiYgIWludGVy
c2VjdEZvclBvaW50MSkKKyAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2lu
dHMoYm91bmRzLnAxKCksIGJvdW5kcy5wNCgpLCBwMSwgcDIsIHAxKTsKKyAgICBpZiAoIWNvbnRh
aW5zUG9pbnQ0ICYmICFpbnRlcnNlY3RGb3JQb2ludDQpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rp
b25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwgcDQsIHAzLCBw
NCk7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRRdWFkKHAxLCBwMiwgcDMsIHA0KTsKK30K
Kworc3RhdGljIHZvaWQgbGF5ZXJQYXRoV2l0aEhvbGUoQ0FTaGFwZUxheWVyICpsYXllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVh
ZCYgaG9sZVF1YWQpCit7CisgICAgLy8gTm90aGluZyB0byBzaG93LgorICAgIGlmIChvdXRlclF1
YWQgPT0gaG9sZVF1YWQgfHwgaG9sZVF1YWQuY29udGFpbnNRdWFkKG91dGVyUXVhZCkpIHsKKyAg
ICAgICAgbGF5ZXIucGF0aCA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBJZiB0aGVyZSBpcyBhIG5lZ2F0aXZlIG1hcmdpbiAvIHBhZGRpbmcgdGhlbiB0aGUgb3V0ZXIg
Ym94IG1pZ2h0IG5vdAorICAgIC8vIGZ1bGx5IGNvbnRhaW4gdGhlIGhvbGUgYm94LiBJbiBzdWNo
IGNhc2VzIHdlIHJlY2FsY3VsYXRlIHRoZSBob2xlIHRvCisgICAgLy8gYmUgdGhlIGludGVyc2Vj
dGlvbiBvZiB0aGUgdHdvIHF1YWRzLgorICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBpbm5lckhvbGU7
CisgICAgaWYgKG91dGVyUXVhZC5jb250YWluc1F1YWQoaG9sZVF1YWQpKQorICAgICAgICBpbm5l
ckhvbGUgPSBob2xlUXVhZDsKKyAgICBlbHNlCisgICAgICAgIGlubmVySG9sZSA9IHF1YWRJbnRl
cnNlY3Rpb24ob3V0ZXJRdWFkLCBob2xlUXVhZCk7CisKKyAgICAvLyBDbG9ja3dpc2UgaW5zaWRl
IHJlY3QgKGhvbGUpLCBDb3VudGVyLUNsb2Nrd2lzZSBvdXRzaWRlIHJlY3QgKGZpbGwpLgorICAg
IENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKKyAgICBDR1Bh
dGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDEoKS54KCksIGlubmVySG9sZS5wMSgp
LnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAyKCku
eCgpLCBpbm5lckhvbGUucDIoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgs
IDAsIGlubmVySG9sZS5wMygpLngoKSwgaW5uZXJIb2xlLnAzKCkueSgpKTsKKyAgICBDR1BhdGhB
ZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDQoKS54KCksIGlubmVySG9sZS5wNCgp
LnkoKSk7CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAxKCkueCgp
LCBvdXRlclF1YWQucDEoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAs
IG91dGVyUXVhZC5wNCgpLngoKSwgb3V0ZXJRdWFkLnA0KCkueSgpKTsKKyAgICBDR1BhdGhBZGRM
aW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDMoKS54KCksIG91dGVyUXVhZC5wMygpLnko
KSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAyKCkueCgp
LCBvdXRlclF1YWQucDIoKS55KCkpOworICAgIGxheWVyLnBhdGggPSBwYXRoOworICAgIENHUGF0
aFJlbGVhc2UocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGxheWVyUGF0aChDQVNoYXBlTGF5ZXIg
KmxheWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCkKK3sKKyAgICBDR011
dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAgQ0dQYXRoTW92
ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAxKCkueCgpLCBvdXRlclF1YWQucDEoKS55KCkp
OworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wNCgpLngoKSwg
b3V0ZXJRdWFkLnA0KCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBv
dXRlclF1YWQucDMoKS54KCksIG91dGVyUXVhZC5wMygpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGlu
ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAyKCkueCgpLCBvdXRlclF1YWQucDIoKS55KCkp
OworICAgIGxheWVyLnBhdGggPSBwYXRoOworICAgIENHUGF0aFJlbGVhc2UocGF0aCk7Cit9CisK
Ky0gKHZvaWQpX2xheW91dEZvck5vZGVIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdo
dCYpaGlnaGxpZ2h0IG9mZnNldDoodW5zaWduZWQpb2Zmc2V0Cit7CisgICAgQVNTRVJUKFtfbGF5
ZXJzIGNvdW50XSA+PSBvZmZzZXQgKyA0KTsKKyAgICBBU1NFUlQoaGlnaGxpZ2h0LnF1YWRzLnNp
emUoKSA+PSBvZmZzZXQgKyA0KTsKKyAgICBpZiAoW19sYXllcnMgY291bnRdIDwgb2Zmc2V0ICsg
NCB8fCBoaWdobGlnaHQucXVhZHMuc2l6ZSgpIDwgb2Zmc2V0ICsgNCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ0FTaGFwZUxheWVyICptYXJnaW5MYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5k
ZXg6b2Zmc2V0XTsKKyAgICBDQVNoYXBlTGF5ZXIgKmJvcmRlckxheWVyID0gW19sYXllcnMgb2Jq
ZWN0QXRJbmRleDpvZmZzZXQgKyAxXTsKKyAgICBDQVNoYXBlTGF5ZXIgKnBhZGRpbmdMYXllciA9
IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgMl07CisgICAgQ0FTaGFwZUxheWVyICpj
b250ZW50TGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDNdOworCisgICAg
V2ViQ29yZTo6RmxvYXRRdWFkIG1hcmdpblF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0XTsK
KyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgYm9yZGVyUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZz
ZXQgKyAxXTsKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgcGFkZGluZ1F1YWQgPSBoaWdobGlnaHQu
cXVhZHNbb2Zmc2V0ICsgMl07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIGNvbnRlbnRRdWFkID0g
aGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDNdOworCisgICAgbWFyZ2luTGF5ZXIuZmlsbENvbG9y
ID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQubWFyZ2luQ29sb3IpOworICAgIGJvcmRlckxheWVy
LmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmJvcmRlckNvbG9yKTsKKyAgICBw
YWRkaW5nTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQucGFkZGluZ0Nv
bG9yKTsKKyAgICBjb250ZW50TGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGln
aHQuY29udGVudENvbG9yKTsKKworICAgIGxheWVyUGF0aFdpdGhIb2xlKG1hcmdpbkxheWVyLCBt
YXJnaW5RdWFkLCBib3JkZXJRdWFkKTsKKyAgICBsYXllclBhdGhXaXRoSG9sZShib3JkZXJMYXll
ciwgYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQpOworICAgIGxheWVyUGF0aFdpdGhIb2xlKHBhZGRp
bmdMYXllciwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkKTsKKyAgICBsYXllclBhdGgoY29udGVu
dExheWVyLCBjb250ZW50UXVhZCk7Cit9CisKKy0gKHZvaWQpX2xheW91dEZvck5vZGVMaXN0SGln
aGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAoreworICAgIGlmICgh
aGlnaGxpZ2h0LnF1YWRzLnNpemUoKSkgeworICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJz
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IGhp
Z2hsaWdodC5xdWFkcy5zaXplKCkgLyA0OworICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bm9kZUNv
dW50ICogNF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kp
CisgICAgICAgIFtzZWxmIF9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0OmhpZ2hsaWdodCBvZmZzZXQ6
aSAqIDRdOworfQorCistICh2b2lkKV9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDooY29uc3QgV2Vi
Q29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKK3sKKyAgICBOU1VJbnRlZ2VyIG51bUxheWVycyA9
IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7CisgICAgaWYgKCFudW1MYXllcnMpIHsKKyAgICAgICAg
W3NlbGYgX3JlbW92ZUFsbExheWVyc107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBb
c2VsZiBfY3JlYXRlTGF5ZXJzOm51bUxheWVyc107CisKKyAgICBDR0NvbG9yUmVmIGNvbnRlbnRD
b2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7CisgICAgZm9yIChO
U1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKKyAgICAgICAgQ0FTaGFwZUxh
eWVyICpsYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIGxheWVyLmZp
bGxDb2xvciA9IGNvbnRlbnRDb2xvcjsKKyAgICAgICAgbGF5ZXJQYXRoKGxheWVyLCBoaWdobGln
aHQucXVhZHNbaV0pOworICAgIH0KK30KKworLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6
OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Cit7CisgICAgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNv
cmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGUgfHwgaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGln
aGxpZ2h0VHlwZTo6Tm9kZUxpc3QpCisgICAgICAgIFtzZWxmIF9sYXlvdXRGb3JOb2RlTGlzdEhp
Z2hsaWdodDpoaWdobGlnaHRdOworICAgIGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNv
cmU6OkhpZ2hsaWdodFR5cGU6OlJlY3RzKQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yUmVjdHNI
aWdobGlnaHQ6aGlnaGxpZ2h0XTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNo
R2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9p
b3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZiYTY5NWU2YmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25p
emVyLmg+CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6
ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCistIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZp
ZXcgKil2aWV3OworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9y
Tm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4wNjdmZTdiY2NkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJl
Y29nbml6ZXIubW0KQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCIK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJl
Y29nbml6ZXJTdWJjbGFzcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVt
ZW50YXRpb24gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIgeworICAgIFJl
dGFpblB0cjxVSVRvdWNoPiBfdG91Y2g7Cit9CisKKy0gKENHUG9pbnQpbG9jYXRpb25JblZpZXc6
KFVJVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW190b3VjaCBsb2NhdGlvbkluVmlldzp2aWV3
XTsKK30KKworLSAodm9pZClfcHJvY2Vzc1RvdWNoZXM6KE5TU2V0ICopdG91Y2hlcyBzdGF0ZToo
VUlHZXN0dXJlUmVjb2duaXplclN0YXRlKW5ld1N0YXRlCit7CisgICAgQVNTRVJUKF90b3VjaCk7
CisgICAgaWYgKFt0b3VjaGVzIGNvbnRhaW5zT2JqZWN0Ol90b3VjaC5nZXQoKV0pCisgICAgICAg
IHNlbGYuc3RhdGUgPSBuZXdTdGF0ZTsKK30KKworLSAodm9pZCl0b3VjaGVzQmVnYW46KE5TU2V0
ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIGlmIChzZWxmLnN0
YXRlICE9IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQoIV90b3VjaCk7CisgICAgX3RvdWNoID0gW3RvdWNoZXMgYW55T2JqZWN0
XTsKKworICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUJlZ2FuXTsKK30KKworLSAodm9pZCl0b3VjaGVzTW92ZWQ6KE5TU2V0ICop
dG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIFtzZWxmIF9wcm9jZXNz
VG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWRdOwor
fQorCistICh2b2lkKXRvdWNoZXNFbmRlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlF
dmVudCAqKWV2ZW50Cit7CisgICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6
VUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWRdOworfQorCistICh2b2lkKXRvdWNoZXNDYW5j
ZWxsZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAg
IFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZUNhbmNlbGxlZF07Cit9CisKKy0gKHZvaWQpcmVzZXQKK3sKKyAgICBfdG91Y2ggPSBuaWw7
Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGFiZGViNWY2ZDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5LmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQor
CisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJS
ZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXS0ZyYW1lSW5mby5oIgor
I2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0
aW9uQWN0aW9uLmgiCisjaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAi
V0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1w
b3J0ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8
U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1wb3J0IDxTZWN1cml0
eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9DZXJ0aWZp
Y2F0ZUluZm8uaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitAaW50ZXJmYWNlIFdL
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciA6IE5TT2JqZWN0IDxOU1dpbmRvd0Rl
bGVnYXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBfaW5zcGVjdG9yUHJveHk7Cit9CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIKKworLSAoTlNSZWN0KXdpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93ICopc2hlZXQgdXNp
bmdSZWN0OihOU1JlY3QpcmVjdAoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAg
IHJldHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkuaGVpZ2h0
KCksIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7CisgICAgcmV0dXJu
IHJlY3Q7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX2luc3BlY3RvclByb3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAg
ICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRnJvbUNyYXNoKCk7Cit9CisKKy0gKEJPT0wpaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIF9pbnNwZWN0
b3JQcm94eS0+aXNVbmRlclRlc3QoKTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXS1dlYlZpZXcgKlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Ojp3ZWJWaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JWaWV3Lmdl
dCgpLndlYlZpZXc7Cit9CisKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBtX29iakNBZGFw
dGVyID0gYWRvcHROUyhbW1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxv
Y10gaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7CisKKyAgICBtX2luc3Bl
Y3RvclZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5p
dFdpdGhJbnNwZWN0ZWRQYWdlOm51bGxwdHJdKTsKKyAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgp
IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgbV93aW5kb3cgPSBXZWJJ
bnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNaZXJvUmVjdCwgV2ViSW5zcGVj
dG9yUHJveHk6Okluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGUpOworICAgIFttX3dpbmRvdyBz
ZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKyAgICBbbV93aW5kb3cgc2V0RnJhbWVB
dXRvc2F2ZU5hbWU6QCJXS1JlbW90ZVdlYkluc3BlY3RvcldpbmRvd0ZyYW1lIl07CisKKyAgICBO
U1ZpZXcgKmNvbnRlbnRWaWV3ID0gbV93aW5kb3cuZ2V0KCkuY29udGVudFZpZXc7CisgICAgW3dl
YlZpZXcoKSBzZXRGcmFtZTpjb250ZW50Vmlldy5ib3VuZHNdOworICAgIFtjb250ZW50VmlldyBh
ZGRTdWJ2aWV3OndlYlZpZXcoKV07CisKKyAgICByZXR1cm4gd2ViVmlldygpLT5fcGFnZS5nZXQo
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgIFttX3dp
bmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV93aW5kb3cgY2xvc2VdOworICAgICAg
ICBtX3dpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3KSB7Cisg
ICAgICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAg
bV9pbnNwZWN0b3JWaWV3ID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29iakNBZGFwdGVyKQor
ICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIFtOU1dpbmRvdyByZW1vdmVGcmFt
ZVVzaW5nTmFtZTpbbV93aW5kb3cgZnJhbWVBdXRvc2F2ZU5hbWVdXTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIFttX3dp
bmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOworICAgIFttX3dpbmRvdyBtYWtlRmlyc3RS
ZXNwb25kZXI6d2ViVmlldygpXTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAg
Ly8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCisKKyAgICBBU1NFUlQo
IXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9
IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7CisgICAg
aWYgKCFwbGF0Zm9ybVVSTCkgeworICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOnN1Z2dlc3RlZFVSTF07CisgICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBu
ZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgorICAgICAgICBmb3JjZVNh
dmVEaWFsb2cgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhdGZvcm1VUkwpOwor
ICAgIGlmICghcGxhdGZvcm1VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE5lY2Vzc2Fy
eSBmb3IgdGhlIGJsb2NrIGJlbG93LgorICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3Vn
Z2VzdGVkVVJMOworICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7CisKKyAgICBhdXRv
IHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkgeworICAgICAgICBBU1NFUlQoYWN0dWFs
VVJMKTsKKworICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRV
UkxDb3B5LCBhY3R1YWxVUkwpOworCisgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFk
b3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0
LnNpemUoKV0pOworICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJM
IGF0b21pY2FsbHk6WUVTXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbY29udGVudENv
cHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CisKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVh
bFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAg
ICB9OworCisgICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2ZVRvVVJMKHBs
YXRmb3JtVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2ZVBhbmVsICpw
YW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVGaWVsZFN0cmlu
Z1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAvLyBJZiB3ZSBo
YXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFu
ZAorICAgIC8vIGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNl
LCB1c2UgdGhlIHN5c3RlbSdzCisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRp
YWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxhdGZvcm1VUkwu
aXNGaWxlVVJMKQorICAgICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJM
QnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFs
UmVzcG9uc2VDYW5jZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsK
KyAgICB9OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fd2luZG93ID8gbV93aW5kb3cuZ2V0
KCkgOiBbTlNBcHAga2V5V2luZG93XTsKKyAgICBpZiAod2luZG93KQorICAgICAgICBbcGFuZWwg
YmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0
aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwg
cnVuTW9kYWxdKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1B
cHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkK
K3sKKyAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KKworICAg
IEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgUmV0YWluUHRyPE5T
VVJMPiBhY3R1YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRV
UkwpOworICAgIC8vIERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNv
bmZpcm1lZCB0aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4KKyAgICBpZiAoIWFjdHVhbFVSTCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVGb3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9yOk5VTExdOwor
ICAgIFtoYW5kbGUgc2Vla1RvRW5kT2ZGaWxlXTsKKyAgICBbaGFuZGxlIHdyaXRlRGF0YTpbY29u
dGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgIFtoYW5k
bGUgY2xvc2VGaWxlXTsKKworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYlZp
ZXcoKS0+X3BhZ2UuZ2V0KCk7CisgICAgaW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNvbHV0
ZVN0cmluZ10pLCBpbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBtX3NoZWV0UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICB3ZWJWaWV3KCkt
Pl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgW1tO
U1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
dXJsXV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAg
IEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7CisKKyAgICBSZXRhaW5QdHI8U0ZD
ZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNh
dGVQYW5lbCBhbGxvY10gaW5pdF0pOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyNpZiBIQVZF
KFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hl
ZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0
b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVzdCgp
IHNob3dHcm91cDpZRVNdOworI2Vsc2UKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0
Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9y
Ok5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZp
Y2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAg
ICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBk
aXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9y
ZWhhbmQuCisgICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZp
Y2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNw
bGF5VHJ1c3Q6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9d
OworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDhiZDA4ZmY5ZDQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9O
YWtlZFB0ci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorCitPQkpDX0NMQVNTIFdLV2ViVmlldzsK
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisKK0Bwcm90b2Nv
bCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU7CisKK05TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciA6IE5TT2JqZWN0
CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3ICp3ZWJWaWV3Owor
QHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
RGVsZWdhdGU+IGRlbGVnYXRlOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQ
YWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4paW5zcGVjdGVkUGFnZTsKKworKyAo
Qk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJWaWV3OihOU1ZpZXcgKil2aWV3OworCitAZW5kCisKK0Bw
cm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgorQG9w
dGlvbmFsCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6
KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKKy0g
KEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOworLSAodm9pZClp
bnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3Bl
Y3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93
OworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzooV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOworQGVuZAorCitO
U19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZDkyNjNlMGZkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KQEAgLTAs
MCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9y
dCAiQVBJTmF2aWdhdGlvbi5oIgorI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgorI2ltcG9ydCAi
V0tGcmFtZUluZm8uaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCisjaW1wb3J0
ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRlLmgi
CisjaW1wb3J0ICJXS09wZW5QYW5lbFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIldLUHJlZmVyZW5j
ZXNQcml2YXRlLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldLVUlEZWxlZ2F0ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJJbnNw
ZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCitAaW50ZXJm
YWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKCkgPFdLVUlEZWxlZ2F0ZSwgV0tOYXZpZ2F0
aW9uRGVsZWdhdGUsIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHsKKyAgICBOYWtlZFB0cjxXZWJL
aXQ6OldlYlBhZ2VQcm94eT4gX2luc3BlY3RlZFBhZ2U7CisgICAgUmV0YWluUHRyPFdLSW5zcGVj
dG9yV0tXZWJWaWV3PiBfd2ViVmlldzsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8V0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlckRlbGVnYXRlPj4gX2RlbGVnYXRlOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4paW5z
cGVjdGVkUGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgLy8gVGhlIChsb2NhbCkgaW5zcGVjdGVkIHBhZ2UgaXMgbmlsIGlm
IHRoZSBjb250cm9sbGVyIGlzIGhvc3RpbmcgYSBSZW1vdGUgV2ViIEluc3BlY3RvciB2aWV3Lgor
ICAgIF9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoX3dlYlZpZXcpIHsKKyAgICAgICAgW193
ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpuaWxdOworICAgICAgICBbX3dlYlZpZXcgc2V0SW5zcGVjdG9yV0tXZWJWaWV3
RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgX3dlYlZpZXcgPSBuaWw7CisgICAgfQorCisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCistIChpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVn
YXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7
Cit9CisKKy0gKFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICAvLyBDb25zdHJ1Y3QgbGF6aWx5
IHNvIHRoZSBjbGllbnQgY2FuIHNldCB0aGUgZGVsZWdhdGUgYmVmb3JlIHRoZSBXZWJWaWV3IGlz
IGNyZWF0ZWQuCisgICAgaWYgKCFfd2ViVmlldykgeworICAgICAgICBOU1JlY3QgaW5pdGlhbEZy
YW1lID0gTlNNYWtlUmVjdCgwLCAwLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0aWFs
V2luZG93V2lkdGgsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWln
aHQpOworICAgICAgICBfd2ViVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvcldLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTppbml0aWFsRnJhbWUgY29uZmlndXJhdGlvbjpbc2VsZiBjb25m
aWd1cmF0aW9uXV0pOworICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsKKyAg
ICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW193
ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOnNlbGZdOworICAgICAgICBbX3dl
YlZpZXcgX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0czpOT107CisgICAgICAg
IFtfd2ViVmlldyBfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTpZRVNdOworICAgICAgICBbX3dlYlZp
ZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRT
aXphYmxlXTsKKyAgICB9CisKKyAgICByZXR1cm4gX3dlYlZpZXcuZ2V0KCk7Cit9CisKKy0gKHZv
aWQpc2V0RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+KWRl
bGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCit7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKworICAgIFdL
UHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJlbmNl
czsKKyAgICBwcmVmZXJlbmNlcy5fYWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzID0gWUVTOwor
ICAgIFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZ
RVNdOworICAgIHByZWZlcmVuY2VzLl9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBfV0tTdG9yYWdl
QmxvY2tpbmdQb2xpY3lBbGxvd0FsbDsKKyAgICBwcmVmZXJlbmNlcy5famF2YVNjcmlwdFJ1bnRp
bWVGbGFncyA9IDA7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0
byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5n
aW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLl9kZXZlbG9wZXJFeHRyYXNFbmFibGVkID0g
WUVTOworICAgIHByZWZlcmVuY2VzLl9sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5h
YmxlZCA9IFlFUzsKKyNlbmRpZgorCisgICAgcHJlZmVyZW5jZXMuX2RpYWdub3N0aWNMb2dnaW5n
RW5hYmxlZCA9IFlFUzsKKworICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJ
c1VuZGVyVGVzdDopXSkgeworICAgICAgICBpZiAoW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OnNlbGZdKSB7CisgICAgICAgICAgICBwcmVmZXJl
bmNlcy5faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBOTzsKKyAgICAgICAg
ICAgIHByZWZlcmVuY2VzLl9wYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5h
YmxlZCA9IE5POworICAgICAgICB9CisgICAgfQorCisgICAgW2NvbmZpZ3VyYXRpb24gc2V0UHJv
Y2Vzc1Bvb2w6d3JhcHBlcihXZWJLaXQ6Omluc3BlY3RvclByb2Nlc3NQb29sKFdlYktpdDo6aW5z
cGVjdG9yTGV2ZWxGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKSkpXTsKKyAgICBbY29uZmlndXJhdGlv
biBfc2V0R3JvdXBJZGVudGlmaWVyOldlYktpdDo6aW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmll
ckZvclBhZ2UoX2luc3BlY3RlZFBhZ2UpXTsKKworICAgIHJldHVybiBjb25maWd1cmF0aW9uLmF1
dG9yZWxlYXNlKCk7Cit9CisKKysgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmlldzooTlNWaWV3
ICopdmlldworeworICAgIHJldHVybiBbdmlldyBpc0tpbmRPZkNsYXNzOltXS0luc3BlY3RvcldL
V2ViVmlldyBjbGFzc11dOworfQorCisvLyBNQVJLOiBXS1VJRGVsZWdhdGUgbWV0aG9kcworCist
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGdldFdpbmRvd0ZyYW1lV2l0aENv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShDR1JlY3QpKWNvbXBsZXRpb25IYW5kbGVyCit7Cisg
ICAgaWYgKCFfd2ViVmlldy5nZXQoKS53aW5kb3cpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENHUmVjdFplcm8pOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTlNSZWN0
VG9DR1JlY3QoW3dlYlZpZXcgZnJhbWVdKSk7Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgc2V0V2luZG93RnJhbWU6KENHUmVjdClmcmFtZQoreworICAgIGlmICgh
X3dlYlZpZXcuZ2V0KCkud2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBbX3dlYlZpZXcu
Z2V0KCkud2luZG93IHNldEZyYW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUpIGRpc3BsYXk6WUVT
XTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bk9wZW5QYW5l
bFdpdGhQYXJhbWV0ZXJzOihXS09wZW5QYW5lbFBhcmFtZXRlcnMgKilwYXJhbWV0ZXJzIGluaXRp
YXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TQXJyYXk8TlNVUkwgKj4gKlVSTHMpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgTlNP
cGVuUGFuZWwgKm9wZW5QYW5lbCA9IFtOU09wZW5QYW5lbCBvcGVuUGFuZWxdOworICAgIG9wZW5Q
YW5lbC5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHBhcmFtZXRlcnMuYWxsb3dzTXVsdGlwbGVT
ZWxlY3Rpb247CisKKyAgICBhdXRvIHJlcG9ydFNlbGVjdGVkRmlsZXMgPSBeKE5TSW50ZWdlciBy
ZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSykKKyAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG9wZW5QYW5lbC5VUkxzKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICB9OworCisgICAgaWYgKF93
ZWJWaWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgW29wZW5QYW5lbCBiZWdpblNoZWV0TW9kYWxG
b3JXaW5kb3c6X3dlYlZpZXcuZ2V0KCkud2luZG93IGNvbXBsZXRpb25IYW5kbGVyOnJlcG9ydFNl
bGVjdGVkRmlsZXNdOworICAgIGVsc2UKKyAgICAgICAgcmVwb3J0U2VsZWN0ZWRGaWxlcyhbb3Bl
blBhbmVsIHJ1bk1vZGFsXSk7Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOihXS1NlY3VyaXR5T3Jp
Z2luICopc2VjdXJpdHlPcmlnaW4gY3VycmVudFF1b3RhOih1bnNpZ25lZCBsb25nIGxvbmcpY3Vy
cmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRP
cmlnaW5Vc2FnZSBjdXJyZW50RGF0YWJhc2VVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJl
bnRVc2FnZSBleHBlY3RlZFVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpZXhwZWN0ZWRVc2FnZSBk
ZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkpZGVj
aXNpb25IYW5kbGVyCit7CisgICAgZGVjaXNpb25IYW5kbGVyKHN0ZDo6bWF4PHVuc2lnbmVkIGxv
bmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudFVzYWdlICogMS4yNSkpOworfQorCistIChO
U01lbnUgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjb250ZXh0TWVudTooTlNNZW51
ICopbWVudSBmb3JFbGVtZW50OihfV0tDb250ZXh0TWVudUVsZW1lbnRJbmZvICopZWxlbWVudAor
eworICAgIGZvciAoTlNJbnRlZ2VyIGkgPSBtZW51Lm51bWJlck9mSXRlbXMgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICBOU01lbnVJdGVtICppdGVtID0gW21lbnUgaXRlbUF0SW5kZXg6aV07
CisgICAgICAgIHN3aXRjaCAoaXRlbS50YWcpIHsKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVu
dUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51
SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51
SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51
SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVu
dUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICAgICAgW21lbnUgcmVtb3ZlSXRl
bUF0SW5kZXg6aV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBtZW51OworfQorCisvLyBNQVJLOiBXS05hdmlnYXRpb25EZWxlZ2F0ZSBtZXRob2Rz
CisKKy0gKHZvaWQpd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlOihXS1dlYlZp
ZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRp
ZENyYXNoOildKQorICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVySW5z
cGVjdG9yRGlkQ3Jhc2g6c2VsZl07Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25BY3Rp
b24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0
aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICAvLyBBbGxvdyBub24tbWFp
biBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgaWYgKCFuYXZpZ2F0aW9uQWN0aW9u
LnRhcmdldEZyYW1lLmlzTWFpbkZyYW1lKSB7CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgorICAgIGlmIChX
ZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKG5hdmln
YXRpb25BY3Rpb24ucmVxdWVzdC5VUkwpKSB7CisgICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKKyAgICAKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2Fk
IGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAgICBpZiAoX2luc3BlY3RlZFBhZ2UpCisgICAg
ICAgIF9pbnNwZWN0ZWRQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3Qp
OworfQorCisvLyBNQVJLOiBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIG1ldGhvZHMKKwor
LSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICop
d2ViVmlldworeworICAgIGlmICghX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE9wdGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlvbnM7CisgICAg
aWYgKFdlYktpdDo6bGlua2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RXaXRo
RXhwaXJlZE9ubHlSZWxvYWRCZWhhdmlvcikpCisgICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFdl
YkNvcmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOworCisgICAgX2luc3BlY3RlZFBhZ2Ut
PnJlbG9hZChyZWxvYWRPcHRpb25zKTsKK30KKworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdS
ZWxvYWRGcm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBp
ZiAoIV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBfaW5zcGVjdGVkUGFn
ZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RnJvbU9yaWdpbik7Cit9CisKKy0gKHZv
aWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2ls
bE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBpZiAoISFfZGVsZWdh
dGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZp
ZXdDb250cm9sbGVyOndpbGxNb3ZlVG9XaW5kb3c6KV0pCisgICAgICAgIFtfZGVsZWdhdGUgaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107Cit9
CisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihXS0luc3BlY3Rv
cldLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVyRGlk
TW92ZVRvV2luZG93OildKQorICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9s
bGVyRGlkTW92ZVRvV2luZG93OnNlbGZdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dLSW5zcGVjdG9yV0tXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmM1N2U3N2NmZTdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlldy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZTsKKworQGludGVyZmFjZSBXS0luc3BlY3RvcldLV2ViVmlldyA6IFdL
V2ViVmlldworQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3BlY3RvcldLV2Vi
Vmlld0RlbGVnYXRlPiBpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTsKK0BlbmQKKworQHByb3Rv
Y29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUKK0ByZXF1aXJlZAorLSAodm9pZClpbnNw
ZWN0b3JXS1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKKy0g
KHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dl
YlZpZXcgKil3ZWJWaWV3OworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXc6KFdLSW5zcGVjdG9y
V0tXZWJWaWV3ICopd2ViVmlldyB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRv
dzsKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihXS0luc3BlY3Rv
cldLV2ViVmlldyAqKXdlYlZpZXc7CitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVj
dG9yV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNGJmZWY0YTAxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCkBAIC0wLDAgKzEsODQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9y
V0tXZWJWaWV3LmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIldLSW5zcGVjdG9y
UHJpdmF0ZU1hYy5oIgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKK0BpbXBsZW1lbnRh
dGlvbiBXS0luc3BlY3RvcldLV2ViVmlldyB7CisgICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVj
dG9yV0tXZWJWaWV3RGVsZWdhdGU+PiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Cit9CisK
Ky0gKE5TUmVjdClfb3BhcXVlUmVjdEZvcldpbmRvd01vdmVXaGVuSW5UaXRsZWJhcgoreworICAg
IC8vIFRoaXMgY29udmluY2VzIEFwcEtpdCB0byBhbGxvdyB3aW5kb3cgbW92ZXMgd2hlbiBjbGlj
a2luZyBhbnl3aGVyZSBpbiB0aGUgdGl0bGViYXIgKHRvcCAyMnB0KQorICAgIC8vIHdoZW4gdGhp
cyB2aWV3J3MgY29udGVudHMgY292ZXIgdGhlIGVudGlyZSB3aW5kb3cncyBjb250ZW50cywgaW5j
bHVkaW5nIHRoZSB0aXRsZWJhci4KKyAgICByZXR1cm4gTlNaZXJvUmVjdDsKK30KKworLSAoTlNJ
bnRlZ2VyKXRhZworeworICAgIHJldHVybiBXS0luc3BlY3RvclZpZXdUYWc7Cit9CisKKy0gKGlk
IDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZQoreworICAgIHJldHVybiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUuZ2V0QXV0b3JlbGVh
c2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6KGlkIDxX
S0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9pbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChJQkFjdGlvbilyZWxvYWQ6KGlk
KXNlbmRlcgoreworICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3Rv
cldLV2ViVmlld1JlbG9hZDpzZWxmXTsKK30KKworLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdp
bjooaWQpc2VuZGVyCit7CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5z
cGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjpzZWxmXTsKK30KKworLSAodm9pZCl2aWV3
V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBbc3VwZXIgdmll
d1dpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXc6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dp
bmRvd107Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdworeworICAgIFtzdXBlciB2
aWV3RGlkTW92ZVRvV2luZG93XTsKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZSBpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6c2VsZl07Cit9CisKK0BlbmQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYmJlNzI4ZDQzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCkBAIC0w
LDAgKzEsODA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQg
IldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5oIgorI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJX
ZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiX1dLSW5z
cGVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvcldpbmRvdy5oIgorI2ltcG9y
dCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1wb3J0IDxTZWN1
cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9DZXJ0
aWZpY2F0ZUluZm8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9CYXNlNjQuaD4KKworc3RhdGljIGNvbnN0IE5TVUludGVnZXIgd2luZG93U3R5bGVN
YXNrID0gTlNXaW5kb3dTdHlsZU1hc2tUaXRsZWQgfCBOU1dpbmRvd1N0eWxlTWFza0Nsb3NhYmxl
IHwgTlNXaW5kb3dTdHlsZU1hc2tNaW5pYXR1cml6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrUmVz
aXphYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tGdWxsU2l6ZUNvbnRlbnRWaWV3OworCisvLyBUaGUg
dGltZSB3ZSBrZWVwIG91ciBXZWJWaWV3IGFsaXZlIGJlZm9yZSBjbG9zaW5nIGl0IGFuZCBpdHMg
cHJvY2Vzcy4KKy8vIFJldXNpbmcgdGhlIFdlYlZpZXcgaW1wcm92ZXMgc3RhcnQgdXAgdGltZSBm
b3IgcGVvcGxlIHRoYXQganVtcCBpbiBhbmQgb3V0IG9mIHRoZSBJbnNwZWN0b3IuCitzdGF0aWMg
Y29uc3QgU2Vjb25kcyB3ZWJWaWV3Q2xvc2VUaW1lb3V0IHsgMV9taW4gfTsKKworc3RhdGljIHZv
aWQqIGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0ID0gJmtXaW5kb3dDb250ZW50
TGF5b3V0T2JzZXJ2ZXJDb250ZXh0OworCitAaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yUHJveHlP
YmpDQWRhcHRlciAoKSA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckRlbGVnYXRlPgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eToo
V2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7CistICh2b2lkKWludmFs
aWRhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpD
QWRhcHRlciB7CisgICAgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5
OworfQorCistIChXS0luc3BlY3RvclJlZilpbnNwZWN0b3JSZWYKK3sKKyAgICByZXR1cm4gdG9B
UEkoX2luc3BlY3RvclByb3h5KTsKK30KKworLSAoX1dLSW5zcGVjdG9yICopaW5zcGVjdG9yCit7
CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoKl9pbnNw
ZWN0b3JQcm94eSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3Rv
clByb3h5Cit7CisgICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JQcm94eSwgaW5zcGVjdG9yUHJveHkp
OworCisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICAvLyBVbnJldGFpbmVkIHRvIGF2b2lkIGEgcmVmZXJlbmNlIGN5Y2xlLgorICAgIF9p
bnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIF9pbnNwZWN0b3JQcm94eSA9IG51bGxwdHI7Cit9
CisKKy0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0
OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBpZiAoX2lu
c3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJv
eHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndp
ZHRoKCksIDApOworICAgIHJldHVybiByZWN0OworfQorCistICh2b2lkKXdpbmRvd0RpZE1vdmU6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOworfQor
CistICh2b2lkKXdpbmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
K3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPndp
bmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisg
ICAgICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRF
bnRlckZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2Ny
ZWVuRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxTY3JlZW46KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkK
KyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Cit9
CisKKy0gKHZvaWQpaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgoreworICAgIC8vIFJlc2l6aW5nIHRoZSB2aWV3cyB3aGlsZSBpbnNpZGUg
dGhpcyBub3RpZmljYXRpb24gY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgd2hlbiBlbnRlcmluZwor
ICAgIC8vIG9yIGV4aXRpbmcgZnVsbCBzY3JlZW4uIFRvIGF2b2lkIHRoYXQgd2UgbmVlZCB0byBw
ZXJmb3JtIHRoZSB3b3JrIGFmdGVyIGEgZGVsYXkuIFdlIG9ubHkKKyAgICAvLyBkZXBlbmQgb24g
dGhpcyBmb3IgZW5mb3JjaW5nIHRoZSBoZWlnaHQgY29uc3RyYWludHMsIHNvIGEgc21hbGwgZGVs
YXkgaXNuJ3QgdGVycmlibGUuIE1vc3QKKyAgICAvLyBvZiB0aGUgdGltZSB0aGUgdmlld3Mgd2ls
bCBhbHJlYWR5IGhhdmUgdGhlIGNvcnJlY3QgZnJhbWVzIGJlY2F1c2Ugb2YgYXV0b3Jlc2l6aW5n
IG1hc2tzLgorCisgICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAg
ICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwor
ICAgIH0pOworfQorCistICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICop
a2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5PE5TS2V5VmFs
dWVDaGFuZ2VLZXksIGlkPiAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dAoreworICAg
IGlmIChjb250ZXh0ICE9IGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0KSB7Cisg
ICAgICAgIFtzdXBlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggb2ZPYmplY3Q6b2Jq
ZWN0IGNoYW5nZTpjaGFuZ2UgY29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBvYmplY3Q7CisgICAgQVNTRVJUKFt3aW5kb3cg
aXNLaW5kT2ZDbGFzczpbTlNXaW5kb3cgY2xhc3NdXSk7CisgICAgaWYgKHdpbmRvdy5pbkxpdmVS
ZXNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJ
TUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoX2luc3Bl
Y3RvclByb3h5KQorICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJh
bWVEaWRDaGFuZ2UoKTsKKyAgICB9KTsKK30KKworLy8gTUFSSzogV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckRlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5z
cGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKK30KKworLSAoQk9PTClpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX2luc3BlY3RvclByb3h5
ID8gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpIDogZmFsc2U7Cit9CisKKy0gKHZvaWQp
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRv
dworeworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+
YXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJW
aWV3LndpbmRvdyk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3Zl
VG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJv
bGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94
eS0+YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJW
aWV3LndpbmRvdyk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudFZpZXdE
aWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpCit7CisgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFw
dGVyLmdldCgpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om9s
ZFZpZXddOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmll
d0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBv
YmplY3Q6bmV3Vmlld107CisKKyAgICBpZiAobV9pc0F0dGFjaGVkKQorICAgICAgICBhdHRhY2go
bV9hdHRhY2htZW50U2lkZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1l
bnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdykKK3sKKyAgICBpZiAobV9p
c09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0KSB7CisgICAgICAgIG1faXNPYnNlcnZpbmdDb250
ZW50TGF5b3V0UmVjdCA9IGZhbHNlOworICAgICAgICBbb2xkV2luZG93IHJlbW92ZU9ic2VydmVy
Om1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBjb250
ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cg
Km5ld1dpbmRvdykKK3sKKyAgICBpZiAobV9pc0F0dGFjaGVkICYmICEhbmV3V2luZG93KSB7Cisg
ICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IHRydWU7CisgICAgICAgIFtu
ZXdXaW5kb3cgYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29u
dGVudExheW91dFJlY3QiIG9wdGlvbnM6MCBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2Jz
ZXJ2ZXJDb250ZXh0XTsKKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Cisg
ICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dU
aXRsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgcmV0
dXJuOworCisgICAgdW5zaWduZWQgbGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWwoKTsKKyAgICBpZiAo
bGV2ZWwgPiAxKSB7CisgICAgICAgIE5TU3RyaW5nICpkZWJ1Z1RpdGxlID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciBbJWRdIOKAlCAlQCIs
ICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSB3aGVuIGluc3BlY3RpbmcgV2ViIEluc3BlY3Rv
ciIpLCBsZXZlbCwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOworICAgICAgICBbbV9pbnNwZWN0
b3JXaW5kb3cgc2V0VGl0bGU6ZGVidWdUaXRsZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNT
dHJpbmcgKnRpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygi
V2ViIEluc3BlY3RvciDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5T
U3RyaW5nICopbV91cmxTdHJpbmddOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0
bGU6dGl0bGVdOworICAgIH0KK30KKworUmV0YWluUHRyPE5TV2luZG93PiBXZWJJbnNwZWN0b3JQ
cm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3Bl
Y3Rpb25UYXJnZXRUeXBlIHRhcmdldFR5cGUpCit7CisgICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0g
IU5TSXNFbXB0eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkgPyBzYXZlZFdpbmRvd0ZyYW1lIDogTlNN
YWtlUmVjdCgwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQpOwor
ICAgIGF1dG8gd2luZG93ID0gYWRvcHROUyhbW19XS0luc3BlY3RvcldpbmRvdyBhbGxvY10gaW5p
dFdpdGhDb250ZW50UmVjdDp3aW5kb3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5bGVNYXNrIGJh
Y2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT10pOworICAgIFt3aW5kb3cgc2V0
TWluU2l6ZTpOU01ha2VTaXplKG1pbmltdW1XaW5kb3dXaWR0aCwgbWluaW11bVdpbmRvd0hlaWdo
dCldOworICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICBbd2luZG93
IHNldENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNX
aW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuUHJpbWFyeSldOworCisgICAgYm9vbCBm
b3JSZW1vdGVUYXJnZXQgPSB0YXJnZXRUeXBlID09IEluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1v
dGU7CisgICAgW3dpbmRvdyBzZXRGb3JSZW1vdGVUYXJnZXQ6Zm9yUmVtb3RlVGFyZ2V0XTsKKwor
ICAgIENHRmxvYXQgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplID0gKFt3aW5kb3cgc2NyZWVu
XS5mcmFtZS5zaXplLndpZHRoIC8gMikgLSA0OworICAgIENHRmxvYXQgbWluaW11bUZ1bGxTY3Jl
ZW5XaWR0aCA9IHN0ZDo6bWF4PENHRmxvYXQ+KDYzNiwgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5T
aXplKTsKKyAgICBbd2luZG93IHNldE1pbkZ1bGxTY3JlZW5Db250ZW50U2l6ZTpOU01ha2VTaXpl
KG1pbmltdW1GdWxsU2NyZWVuV2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKKyAgICBbd2lu
ZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwg
TlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuQWxsb3dzVGlsaW5nKV07CisKKyAg
ICBbd2luZG93IHNldFRpdGxlYmFyQXBwZWFyc1RyYW5zcGFyZW50OllFU107CisKKyAgICAvLyBD
ZW50ZXIgdGhlIHdpbmRvdyBpZiB0aGUgc2F2ZWQgZnJhbWUgd2FzIGVtcHR5LgorICAgIGlmIChO
U0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpKQorICAgICAgICBbd2luZG93IGNlbnRlcl07
CisKKyAgICByZXR1cm4gd2luZG93OworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKGluc3BlY3Rl
ZFBhZ2UoKSk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9jbG9zZUZy
b250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgaWYgKG1faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fb2JqQ0FkYXB0ZXIpOworICAgICAg
ICByZXR1cm4gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgp
OworICAgIH0KKworICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tXZWJJbnNwZWN0b3JQ
cm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsK
KyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0
dGFjaG1lbnRWaWV3KCk7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBhZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNw
ZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZp
Y2F0aW9uIG9iamVjdDppbnNwZWN0ZWRWaWV3XTsKKworICAgIG1faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhJbnNwZWN0ZWRQYWdlOmluc3BlY3RlZFBhZ2UoKV0pOworICAgIFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAg
V2ViUGFnZVByb3h5ICppbnNwZWN0b3JQYWdlID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2ViVmlld10tPl9wYWdlLmdldCgpOworICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsKKworICAg
IHJldHVybiBpbnNwZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2lu
ZG93KTsKKworICAgIE5TU3RyaW5nICpzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nID0gaW5zcGVjdGVk
UGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmluc3BlY3RvcldpbmRvd0ZyYW1lKCk7
CisgICAgTlNSZWN0IHNhdmVkV2luZG93RnJhbWUgPSBOU1JlY3RGcm9tU3RyaW5nKHNhdmVkV2lu
ZG93RnJhbWVTdHJpbmcpOworCisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBXZWJJbnNwZWN0b3JQ
cm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRh
cmdldFR5cGU6OkxvY2FsKTsKKyAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bV9v
YmpDQWRhcHRlci5nZXQoKV07CisKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKyAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3
ID0gW21faW5zcGVjdG9yV2luZG93IGNvbnRlbnRWaWV3XTsKKyAgICBpbnNwZWN0b3JWaWV3LmZy
YW1lID0gW2NvbnRlbnRWaWV3IGJvdW5kc107CisgICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6
aW5zcGVjdG9yVmlld107CisKKyAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNT
RVJUKCFtX2lzQXR0YWNoZWQgfHwgIW1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIFttX2luc3BlY3RvclZpZXdDb250cm9s
bGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIG1faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgPSBuaWw7CisgICAgfQorCisgICAgaWYgKG1fb2JqQ0FkYXB0ZXIpIHsKKyAgICAgICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29i
akNBZGFwdGVyLmdldCgpXTsKKworICAgICAgICBbbV9vYmpDQWRhcHRlciBpbnZhbGlkYXRlXTsK
KyAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCkKK3sKKyAg
ICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JX
aW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Cisg
ICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAgICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gbmlsOworICAgIH0KKworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRp
bWVyLnN0YXJ0T25lU2hvdCh3ZWJWaWV3Q2xvc2VUaW1lb3V0KTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBtX2Nsb3NlRnJv
bnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFn
ZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQor
eworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAg
IGNsb3NlRnJvbnRlbmRQYWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSGlkZSgpCit7CisgICAgaWYgKG1faXNBdHRhY2hlZCkgeworICAgICAgICBwbGF0Zm9ybURl
dGFjaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faW5zcGVjdG9yV2lu
ZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAg
ICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAgICBtX2luc3BlY3RvcldpbmRv
dyA9IG5pbDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVz
ZXRTdGF0ZSgpCit7CisgICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNl
cygpLmRlbGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICAvLyBJZiB0aGUgV2ViIEluc3Bl
Y3RvciBpcyBubyBsb25nZXIgaW4gdGhlIHNhbWUgd2luZG93IGFzIHRoZSBpbnNwZWN0ZWQgdmll
dywKKyAgICAvLyB0aGVuIHdlIG5lZWQgdG8gcmVvcGVuIHRoZSBJbnNwZWN0b3IgdG8gZ2V0IGl0
IGF0dGFjaGVkIHRvIHRoZSByaWdodCB3aW5kb3cuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdo
ZW4gZHJhZ2dpbmcgdGFicyB0byBhbm90aGVyIHdpbmRvdyBpbiBTYWZhcmkuCisgICAgaWYgKG1f
aXNBdHRhY2hlZCAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cg
IT0gaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpKSB7CisgICAgICAgIG9wZW4oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8x
MDkzNzY4OD46IHRoaXMgd2lsbCBub3QgYnJpbmcgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmkg
dG8gdGhlIGZyb250LCBvbmx5IGl0cyB3aW5kb3cuCisgICAgW1ttX2luc3BlY3RvclZpZXdDb250
cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOworICAgIFtb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUZpcnN0UmVzcG9u
ZGVyOlttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddXTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAg
ICBbaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpIG1ha2VLZXlBbmRPcmRlckZyb250
Om5pbF07Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7
CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCBy
ZXR1cm4gZmFsc2UgZm9yIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpLCBvbmx5IGEgYmFja2dy
b3VuZCB3aW5kb3cuCisgICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddLndpbmRvdy5pc01haW5XaW5kb3c7Cit9CisKK2Jvb2wgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkK
K3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3Rv
ckF0dGFjaG1lbnRWaWV3KCk7CisgICAgaWYgKFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHZp
ZXdJc0luc3BlY3RvcldlYlZpZXc6aW5zcGVjdGVkVmlld10pCisgICAgICAgIHJldHVybiB3ZWJQ
cm9jZXNzQ2FuQXR0YWNoOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hl
ZEhlaWdodCA9IDI1MDsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVp
Z2h0UmF0aW8gPSAwLjc1OworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRX
aWR0aCA9IDUwMDsKKworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRW
aWV3LmZyYW1lOworCisgICAgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gTlNIZWlnaHQo
aW5zcGVjdGVkVmlld0ZyYW1lKSAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOworICAgIHJl
dHVybiBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gbWF4aW11bUF0dGFjaGVkSGVpZ2h0ICYmIG1p
bmltdW1BdHRhY2hlZFdpZHRoIDw9IE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIERvIG5vdGhpbmcuCit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVy
bFN0cmluZykKK3sKKyAgICBtX3VybFN0cmluZyA9IHVybFN0cmluZzsKKworICAgIHVwZGF0ZUlu
c3BlY3RvcldpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQoreworICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7CisKKyAgICBSZXRh
aW5QdHI8U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NG
Q2VydGlmaWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOworCisgICAgTlNXaW5kb3cgKndpbmRvdzsK
KyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHdpbmRvdyA9IG1faW5zcGVjdG9y
V2luZG93LmdldCgpOworICAgIGVsc2UKKyAgICAgICAgd2luZG93ID0gW1ttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddIHdpbmRvd107CisKKyAgICBpZiAoIXdpbmRvdykKKyAgICAg
ICAgd2luZG93ID0gW05TQXBwIGtleVdpbmRvd107CisKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJ
QUxJWkFUSU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2lu
ZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVs
bHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKKyNlbHNl
CisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxE
ZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRp
ZmljYXRlczooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hv
d0dyb3VwOllFU107CisjZW5kaWYKKworICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIg
dGhlIHRydXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNh
dGVWaWV3IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KKyAgICBTRkNlcnRpZmljYXRlVmlldyAq
Y2VydGlmaWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKKyAg
ICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOworICAgIFtjZXJ0aWZpY2F0
ZVZpZXcgc2V0RWRpdGFibGVUcnVzdDpOT107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNw
bGF5RGV0YWlsczpZRVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3Nl
ZDpZRVNdOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVS
TC5pc0VtcHR5KCkpOworICAgIAorICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1fc3VnZ2VzdGVk
VG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7CisgICAgaWYgKCFwbGF0Zm9y
bVVSTCkgeworICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN1Z2dl
c3RlZFVSTF07CisgICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcgZmlsZW5hbWVz
IGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgorICAgICAgICBmb3JjZVNhdmVEaWFsb2cgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhdGZvcm1VUkwpOworICAgIGlmICghcGxh
dGZvcm1VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGJs
b2NrIGJlbG93LgorICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2VzdGVkVVJMOwor
ICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7CisKKyAgICBhdXRvIHNhdmVUb1VSTCA9
IF4oTlNVUkwgKmFjdHVhbFVSTCkgeworICAgICAgICBBU1NFUlQoYWN0dWFsVVJMKTsKKworICAg
ICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1
YWxVUkwpOworCisgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHks
IG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0Rh
dGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOwor
ICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6
WUVTXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VS
TDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rpbmcg
ZXJyb3I6TlVMTF07CisKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmlu
Z10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICB9OworCisgICAgaWYgKCFm
b3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJMKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQYW5l
bCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZvcm1V
UkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwgd2Un
dmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAorICAgIC8vIGNhbiBwcm92
aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3RlbSdz
CisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0b3J5IHRvIHNo
b3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJMKQorICAgICAg
ICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQYXRo
Q29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdlciBy
ZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNNb2RhbFJlc3Bv
bnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsKKyAgICB9OworCisgICAgTlNX
aW5kb3cgKndpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93ID8gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0
KCkgOiBbTlNBcHAga2V5V2luZG93XTsKKyAgICBpZiAod2luZG93KQorICAgICAgICBbcGFuZWwg
YmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0
aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwg
cnVuTW9kYWxdKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQo
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sKKyAg
ICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIFJldGFpblB0cjxO
U1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVk
VVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBj
b25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisgICAgaWYgKCFhY3R1YWxVUkwpCisg
ICAgICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRs
ZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsK
KyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAgW2hhbmRsZSB3cml0ZURhdGE6W2Nv
bnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKKyAgICBbaGFu
ZGxlIGNsb3NlRmlsZV07CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJp
bmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNBdHRh
Y2hlZCk7CisgICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JX
aW5kb3cpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5z
cGVjdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1N0cmluZyAqZnJhbWVTdHJp
bmcgPSBOU1N0cmluZ0Zyb21SZWN0KFttX2luc3BlY3RvcldpbmRvdyBmcmFtZV0pOworICAgIGlu
c3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JXaW5k
b3dGcmFtZShmcmFtZVN0cmluZyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRv
d0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKKyAg
ICBBU1NFUlQobV9pc1Zpc2libGUpOworICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7CisK
KyAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JXaW5k
b3cpCisgICAgICAgIHJldHVybjsKKworICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQocGxh
dGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsgICAgCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6Omluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0IGN1cnJlbnREaW1lbnNp
b24pCit7CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF0dGFjaCBhdmFpbGFi
aWxpdHkgY2hhbmdlZC4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gY2FzZQorICAgICAgICAv
LyB0aGUgYXR0YWNobWVudCB2aWV3IGlzIG5vdCB0aGUgV0tWaWV3LgorICAgICAgICBhdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5p
bnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9
IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgTlNSZWN0IGluc3Bl
Y3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7CisgICAgTlNSZWN0IG9sZEluc3Bl
Y3RvclZpZXdGcmFtZSA9IGluc3BlY3RvclZpZXcuZnJhbWU7CisgICAgTlNSZWN0IG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSA9IE5TWmVyb1JlY3Q7CisgICAgTlNSZWN0IHBhcmVudEJvdW5kcyA9IGlu
c3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kczsKKyAgICBDR0Zsb2F0IGluc3BlY3RlZFZpZXdU
b3AgPSBOU01heFkoaW5zcGVjdGVkVmlld0ZyYW1lKTsKKworICAgIHN3aXRjaCAobV9hdHRhY2ht
ZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogeworICAgICAgICBp
ZiAoIWN1cnJlbnREaW1lbnNpb24pCisgICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNI
ZWlnaHQob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudEhl
aWdodCA9IE5TSGVpZ2h0KHBhcmVudEJvdW5kcyk7CisgICAgICAgIENHRmxvYXQgaW5zcGVjdG9y
SGVpZ2h0ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hl
ZFdpbmRvd0hlaWdodChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRIZWlnaHQpOworCisgICAgICAg
IC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJh
bm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9
IE5TTWFrZVJlY3QoMCwgaW5zcGVjdG9ySGVpZ2h0LCBOU1dpZHRoKHBhcmVudEJvdW5kcyksIGlu
c3BlY3RlZFZpZXdUb3AgLSBpbnNwZWN0b3JIZWlnaHQpOworICAgICAgICBuZXdJbnNwZWN0b3JW
aWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKSwg
aW5zcGVjdG9ySGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6UmlnaHQ6IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAg
ICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1l
KTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMp
OworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24s
IHBhcmVudFdpZHRoKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9m
IHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQg
ZG9uJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9y
IHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3Bl
Y3RlZCB2aWV3LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAs
IHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOworICAgICAg
ICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KHBhcmVudFdpZHRoIC0gaW5zcGVj
dG9yV2lkdGgsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKKwor
ICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2lu
ZG93KSB7CisgICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVk
Vmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRS
ZWN0IGZyb21WaWV3Om5pbF07CisgICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBO
U0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVj
dCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBdHRhY2ht
ZW50U2lkZTo6TGVmdDogeworICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCisgICAgICAg
ICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOwor
CisgICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7Cisg
ICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwgcGFy
ZW50V2lkdGgpOworCisgICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhl
IGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBkb24n
dCB1c2UgdGhhdAorICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3Igdmll
dyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVjdGVk
IHZpZXcuCisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoaW5zcGVjdG9y
V2lkdGgsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3Ap
OworICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIGluc3Bl
Y3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKKworICAgICAgICBpZiAoTlNXaW5k
b3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7CisgICAgICAgICAg
ICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgY29u
dmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3Om5pbF07
CisgICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlvblJlY3Qo
bmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGlmIChOU0VxdWFsUmVjdHMob2xkSW5z
cGVjdG9yVmlld0ZyYW1lLCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUpICYmIE5TRXF1YWxSZWN0cyhb
aW5zcGVjdGVkVmlldyBmcmFtZV0sIGluc3BlY3RlZFZpZXdGcmFtZSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgdG8gbWFrZSBzdXJlIHRoZSBsYXll
cnMgZm9yIGJvdGggdmlld3MgcmVzaXplIGluIHN5bmMuCisgICAgW2luc3BlY3RvclZpZXcud2lu
ZG93IGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07CisKKyAgICBbaW5zcGVjdG9yVmll
dyBzZXRGcmFtZTpuZXdJbnNwZWN0b3JWaWV3RnJhbWVdOworICAgIFtpbnNwZWN0ZWRWaWV3IHNl
dEZyYW1lOmluc3BlY3RlZFZpZXdGcmFtZV07Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgTlNWaWV3ICppbnNw
ZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwor
ICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUuaGVp
Z2h0KTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVk
V2luZG93V2lkdGgoKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBh
Z2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmll
d1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLndpZHRoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmll
dyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dl
YlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3
XTsKKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9pbnNwZWN0b3JX
aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3Nl
XTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgW2luc3Bl
Y3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBDR0Zsb2F0IGN1cnJlbnREaW1l
bnNpb247CisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2FzZSBBdHRhY2ht
ZW50U2lkZTo6Qm90dG9tOgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdN
YXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld01heFlNYXJnaW5dOworICAgICAgICBjdXJy
ZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Umln
aHQ6CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVp
Z2h0U2l6YWJsZSB8IE5TVmlld01pblhNYXJnaW5dOworICAgICAgICBjdXJyZW50RGltZW5zaW9u
ID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBb
aW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBO
U1ZpZXdNYXhYTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGN1cnJlbnREaW1lbnNp
b24pOworCisgICAgW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9y
VmlldyBwb3NpdGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzppbnNwZWN0ZWRWaWV3XTsK
KyAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOmluc3BlY3RvclZp
ZXddOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7Cisg
ICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRh
Y2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CisKKyAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5T
Vmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOworCisgICAgLy8gTWFrZSBz
dXJlIHRoYXQgd2Ugc2l6ZSB0aGUgaW5zcGVjdGVkIHZpZXcncyBmcmFtZSBhZnRlciBkZXRhY2hp
bmcgc28gdGhhdCBpdCB0YWtlcyB1cCB0aGUgc3BhY2UgdGhhdCB0aGUKKyAgICAvLyBhdHRhY2hl
ZCBpbnNwZWN0b3IgdXNlZCB0by4gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5z
cGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KKworICAgIGluc3Bl
Y3RlZFZpZXcuZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlldy5z
dXBlcnZpZXcuYm91bmRzKSwgTlNNYXhZKGluc3BlY3RlZFZpZXcuZnJhbWUpKTsKKworICAgIC8v
IFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3Bl
Y3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCisgICAgLy8gYW5kIHdlIHNob3VsZCBub3Qg
Y3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgorICAgIGlmICghbV9pc1Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG9wZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQp
Cit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3Bl
Y3RlZFZpZXdGcmFtZURpZENoYW5nZShoZWlnaHQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7Cisg
ICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3RlZFZp
ZXdGcmFtZURpZENoYW5nZSh3aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3NoZWV0
UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCkKK3sKKyAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+
X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKKyAgICBp
ZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTlNTdHJpbmcgKnBh
dGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIk1haW4iIG9mVHlwZTpAImh0bWwiXTsKKyAg
ICBBU1NFUlQocGF0aCAmJiBwYXRoLmxlbmd0aCk7CisgICAgaWYgKCFwYXRoKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRo
IGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKK30KKworU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9
IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JV
SSJdOworICAgIGlmICghYnVuZGxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAv
LyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QuaHRtbCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KKyAg
ICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiVGVzdCIgb2ZUeXBl
OkAiaHRtbCJdOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJz
b2x1dGVTdHJpbmc7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFz
ZVVSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRl
bnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOworICAgIGlmICghYnVuZGxlKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBOU1N0cmluZyAqcGF0aCA9IGJ1bmRsZS5y
ZXNvdXJjZVBhdGg7CisgICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOworCisgICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpZRVNdLmFic29sdXRl
U3RyaW5nOworfQorCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uUGxpc3QoKQor
eworICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JEaXJl
Y3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywg
WUVTKSBvYmplY3RBdEluZGV4OjBdOworICAgIE5TU3RyaW5nICpzeXN0ZW1WZXJzaW9uUGxpc3RQ
YXRoID0gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpA
IkNvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Il07CisgICAgTlNEaWN0aW9uYXJ5ICpz
eXN0ZW1WZXJzaW9uSW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDb250ZW50c09m
RmlsZTpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoXTsKKyAgICByZXR1cm4gc3lzdGVtVmVyc2lvbklu
Zm87Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpCit7CisgICAgTlNEaWN0aW9uYXJ5ICpwbGlzdCA9IHN5c3RlbVZlcnNp
b25QbGlzdCgpOworCisgICAgRGVidWdnYWJsZUluZm9EYXRhIHJlc3VsdDsKKyAgICByZXN1bHQu
ZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOworICAg
IHJlc3VsdC50YXJnZXRQbGF0Zm9ybU5hbWUgPSAibWFjT1MiX3M7CisgICAgcmVzdWx0LnRhcmdl
dEJ1aWxkVmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdEJ1aWxkVmVyc2lvbiJdOworICAgIHJlc3Vs
dC50YXJnZXRQcm9kdWN0VmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lv
biJdOworICAgIHJlc3VsdC50YXJnZXRJc1NpbXVsYXRvciA9IGZhbHNlOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiZWU1Y2RmZjM4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKKyNp
bmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1
YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGlu
c3BlY3RvckNsaWVudCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0
SUQsIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCisgICAgICAgIDog
bV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9p
bnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklE
KGNvbm5lY3Rpb25JRCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQorICAgICAgICAs
IG1fZGVidWdnYWJsZVR5cGUoZGVidWdnYWJsZVR5cGUpCisgICAgeworICAgICAgICBtX3Byb3h5
LT5zZXRDbGllbnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3RvclByb3h5KCkK
KyAgICB7CisgICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9w
cm94eS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisgICAgeworICAg
ICAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQg
aW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgorICAgICAgICBS
ZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8gPSBBUEk6OkRlYnVnZ2FibGVJ
bmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKTsKKyAgICAgICAgZGVidWdn
YWJsZUluZm8tPnNldERlYnVnZ2FibGVUeXBlKG1fZGVidWdnYWJsZVR5cGUpOworICAgICAgICBt
X3Byb3h5LT5sb2FkKFdURk1vdmUoZGVidWdnYWJsZUluZm8pLCBtX2luc3BlY3RvckNsaWVudC5i
YWNrZW5kQ29tbWFuZHNVUkwoKSk7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX2luc3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25J
RCwgbV90YXJnZXRJRCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9u
dGVuZCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZy
b21Gcm9udGVuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OworICAgIENvbm5lY3Rpb25JRCBtX2Nv
bm5lY3Rpb25JRDsKKyAgICBUYXJnZXRJRCBtX3RhcmdldElEOworICAgIEluc3BlY3Rvcjo6RGVi
dWdnYWJsZVR5cGUgbV9kZWJ1Z2dhYmxlVHlwZTsKK307CisKK1JlbW90ZUluc3BlY3RvckNsaWVu
dDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCB1cmwsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVy
JiBvYnNlcnZlcikKKyAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCit7CisgICAgaWYgKCF1cmwu
aG9zdCgpIHx8ICF1cmwucG9ydCgpKSB7CisgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBpbnNw
ZWN0b3IgdXJsOiAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIG1fY29ubmVjdGlvbklEID0gY29ubmVjdEluZXQodXJsLmhvc3Qo
KS51dGY4KCkuZGF0YSgpLCB1cmwucG9ydCgpLnZhbHVlKCkpOworICAgIGlmICghbV9jb25uZWN0
aW9uSUQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnNwZWN0b3IgY2xpZW50IGNvdWxkIG5vdCBj
b25uZWN0IHRvICVzIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOworfQorCitSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQoreworfQorCit2b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0cmlu
ZyYgZXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9j
b25uZWN0aW9uSUQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBtZXNzYWdlID0gZXZlbnQudXRmOCgp
OworICAgIHNlbmQobV9jb25uZWN0aW9uSUQudmFsdWUoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsKK30KKworSGFz
aE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6
Q2FsbEhhbmRsZXI+JiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpc3BhdGNoTWFwKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPj4gZGlz
cGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+KHsKKyAgICAgICAgeyAiQmFj
a2VuZENvbW1hbmRzIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKSB9LAorICAgICAgICB7ICJTZXRUYXJnZXRMaXN0
Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0
VGFyZ2V0TGlzdCkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIl9zLCBzdGF0
aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKSB9LAorICAgIH0pOworCisgICAgcmV0dXJuIGRpc3BhdGNoTWFwOworfQorCit2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpCit7
CisgICAgYXV0byBldmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXZlbnQtPnNl
dFN0cmluZygiZXZlbnQiX3MsICJTZXR1cEluc3BlY3RvckNsaWVudCJfcyk7CisgICAgc2VuZFdl
Ykluc3BlY3RvckV2ZW50KGV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uQ2xvc2VkKCkKK3sKKyAgICBtX3RhcmdldHMuY2xl
YXIoKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLmNsZWFyKCk7CisgICAgbV9vYnNlcnZlci5j
b25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2Vk
KCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpZENsb3NlKENvbm5l
Y3Rpb25JRCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIGNvbm5l
Y3Rpb25DbG9zZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3QoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIElu
c3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCit7CisgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0
aW9uSUQsIHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2Fi
bGVUeXBlXSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclByb3h5
PigqdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUpOworICAgIH0p
OworCisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIHNldHVwRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHNldHVwRXZlbnQt
PnNldFN0cmluZygiZXZlbnQiX3MsICJTZXR1cCJfcyk7CisgICAgc2V0dXBFdmVudC0+c2V0SW50
ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAgIHNldHVwRXZlbnQtPnNl
dEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2
ZW50KHNldHVwRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUtPmxvYWQoKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdl
dElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgYXV0byBiYWNrZW5kRXZlbnQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJldmVu
dCJfcywgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zKTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldElu
dGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBiYWNrZW5kRXZlbnQt
PnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgYmFja2VuZEV2ZW50LT5z
ZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVu
dChiYWNrZW5kRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRh
cmdldElEIHRhcmdldElEKQoreworICAgIGF1dG8gY2xvc2VkRXZlbnQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGNsb3NlZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiRnJvbnRl
bmREaWRDbG9zZSJfcyk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25J
RCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0
SUQiX3MsIHRhcmdldElEKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY2xvc2VkRXZlbnQt
PnRvSlNPTlN0cmluZygpKTsKKworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6
bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBFdmVudCYgZXZlbnQpCit7Cisg
ICAgaWYgKCFldmVudC5tZXNzYWdlIHx8IGV2ZW50Lm1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRh
OnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlKGV2ZW50Lm1lc3NhZ2UtPnV0
ZjgoKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdChj
b25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2
ZW50Lm1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
bWVzc2FnZVZhbHVlOworICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihldmVudC5tZXNz
YWdlLnZhbHVlKCksIG1lc3NhZ2VWYWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxKU09OOjpBcnJheT4gbWVzc2FnZUFycmF5OworICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc0Fy
cmF5KG1lc3NhZ2VBcnJheSkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxUYXJnZXQ+
IHRhcmdldExpc3Q7CisgICAgZm9yIChhdXRvJiBpdGVtVmFsdWUgOiAqbWVzc2FnZUFycmF5KSB7
CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmplY3Q7CisgICAgICAgIGlmICgh
aXRlbVZhbHVlLT5hc09iamVjdChpdGVtT2JqZWN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFRhcmdldCB0YXJnZXQ7CisgICAgICAgIGlmICghaXRlbU9iamVjdC0+Z2V0SW50
ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldC5pZCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0
LT5nZXRTdHJpbmcoIm5hbWUiX3MsIHRhcmdldC5uYW1lKQorICAgICAgICAgICAgfHwgIWl0ZW1P
YmplY3QtPmdldFN0cmluZygidXJsIl9zLCB0YXJnZXQudXJsKQorICAgICAgICAgICAgfHwgIWl0
ZW1PYmplY3QtPmdldFN0cmluZygidHlwZSJfcywgdGFyZ2V0LnR5cGUpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgdGFyZ2V0TGlzdC5hcHBlbmQoV1RGTW92ZSh0YXJnZXQpKTsK
KyAgICB9CisKKyAgICBhdXRvIGNvbm5lY3Rpb25JRCA9IGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1
ZSgpOworCisgICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0cyB0byByZW1vdmUgdGhlbS4KKyAgICBW
ZWN0b3I8VGFyZ2V0SUQsIDQ+IHRhcmdldHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIHBhaXIg
OiBtX2luc3BlY3RvclByb3h5TWFwLmtleXMoKSkgeworICAgICAgICBpZiAocGFpci5maXJzdCAh
PSBjb25uZWN0aW9uSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogdGFyZ2V0TGlzdCkgewor
ICAgICAgICAgICAgaWYgKHRhcmdldC5pZCA9PSBwYWlyLnNlY29uZCkgeworICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICB0YXJnZXRzVG9S
ZW1vdmUuYXBwZW5kKHBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB0YXJnZXRJ
RCA6IHRhcmdldHNUb1JlbW92ZSkKKyAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworCisgICAgbV90YXJnZXRz
LnNldChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOworICAgIG1fb2JzZXJ2ZXIu
dGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAo
IWV2ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQudGFyZ2V0SUQgfHwgIWV2ZW50Lm1lc3NhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJveHkgPSBtX2luc3BlY3RvclByb3h5TWFw
LmdldChzdGQ6Om1ha2VfcGFpcihldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKSwgZXZlbnQudGFy
Z2V0SUQudmFsdWUoKSkpOworICAgIGlmICghcHJveHkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcm94eS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOWY1MWQ2M2RlYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oCkBAIC0wLDAgKzEsOTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRyb2xsYWJsZVRh
cmdldC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvckNvbm5lY3Rp
b25DbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgUmVt
b3RlSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50
JikgPSAwOworfTsKKwordXNpbmcgQ29ubmVjdGlvbklEID0gSW5zcGVjdG9yOjpDb25uZWN0aW9u
SUQ7Cit1c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rvcjo6VGFyZ2V0SUQ7CisKK2NsYXNzIFJlbW90
ZUluc3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJs
aWM6CisgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2
ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7CisKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHVwZGF0ZSB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHRvIHVzZSBEZWJ1Z2dhYmxlVHlw
ZSBpbnN0ZWFkIG9mIFN0cmluZyBmb3IgdGhlIHRhcmdldCB0eXBlLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNDcKKyAgICBzdHJ1Y3QgVGFyZ2V0
IHsKKyAgICAgICAgVGFyZ2V0SUQgaWQ7CisgICAgICAgIFN0cmluZyB0eXBlOworICAgICAgICBT
dHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICB9OworCisgICAgY29uc3QgSGFz
aE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0czsgfQorICAgIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KKworICAgIHZvaWQgaW5zcGVj
dChDb25uZWN0aW9uSUQsIFRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlKTsKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklELCBUYXJn
ZXRJRCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlbW90
ZUluc3BlY3RvckNsaWVudD47CisKKyAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24o
KTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKKworICAgIHZvaWQgc2V0VGFyZ2V0TGlz
dChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2
ZW50Jik7CisgICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmKTsKKworICAg
IHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBmaW5hbDsKKyAgICBIYXNoTWFwPFN0cmluZywg
Q2FsbEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIGZpbmFsOworCisgICAgdm9pZCBzZW5kV2ViSW5z
cGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFu
ZHNVUkw7CisgICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7CisgICAgT3B0
aW9uYWw8Q29ubmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKKyAgICBIYXNoTWFwPENvbm5lY3Rp
b25JRCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxD
b25uZWN0aW9uSUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclBy
b3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1Jl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjdiYzQ1NWQzZTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaCIKKwor
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJTG9hZGVyQ2xpZW50
LmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50
V29ybGQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgorI2luY2x1ZGUgIldl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2NsYXNzIFNjcmlwdE1lc3NhZ2VDbGllbnQgZmluYWwgOiBwdWJsaWMgV2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXI6OkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgU2NyaXB0TWVzc2FnZUNsaWVudChSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXImIGluc3BlY3RvclByb3RvY29sSGFuZGxlcikKKyAgICAgICAgOiBtX2luc3BlY3RvclByb3Rv
Y29sSGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsgfQorCisgICAgflNjcmlwdE1l
c3NhZ2VDbGllbnQoKSB7IH0KKworICAgIHZvaWQgZGlkUG9zdE1lc3NhZ2UoV2ViUGFnZVByb3h5
JiBwYWdlLCBGcmFtZUluZm9EYXRhJiYsIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYg
c2VyaWFsaXplZFNjcmlwdFZhbHVlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byB0b2tl
bnMgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUudG9TdHJpbmcoKS5zcGxpdCgiOiIpOworICAgICAg
ICBpZiAodG9rZW5zLnNpemUoKSAhPSAzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFVSTCByZXF1ZXN0VVJMIHsgeyB9LCBwYWdlLnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OworICAg
ICAgICBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlci5pbnNwZWN0KHJlcXVlc3RVUkwuaG9zdEFu
ZFBvcnQoKSwgdG9rZW5zWzBdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMV0udG9VSW50U3RyaWN0
KCksIHRva2Vuc1syXSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlciYgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI7Cit9OworCitjbGFzcyBM
b2FkZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpMb2FkZXJDbGllbnQgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExvYWRlckNsaWVudChGdW5jdGlvbjx2
b2lkKCk+JiYgbG9hZGVkQ2FsbGJhY2spCisgICAgICAgIDogbV9sb2FkZWRDYWxsYmFjayB7IFdU
Rk1vdmUobG9hZGVkQ2FsbGJhY2spIH0geyB9CisKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JG
cmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIEFQSTo6
TmF2aWdhdGlvbiosIEFQSTo6T2JqZWN0KikgZmluYWwKKyAgICB7CisgICAgICAgIG1fbG9hZGVk
Q2FsbGJhY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2xv
YWRlZENhbGxiYWNrOworfTsKKworc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6RGVidWdnYWJs
ZVR5cGU+IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgZGVidWdn
YWJsZVR5cGVTdHJpbmcpCit7CisgICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJqYXZh
c2NyaXB0Il9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6SmF2
YVNjcmlwdDsKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInBhZ2UiX3MpCisgICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpQYWdlOworICAgIGlmIChkZWJ1
Z2dhYmxlVHlwZVN0cmluZyA9PSAic2VydmljZS13b3JrZXIiX3MpCisgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpTZXJ2aWNlV29ya2VyOworICAgIGlmIChkZWJ1Z2dh
YmxlVHlwZVN0cmluZyA9PSAid2ViLXBhZ2UiX3MpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
Kwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6Omluc3BlY3QoY29uc3QgU3Ry
aW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFy
Z2V0SUQsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIGRlYnVnZ2FibGVUeXBlID0g
cGFyc2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmcodHlwZSk7CisgICAgaWYgKCFkZWJ1Z2dhYmxl
VHlwZSkgeworICAgICAgICBMT0dfRVJST1IoIlVua25vd24gZGVidWdnYWJsZSB0eXBlOiBcIiVz
XCIiLCB0eXBlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1faW5zcGVjdG9yQ2xpZW50KQorICAgICAgICBtX2luc3BlY3RvckNsaWVudC0+aW5zcGVj
dChjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZS52YWx1ZSgpKTsKK30KKwor
dm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnJ1blNjcmlwdChjb25zdCBTdHJp
bmcmIHNjcmlwdCkKK3sKKyAgICBtX3BhZ2UucnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHsgc2Ny
aXB0LCBmYWxzZSwgV1RGOjpudWxsb3B0LCBmYWxzZSB9LCAKKyAgICAgICAgW10oQVBJOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWUqLCBPcHRpb25hbDxXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzPiBl
eGNlcHRpb25EZXRhaWxzLCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgICAgICBpZiAo
ZXhjZXB0aW9uRGV0YWlscykKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBy
dW5uaW5nIHNjcmlwdCBcIiVzXCIiLCBleGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlLnV0ZjgoKS5k
YXRhKCkpOworICAgIH0pOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxl
cjo6dGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBjbGllbnQpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBodG1sOworICAgIGlmIChjbGllbnQudGFyZ2V0cygpLmlzRW1wdHko
KSkKKyAgICAgICAgaHRtbC5hcHBlbmQoIjxwPk5vIHRhcmdldHMgZm91bmQ8L3A+Il9zKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaHRtbC5hcHBlbmQoIjx0YWJsZT4iKTsKKyAgICAgICAgZm9yIChh
dXRvJiBjb25uZWN0aW9uSUQgOiBjbGllbnQudGFyZ2V0cygpLmtleXMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjbGllbnQudGFyZ2V0cygpLmdldChjb25uZWN0aW9uSUQp
KSB7CisgICAgICAgICAgICAgICAgaHRtbC5hcHBlbmQobWFrZVN0cmluZygKKyAgICAgICAgICAg
ICAgICAgICAgIjx0Ym9keT48dHI+IgorICAgICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwi
ZGF0YVwiPjxkaXYgY2xhc3M9XCJ0YXJnZXRuYW1lXCI+IiwgdGFyZ2V0Lm5hbWUsICI8L2Rpdj48
ZGl2IGNsYXNzPVwidGFyZ2V0dXJsXCI+IiwgdGFyZ2V0LnVybCwgIjwvZGl2PjwvdGQ+IgorICAg
ICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwiaW5wdXRcIj48aW5wdXQgdHlwZT1cImJ1dHRv
blwiIHZhbHVlPVwiSW5zcGVjdFwiIG9uY2xpY2s9XCJ3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy5pbnNwZWN0b3IucG9zdE1lc3NhZ2UoXFwnIiwgY29ubmVjdGlvbklELCAiOiIsIHRhcmdl
dC5pZCwgIjoiLCB0YXJnZXQudHlwZSwgIlxcJyk7XCI+PC90ZD4iCisgICAgICAgICAgICAgICAg
ICAgICI8L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGh0bWwuYXBwZW5kKCI8L3RhYmxlPiIpOworICAgIH0KKyAgICBt
X3RhcmdldExpc3RzSHRtbCA9IGh0bWwudG9TdHJpbmcoKTsKKyAgICBpZiAobV9wYWdlTG9hZGVk
KQorICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyOjp1cGRhdGVUYXJnZXRMaXN0KCkKK3sKKyAgICBpZiAoIW1fdGFyZ2V0
TGlzdHNIdG1sLmlzRW1wdHkoKSkgeworICAgICAgICBydW5TY3JpcHQobWFrZVN0cmluZygidXBk
YXRlVGFyZ2V0cyhgIiwgbV90YXJnZXRMaXN0c0h0bWwsICJgKTsiKSk7CisgICAgICAgIG1fdGFy
Z2V0TGlzdHNIdG1sID0geyB9OworICAgIH0KK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXI6OnBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYgcGFnZVByb3h5LCBX
ZWJVUkxTY2hlbWVUYXNrJiB0YXNrKQoreworICAgIGF1dG8mIHJlcXVlc3RVUkwgPSB0YXNrLnJl
cXVlc3QoKS51cmwoKTsKKworICAgIC8vIERlc3Ryb3kgdGhlIGNsaWVudCBiZWZvcmUgY3JlYXRp
bmcgYSBuZXcgY29ubmVjdGlvbiBzbyBpdCBjYW4gY29ubmVjdCB0byB0aGUgc2FtZSBwb3J0Cisg
ICAgbV9pbnNwZWN0b3JDbGllbnQgPSBudWxscHRyOworICAgIG1faW5zcGVjdG9yQ2xpZW50ID0g
bWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+KHJlcXVlc3RVUkwsICp0aGlzKTsKKwor
ICAgIC8vIFNldHVwIHRhcmdldCBwb3N0TWVzc2FnZSBsaXN0ZW5lcgorICAgIGF1dG8gaGFuZGxl
ciA9IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpjcmVhdGUobWFrZVVuaXF1ZTxTY3JpcHRNZXNz
YWdlQ2xpZW50PigqdGhpcyksICJpbnNwZWN0b3IiLCBBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5v
cm1hbFdvcmxkKCkpOworICAgIHBhZ2VQcm94eS5wYWdlR3JvdXAoKS51c2VyQ29udGVudENvbnRy
b2xsZXIoKS5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIoaGFuZGxlci5nZXQoKSk7CisKKyAg
ICAvLyBTZXR1cCBsb2FkZXIgY2xpZW50IHRvIGdldCBub3RpZmllZCBvZiBwYWdlIGxvYWQKKyAg
ICBtX3BhZ2Uuc2V0TG9hZGVyQ2xpZW50KG1ha2VVbmlxdWU8TG9hZGVyQ2xpZW50PihbdGhpc10g
eworICAgICAgICBtX3BhZ2VMb2FkZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVUYXJnZXRMaXN0
KCk7CisgICAgfSkpOworICAgIG1fcGFnZUxvYWRlZCA9IGZhbHNlOworCisgICAgU3RyaW5nQnVp
bGRlciBodG1sQnVpbGRlcjsKKyAgICBodG1sQnVpbGRlci5hcHBlbmQoCisgICAgICAgICI8aHRt
bD48aGVhZD48dGl0bGU+UmVtb3RlIEluc3BlY3RvcjwvdGl0bGU+IgorICAgICAgICAiPG1ldGEg
aHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9
dXRmLThcIiAvPiIKKyAgICAgICAgIjxzdHlsZT4iCisgICAgICAgICIgIGgxIHsgY29sb3I6ICNi
YWJkYjY7IHRleHQtc2hhZG93OiAwIDFweCAwIHdoaXRlOyBtYXJnaW4tYm90dG9tOiAwOyB9Igor
ICAgICAgICAiICBodG1sIHsgZm9udC1mYW1pbHk6IC13ZWJraXQtc3lzdGVtLWZvbnQ7IGZvbnQt
c2l6ZTogMTFwdDsgY29sb3I6ICMyZTM0MzY7IHBhZGRpbmc6IDIwcHggMjBweCAwIDIwcHg7IGJh
Y2tncm91bmQtY29sb3I6ICNmNmY2ZjQ7ICIKKyAgICAgICAgIiAgICAgICAgIGJhY2tncm91bmQt
aW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNv
bG9yLXN0b3AoMCwgI2VlZWVlYyksIGNvbG9yLXN0b3AoMSwgI2Y2ZjZmNCkpOyIKKyAgICAgICAg
IiAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSA1ZW07IGJhY2tncm91bmQtcmVwZWF0OiBu
by1yZXBlYXQ7IH0iCisgICAgICAgICIgIHRhYmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlci1jb2xs
YXBzZTogY29sbGFwc2U7IHRhYmxlLWxheW91dDogZml4ZWQ7IH0iCisgICAgICAgICIgIHRhYmxl
LCB0ZCB7IGJvcmRlcjogMXB4IHNvbGlkICNkM2Q3Y2Y7IGJvcmRlci1sZWZ0OiBub25lOyBib3Jk
ZXItcmlnaHQ6IG5vbmU7IH0iCisgICAgICAgICIgIHAgeyBtYXJnaW4tYm90dG9tOiAzMHB4OyB9
IgorICAgICAgICAiICB0ZCB7IHBhZGRpbmc6IDE1cHg7IH0iCisgICAgICAgICIgIHRkLmRhdGEg
eyB3aWR0aDogMjAwcHg7IH0iCisgICAgICAgICIgIC50YXJnZXRuYW1lIHsgZm9udC13ZWlnaHQ6
IGJvbGQ7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxv
dzogZWxsaXBzaXM7IH0iCisgICAgICAgICIgIC50YXJnZXR1cmwgeyBjb2xvcjogI2JhYmRiNjsg
YmFja2dyb3VuZDogI2VlZTsgd29yZC13cmFwOiBicmVhay13b3JkOyBvdmVyZmxvdy13cmFwOiBi
cmVhay13b3JkOyB9IgorICAgICAgICAiICB0ZC5pbnB1dCB7IHdpZHRoOiA2NHB4OyB9IgorICAg
ICAgICAiICBpbnB1dCB7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiA4cHg7IH0iCisgICAgICAgICI8
L3N0eWxlPiIKKyAgICAgICAgIjwvaGVhZD48Ym9keT48aDE+SW5zcGVjdGFibGUgdGFyZ2V0czwv
aDE+IgorICAgICAgICAiPGRpdiBpZD1cInRhcmdldGxpc3RcIj48cD5ObyB0YXJnZXRzIGZvdW5k
PC9wPjwvZGl2PjwvYm9keT4iCisgICAgICAgICI8c2NyaXB0PiIKKyAgICAgICAgImZ1bmN0aW9u
IHVwZGF0ZVRhcmdldHMoc3RyKSB7IgorICAgICAgICAgICAgImxldCB0YXJnZXREaXYgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0bGlzdCcpOyIKKyAgICAgICAgICAgICJ0YXJnZXRE
aXYuaW5uZXJIVE1MID0gc3RyOyIKKyAgICAgICAgIn0iCisgICAgICAgICI8L3NjcmlwdD4iKTsK
KyAgICBodG1sQnVpbGRlci5hcHBlbmQoIjwvaHRtbD4iKTsKKworICAgIGF1dG8gaHRtbCA9IGh0
bWxCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOworICAgIGF1dG8gZGF0YSA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGh0bWwuZGF0YSgpLCBodG1sLmxlbmd0aCgpKTsKKyAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L2h0bWwiX3MsIGh0bWwubGVuZ3RoKCksICJV
VEYtOCJfcyk7CisgICAgdGFzay5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIHRh
c2suZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRhKSk7CisgICAgdGFzay5kaWRDb21wbGV0ZShS
ZXNvdXJjZUVycm9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjBmNjAwZWZkZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKyNp
bmNsdWRlICJXZWJVUkxTY2hlbWVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBXVEYgeworY2xhc3Mg
VVJMOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMU2NoZW1lVGFzazsK
KworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyIGZpbmFsIDogcHVibGljIFJl
bW90ZUluc3BlY3Rvck9ic2VydmVyLCBwdWJsaWMgV2ViVVJMU2NoZW1lSGFuZGxlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI+IGNyZWF0
ZShXZWJQYWdlUHJveHkmIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyKHBhZ2UpKTsgfQorCisgICAgdm9pZCBpbnNwZWN0KGNvbnN0IFN0
cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYg
dHlwZSk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKFdl
YlBhZ2VQcm94eSYgcGFnZSkKKyAgICAgICAgOiBtX3BhZ2UocGFnZSkgeyB9CisKKyAgICAvLyBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlcgorICAgIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90
ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsIHsgfQorCisgICAgLy8gV2ViVVJMU2NoZW1lSGFuZGxl
cgorICAgIHZvaWQgcGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1l
VGFzayYpIGZpbmFsOworICAgIHZvaWQgcGxhdGZvcm1TdG9wVGFzayhXZWJQYWdlUHJveHkmLCBX
ZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9CisgICAgdm9pZCBwbGF0Zm9ybVRhc2tDb21wbGV0
ZWQoV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorCisgICAgdm9pZCB1cGRhdGVUYXJnZXRM
aXN0KCk7CisKKyAgICB2b2lkIHJ1blNjcmlwdChjb25zdCBTdHJpbmcmKTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+IG1faW5zcGVjdG9yQ2xpZW50OworICAg
IFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIGJvb2wgbV9wYWdlTG9hZGVkIHsgZmFsc2UgfTsK
KyAgICBTdHJpbmcgbV90YXJnZXRMaXN0c0h0bWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMzkwYzJiOTRmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcApAQCAtMCww
ICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lu
dFJlY3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBMUENUU1RSIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eVBvaW50ZXIiKTsKK2NvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05h
bWUgPSBMIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3MiOworCitMUkVTVUxUIENBTExCQUNL
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqPig6
OkdldFByb3AoaHduZCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOworCisg
ICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIHJldHVybiBjbGll
bnQtPnNpemVDaGFuZ2UoKTsKKyAgICBjYXNlIFdNX0NMT1NFOgorICAgICAgICByZXR1cm4gY2xp
ZW50LT5vbkNsb3NlKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKK30K
Kworc3RhdGljIEFUT00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpCit7CisgICAgc3RhdGljIGJvb2wg
aGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworICAgIGlmIChoYXZlUmVnaXN0ZXJl
ZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2Nl
eDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxl
ICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlduZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CisgICAgd2Nl
eC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgICAgICA9IDA7CisgICAg
d2NleC5oSWNvbiAgICAgICAgICA9IDA7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRD
dXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKKyAgICB3
Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7
CisKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKyAgICByZXR1cm4gOjpS
ZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitMUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpzaXplQ2hhbmdlKCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5k
bGUsICZyZWN0KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygpLCAwLCBy
ZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAt
IHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIHJldHVybiAwOworfQorCitMUkVTVUxUIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpvbkNsb3NlKCkKK3sKKyAgICA6OlNob3dXaW5kb3cobV9m
cm9udGVuZEhhbmRsZSwgU1dfSElERSk7CisgICAgZnJvbnRlbmREaWRDbG9zZSgpOworICAgIHJl
dHVybiAwOworfQorCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgUmVmUHRyPFdlYlByZWZl
cmVuY2VzPiBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJX
ZWJLaXQyLiIsICJXZWJLaXQyLiIpOworICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHModHJ1ZSk7CisKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAg
cHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJlZmVy
ZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwor
I2VuZGlmCisKKyAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQYWdlR3Jv
dXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7
CisKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6
Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0
b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKKyAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpOworICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKKworICAgIFdl
YkNvcmU6OkludFJlY3QgcmVjdCg2MCwgMjAwLCAxNTAwLCAxMDAwKTsKKyAgICByZWdpc3Rlcldp
bmRvd0NsYXNzKCk7CisgICAgbV9mcm9udGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1cs
CisgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
LCAwLCAwLCAwLCAwKTsKKworICAgIDo6U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxlLCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhp
cykpOworICAgIFNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7CisKKyAgICBS
RUNUIHI7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyKTsKKyAgICBt
X3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1fZnJvbnRl
bmRIYW5kbGUpOworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Cit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGJvb2wsIGJvb2wpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3Rh
cnRXaW5kb3dEcmFnKCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYpIHsgfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVu
ZEhhbmRsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZGVhYzk3MzE3OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJv
eHlXaW4uY3BwCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2luY2x1ZGUgIkFQSU5h
dmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW5jbHVkZSAi
QVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2lu
Y2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VH
cm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJWaWV3Lmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2luLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4K
KworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9y
UHJveHlQb2ludGVyUHJvcCA9IEwiV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIjsKK3N0YXRpYyBj
b25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzIjsKKworc3RydWN0IEluc3BlY3RlZFdpbmRvd0luZm8geworICAgIGludCBsZWZ0
OworICAgIGludCB0b3A7CisgICAgaW50IHZpZXdXaWR0aDsKKyAgICBpbnQgdmlld0hlaWdodDsK
KyAgICBpbnQgcGFyZW50V2lkdGg7CisgICAgaW50IHBhcmVudEhlaWdodDsKK307CisKK3N0YXRp
YyBJbnNwZWN0ZWRXaW5kb3dJbmZvIGdldEluc3BlY3RlZFdpbmRvd0luZm8oSFdORCBpbnNwZWN0
ZWRXaW5kb3csIEhXTkQgcGFyZW50V2luZG93KQoreworICAgIFJFQ1QgcmVjdDsKKyAgICA6Okdl
dENsaWVudFJlY3QoaW5zcGVjdGVkV2luZG93LCAmcmVjdCk7CisgICAgOjpNYXBXaW5kb3dQb2lu
dHMoaW5zcGVjdGVkV2luZG93LCBwYXJlbnRXaW5kb3csIChMUFBPSU5UKSZyZWN0LCAyKTsKKwor
ICAgIFJFQ1QgcGFyZW50UmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QocGFyZW50V2luZG93LCAm
cGFyZW50UmVjdCk7CisgICAgcmV0dXJuIHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdo
dCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgcGFyZW50UmVjdC5yaWdodCAt
IHBhcmVudFJlY3QubGVmdCwgcGFyZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LnRvcCB9Owor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCBo
d25kLCBVSU5UIG1zZywgV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobXNn
KSB7CisgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzogeworICAgICAgICBpZiAoIW1faXNB
dHRhY2hlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHdpbmRvd1BvcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V0lORE9XUE9TKj4obFBhcmFtKTsKKworICAgICAgICBpZiAod2lu
ZG93UG9zLT5mbGFncyAmIFNXUF9OT1NJWkUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgSFdORCBwYXJlbnQgPSBHZXRQYXJlbnQoaHduZCk7CisgICAgICAgIFJFQ1QgcGFyZW50UmVj
dDsKKyAgICAgICAgR2V0Q2xpZW50UmVjdChwYXJlbnQsICZwYXJlbnRSZWN0KTsKKworICAgICAg
ICBSRUNUIGluc3BlY3RvclJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0b3JW
aWV3V2luZG93LCAmaW5zcGVjdG9yUmVjdCk7CisKKyAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1l
bnRTaWRlKSB7CisgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogeworICAgICAg
ICAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChpbnNwZWN0b3JS
ZWN0LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wLCB3aW5kb3dQb3MtPmN5KTsKKyAgICAgICAg
ICAgIHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OworICAgICAgICAgICAgOjpTZXRX
aW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bv
cy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQ
X05PWk9SREVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
QXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChp
bnNwZWN0b3JSZWN0LnJpZ2h0IC0gaW5zcGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQb3MtPmN4KTsK
KyAgICAgICAgICAgIHdpbmRvd1Bvcy0+Y3ggLT0gaW5zcGVjdG9yV2lkdGg7CisgICAgICAgICAg
ICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCAr
IHdpbmRvd1Bvcy0+Y3gsIHdpbmRvd1Bvcy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdpbmRvd1Bvcy0+
Y3ksIFNXUF9OT1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworTFJFU1VM
VCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JQcm94eTo6d25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNn
LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFdlYkluc3BlY3RvclByb3h5
KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9w
KGh3bmQsIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKKyAgICBzd2l0Y2ggKG1zZykg
eworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgOjpTZXRXaW5kb3dQb3MoY2xpZW50LT5tX2lu
c3BlY3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFt
KSwgU1dQX05PWk9SREVSKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBXTV9DTE9TRToK
KyAgICAgICAgY2xpZW50LT5jbG9zZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25k
LCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cmVn
aXN0ZXJXaW5kb3dDbGFzcygpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5k
b3dDbGFzcyA9IGZhbHNlOworCisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVl
OworCisgICAgV05EQ0xBU1NFWCB3Y2V4OworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENM
QVNTRVgpOworICAgIHdjZXguc3R5bGUgPSAwOworICAgIHdjZXgubHBmblduZFByb2MgPSB3bmRQ
cm9jOworICAgIHdjZXguY2JDbHNFeHRyYSA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhID0gMDsK
KyAgICB3Y2V4LmhJbnN0YW5jZSA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7CisgICAgd2Nl
eC5oSWNvbiA9IDA7CisgICAgd2NleC5oQ3Vyc29yID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cp
OworICAgIHdjZXguaGJyQmFja2dyb3VuZCA9IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgPSAw
OworICAgIHdjZXgubHBzekNsYXNzTmFtZSA9IFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOwor
ICAgIHdjZXguaEljb25TbSA9IDA7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4
KTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1Bh
Z2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYs
IFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZp
Z2F0ZSBhbnl3aGVyZS4KKyAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwo
bmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7CisgICAgaWYgKHNvdXJjZUZyYW1l
ICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgeworICAgICAgICB0b0ltcGwobGlzdGVu
ZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFdl
Ykluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdl
Ykluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKHdlYkluc3BlY3RvclBy
b3h5KTsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5h
dmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7CisKKyAgICAvLyBBbGxvdyBsb2FkaW5nIG9m
IHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgorICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNN
YWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgeworICAgICAgICB0b0ltcGwo
bGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3Mg
cGFnZS4KKyAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKKworICAgIC8vIEFuZCBp
bnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIHdlYkluc3BlY3RvclBy
b3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9
IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50
SW5mbykpOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7CisgICAgd2ViSW5zcGVjdG9y
UHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0
ZWRQYWdlKCkpOworCisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVh
dGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOworI2lmIEVOQUJMRShERVZFTE9Q
RVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNw
ZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCisgICAgcHJl
ZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJlZmVyZW5j
ZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOworI2Vu
ZGlmCisgICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVl
KTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7IH0pOworICAg
IGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3Vw
SWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7CisgICAgYXV0byBwYWdlQ29uZmln
dXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlv
bkxldmVsKCkpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVy
ZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdy
b3VwLnB0cigpKTsKKworICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xp
ZW50ID0geworICAgICAgICB7IDAsIHRoaXMgfSwKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbiwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvblJlc3BvbnNlCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxv
YWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRp
b24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgorICAgICAgICBudWxs
cHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxO
YXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1
YmZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAorICAgICAg
ICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIs
IC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIGNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCisgICAgICAgIHdlYlByb2Nlc3NEaWRDcmFz
aCwKKyAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQorCisgICAgICAg
IG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwg
Ly8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5h
dmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3QKKyAgICB9OworCisgICAgUkVDVCByID0geyAwLCAwLCBzdGF0aWNfY2Fz
dDxMT05HPihpbml0aWFsV2luZG93V2lkdGgpLCBzdGF0aWNfY2FzdDxMT05HPihpbml0aWFsV2lu
ZG93SGVpZ2h0KSB9OworICAgIGF1dG8gcGFnZSA9IGluc3BlY3RlZFBhZ2UoKTsKKyAgICBtX2lu
c3BlY3RlZFZpZXdXaW5kb3cgPSBwYWdlLT52aWV3V2lkZ2V0KCk7CisgICAgbV9pbnNwZWN0ZWRW
aWV3UGFyZW50V2luZG93ID0gOjpHZXRQYXJlbnQobV9pbnNwZWN0ZWRWaWV3V2luZG93KTsKKyAg
ICBhdXRvIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1faW5z
cGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gJnZpZXcubGVh
a1JlZigpOworICAgIGF1dG8gaW5zcGVjdG9yUGFnZSA9IG1faW5zcGVjdG9yVmlldy0+cGFnZSgp
OworICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IGluc3BlY3RvclBhZ2UtPnZpZXdXaWRnZXQo
KTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdl
KSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpCit7CisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1v
dmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOworICAgIG1faW5zcGVjdG9y
VmlldyA9IG51bGxwdHI7CisgICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKKyAgICBpZiAo
bV9pbnNwZWN0b3JWaWV3V2luZG93KSB7CisgICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3Bl
Y3RvclZpZXdXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBudWxscHRy
OworICAgIH0KKyAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKKyAgICAgICAgOjpS
ZW1vdmVQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQcm94eVBvaW50
ZXJQcm9wKTsKKyAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93
KTsKKyAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSBudWxscHRyOworICAgIH0KKyAg
ICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBudWxscHRyOworICAgIG1faW5zcGVjdGVkVmlld1Bh
cmVudFdpbmRvdyA9IG51bGxwdHI7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdG9yUGFnZVVSTCgpCit7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
aHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2Vi
S2l0QnVuZGxlKCksIENGU1RSKCJNYWluIiksIENGU1RSKCJodG1sIiksIENGU1RSKCJXZWJJbnNw
ZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkp
OworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK1N0cmluZyBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworI2lmIFVTRShDRikKKyAgICBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNl
VVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiVGVzdCIpLCBDRlNUUigiaHRtbCIp
LCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOworICAgIHJldHVybiBDRlVSTEdldFN0cmluZyho
dG1sVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCitT
dHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQoreworI2lmIFVTRShD
RikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGJhc2VVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxl
Q29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiV2ViSW5zcGVj
dG9yVUkiKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhi
YXNlVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCitE
ZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2Fi
bGUoKQoreworICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0aGlz
IHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhLgorICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5m
b0RhdGE6OmVtcHR5KCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xp
ZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKKyAgICByZXR1cm4gcmVjdC5i
b3R0b20gLSByZWN0LnRvcDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENs
aWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQ7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXR0YWNoKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6
ZSA9IDMwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGgg
PSA3NTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9
IDI1MDsKKworICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdyAmJiA6OkdldFBhcmVudCht
X2luc3BlY3RvclZpZXdXaW5kb3cpID09IG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7CisgICAg
ICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFy
ZW50V2luZG93KTsKKyAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93
LCBTV19ISURFKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0
ZXI6OmFkZExpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisKKyAgICBpZiAo
bV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKSB7CisgICAgICAgIHVu
c2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVp
Z2h0KCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChz
dGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNp
emUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1bnNp
Z25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgo
KSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgoc3RkOjpt
YXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1h
eGltdW1BdHRhY2hlZFdpZHRoKSkpOworICAgIH0KKyAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0
b3JWaWV3V2luZG93LCBTV19TSE9XKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1EZXRhY2goKQoreworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJv
Y2VzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faW5zcGVjdG9yRGV0YWNoV2lu
ZG93KSB7CisgICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKKyAgICAgICAgbV9pbnNwZWN0
b3JEZXRhY2hXaW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFdlYkluc3BlY3RvclByb3h5Q2xh
c3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICAgICAgQ1dfVVNFREVGQVVM
VCwgQ1dfVVNFREVGQVVMVCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0
LAorICAgICAgICAgICAgMCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CisgICAg
ICAgIDo6U2V0UHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQ
b2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICB9CisKKyAg
ICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5z
cGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGll
bnRSZWN0KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCAmcmVjdCk7CisgICAgYXV0byB3aW5kb3dJ
bmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5z
cGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3
V2luZG93LCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9p
bnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0
LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1f
aW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwg
d2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJl
bnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKKworICAgIGlmIChtX2lz
VmlzaWJsZSkKKyAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBT
V19TSE9XKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgYXV0byB3aW5kb3dJbmZvID0g
Z2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVk
Vmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2lu
ZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gaGVpZ2h0
LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCBoZWlnaHQsIFNXUF9O
T1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3
aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0g
d2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9w
LCBTV1BfTk9aT1JERVIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNl
dEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgYXV0byB3aW5kb3dJ
bmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5z
cGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JW
aWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lkdGgsIHdpbmRvd0luZm8u
dG9wLCB3aWR0aCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQ
X05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAs
IHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGgg
LSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50
b3AsIFNXUF9OT1pPUkRFUik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIC8qIHVybCAqLykKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2
ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5k
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wgLyogYXZhaWxhYmxlICovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3co
KQoreworICAgIHBsYXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTI4Y2EyZmJmYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0
UHJveHkuaCIKLQotI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
V2ViRnJhbWVQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNp
bmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQ
cm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBl
KQotewotICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5PihwYWdlLCB0
YXJnZXRJZCwgdHlwZSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94
eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJv
dmlzaW9uYWxQYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGUgdHlwZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFBy
b3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5cGUpOwotICAg
IHRhcmdldC0+bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNpb25hbFBhZ2Up
OwotICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KLUluc3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0
b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQotICAgIDogbV9wYWdlKHBhZ2Up
Ci0gICAgLCBtX2lkZW50aWZpZXIodGFyZ2V0SWQpCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLX0K
LQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgaWYgKG1fcHJv
dmlzaW9uYWxQYWdlKSB7Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1By
b2Nlc3MoKSkKLSAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJ
bnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOwotfQotCi12b2lkIEluc3Bl
Y3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KCkKLXsKLSAgICBpZiAoaXNQYXVzZWQoKSkKLSAg
ICAgICAgcmVzdW1lKCk7Ci0KLSAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKLSAgICAgICAg
bV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNw
ZWN0b3IoaWRlbnRpZmllcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
bV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOwotfQotCi12b2lk
IEluc3BlY3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7Ci0gICAgICAg
IG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRv
VGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9w
YWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlk
ZW50aWZpZXIoKSwgbWVzc2FnZSkpOwotfQotCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5Ojpk
aWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpCi17Ci0gICAgbV9wcm92aXNpb25hbFBhZ2UgPSBu
dWxscHRyOwotfQotCi1ib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3JUYXJnZXRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0
UHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyMzljZWM4ZTEuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
UHJvdmlzaW9uYWxQYWdlUHJveHk7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLS8vIE5PVEU6IFRo
aXMgVUlQcm9jZXNzIHNpZGUgSW5zcGVjdG9yVGFyZ2V0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUg
ZnJvbnRlbmQgY2hhbm5lbCwgc2luY2UKLS8vIGFueSB0YXJnZXQgLT4gZnJvbnRlbmQgbWVzc2Fn
ZXMgd2lsbCBiZSByb3V0ZWQgdG8gdGhlIFdlYlBhZ2VQcm94eSB3aXRoIGEgdGFyZ2V0SWQuCi0K
LWNsYXNzIEluc3BlY3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRQcm94eSk7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94
eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3Jl
YXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICBJbnNwZWN0b3JUYXJnZXRQcm94eShXZWJQ
YWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRQcm94eSgpID0gZGVmYXVsdDsKLQotICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV90eXBlOyB9Ci0gICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lkZW50aWZpZXI7IH0KLQotICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQo
KTsKLSAgICBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQg
Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0g
ICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsKLSAgICBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgbV90eXBlOwotICAgIFdlYWtQdHI8UHJvdmlz
aW9uYWxQYWdlUHJveHk+IG1fcHJvdmlzaW9uYWxQYWdlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTJjMjlmNDE4Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5o
IgotCi0jaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0
aW9uLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkoKQotICAgIDogbV9kZWJ1Z2dhYmxlSW5mbyhBUEk6OkRlYnVnZ2FibGVJ
bmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKSkKLXsKLX0KLQotUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6On5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpCi17Ci0gICAgQVNT
RVJUKCFtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZShib29sIGF2YWlsYWJsZSkKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkK
LSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhdmFp
bGFibGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmxvYWQo
UmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYg
YmFja2VuZENvbW1hbmRzVVJMKQotewotICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotCi0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwotICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOwotCi0gICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6
ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1hbmRz
VVJMKSk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQmFja2VuZCgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VG
cm9tQ3Jhc2goKQotewotICAgIC8vIEJlaGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQganVzdCBjbG9z
ZWQsIHNvIGNsaWVudHMgYXJlIGluZm9ybWVkIHRoZSBmcm9udGVuZCBpcyBnb25lLgotICAgIGZy
b250ZW5kRGlkQ2xvc2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hv
dygpCi17Ci0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6ZnJvbnRlbmREaWRDbG9zZSgpCi17Ci0gICAgUmVmPFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAg
bV9jbGllbnQtPmNsb3NlRnJvbUZyb250ZW5kKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQot
ewotICAgIEFTU0VSVCghbV9iYWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgpKTsKLQotICAgIGNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgbG9hZChtX2RlYnVnZ2FibGVJbmZvLmNv
cHlSZWYoKSwgbV9iYWNrZW5kQ29tbWFuZHNVUkwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpyZXNldFN0YXRlKCkKLXsKLSAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICBw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpzYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgcGxhdGZv
cm1TYXZlKHN1Z2dlc3RlZFVSTCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlRGlh
bG9nKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgcGxhdGZv
cm1BcHBlbmQoc3VnZ2VzdGVkVVJMLCBjb250ZW50KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBw
bGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygp
OwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvcGVuSW5OZXdUYWIoY29uc3Qg
U3RyaW5nJiB1cmwpCi17Ci0gICAgcGxhdGZvcm1PcGVuSW5OZXdUYWIodXJsKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNlcnRpZmljYXRlSW5mbyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNl
bmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKTsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpOwotCi0gICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbnVsbHB0cik7
Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKLSAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5hc3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFn
ZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQ
YWdlSUQoKSk7Ci0KLSAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOwot
Ci0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLQotICAgIHBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotI2lmICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikg
fHwgKCFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQot
V2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVz
ZXRTdGF0ZSgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Ccmlu
Z1RvRnJvbnQoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2
ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0
aWZpY2F0ZUluZm8mKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKSB7IH0KLSNlbmRpZiAvLyAhRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExB
VEZPUk0oV0lOKSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZmFiNThmOGNlMDYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQVBJT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNf
Q0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci1P
QkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKLU9CSkNfQ0xB
U1MgV0tXZWJWaWV3OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRp
ZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBEZWJ1Z2dhYmxlSW5mbzsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdl
YlZpZXc7Ci0KLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCgpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSA9IDA7Ci19OwotCi1jbGFz
cyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYklu
c3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKSk7Ci0g
ICAgfQotCi0gICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2b2lkIHNldENs
aWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0g
Y2xpZW50OyB9Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgbG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxl
SW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOwotICAgIHZvaWQgY2xv
c2VGcm9tQmFja2VuZCgpOwotICAgIHZvaWQgc2hvdygpOwotCi0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3cuZ2V0KCk7IH0K
LSAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotICAgIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoY29uc3Qg
Q1N0cmluZyYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAgTFJFU1VM
VCBzaXplQ2hhbmdlKCk7Ci0gICAgTFJFU1VMVCBvbkNsb3NlKCk7Ci0KLSAgICBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSNlbmRp
ZgotCi0gICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOwotCi1wcml2YXRlOgotICAgIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5KCk7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7Ci0KLSAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcy4KLSAgICB2
b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKLSAgICB2b2lkIHJlb3BlbigpOwotICAgIHZvaWQgcmVz
ZXRTdGF0ZSgpOwotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBzYXZlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNv
ZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7Ci0g
ICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotICAgIHZvaWQgY3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpOwotCi0gICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgotICAgIFdlYlBh
Z2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lk
IHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lkIHBsYXRmb3Jt
UmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLSAgICB2b2lk
IHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQp
OwotICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgcGxhdGZv
cm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0KLSAgICBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07Ci0gICAgV2Vi
UGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07Ci0KLSAgICBSZWY8QVBJOjpE
ZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29t
bWFuZHNVUkw7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+
IG1fd2luZG93OwotICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0Fk
YXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VS
TD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1f
c2hlZXRSZWN0OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIEd0a1dpZGdldCogbV93
ZWJWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV93aW5kb3cgeyBudWxscHRyIH07
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAgSFdORCBtX2Zyb250ZW5kSGFu
ZGxlOwotICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7Ci0jZW5kaWYKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmUwOTFiNzhmYjYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsNDAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6
Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1tZXNzYWdlcyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAgRnJvbnRlbmRE
aWRDbG9zZSgpCi0gICAgUmVvcGVuKCkKLSAgICBSZXNldFN0YXRlKCkKLSAgICBCcmluZ1RvRnJv
bnQoKQotCi0gICAgU2F2ZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50LCBib29sIGJh
c2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi0gICAgQXBwZW5kKFN0cmluZyBmaWxlbmFt
ZSwgU3RyaW5nIGNvbnRlbnQpCi0KLSAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QpCi0KLSAgICBTdGFydFdpbmRvd0RyYWcoKQotCi0gICAgT3BlbkluTmV3VGFiKFN0cmlu
ZyB1cmwpCi0gICAgU2hvd0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0
aWZpY2F0ZUluZm8pCi0KLSAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxp
Z2h0Vmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ODM5MWM0MjBjLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZp
ZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLQotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotc3RydWN0IEhpZ2hsaWdodDsKLX0KLQotQGludGVyZmFjZSBXS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcgOiBVSVZpZXcgewotICAgIE5TTXV0YWJsZUFycmF5ICpfbGF5ZXJzOyAv
LyBDQVNoYXBlTGF5ZXJzLgotfQotLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6OkhpZ2hs
aWdodCYpaGlnaGxpZ2h0OwotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDY1ZjBjMDNlMzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0x
LDI4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJX
S0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0K
LSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5
VXRpbGl0aWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KLQotQGlt
cGxlbWVudGF0aW9uIFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldwotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0V2l0aEZyYW1lOmZyYW1lXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2xheWVycyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLSAgICBbX2xh
eWVycyByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX3JlbW92
ZUFsbExheWVycwotewotICAgIGZvciAoQ0FTaGFwZUxheWVyICpsYXllciBpbiBfbGF5ZXJzKQot
ICAgICAgICBbbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFtfbGF5ZXJzIHJlbW92
ZUFsbE9iamVjdHNdOwotfQotCi0tICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIpbnVt
TGF5ZXJzCi17Ci0gICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBudW1MYXllcnMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwotCi0gICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKLSAgICAgICAgQ0FTaGFwZUxheWVy
ICpsYXllciA9IFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW19sYXllcnMg
YWRkT2JqZWN0OmxheWVyXTsKLSAgICAgICAgW3NlbGYubGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJd
OwotICAgICAgICBbbGF5ZXIgcmVsZWFzZV07Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBmaW5k
SW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBwMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIGQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMiwgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgaW50ZXJzZWN0aW9uKSAKLXsKLSAgICAvLyBEbyB0aGUgbGluZXMgaW50ZXJzZWN0Pwot
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7Ci0gICAg
aWYgKCFmaW5kSW50ZXJzZWN0aW9uKHAxLCBwMiwgZDEsIGQyLCB0ZW1wb3JhcnlJbnRlcnNlY3Rp
b25Qb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElzIHRoZSBpbnRlcnNl
Y3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvbiB0aGUgbGluZT8KLSAgICBpZiAocDEueCgp
ID49IHAyLngoKSkgewotICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgp
ID4gcDEueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAyLngoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAodGVtcG9y
YXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDIueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlv
blBvaW50LngoKSA8IHAxLngoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKHAxLnkoKSA+PSBwMi55KCkpIHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2Vj
dGlvblBvaW50LnkoKSA+IHAxLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkg
PCBwMi55KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAyLnkoKSB8fCB0ZW1wb3Jh
cnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMS55KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaW50ZXJzZWN0aW9uID0gdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9p
bnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoaXMgcXVhZCBpbnRlcnNlY3Rpb24gd29y
a3MgYmVjYXVzZSB0aGUgdHdvIHF1YWRzIGFyZSBrbm93biB0byBiZSBhdCB0aGUgc2FtZQotLy8g
cm90YXRpb24gYW5kIGNsb2Nrd2lzZS1uZXNzLgotc3RhdGljIFdlYkNvcmU6OkZsb2F0UXVhZCBx
dWFkSW50ZXJzZWN0aW9uKFdlYkNvcmU6OkZsb2F0UXVhZCBib3VuZHMsIFdlYkNvcmU6OkZsb2F0
UXVhZCB0b0NsYW1wKQotewotICAgIC8vIFJlc3VsdGluZyBwb2ludHMuCi0gICAgV2ViQ29yZTo6
RmxvYXRQb2ludCBwMSwgcDIsIHAzLCBwNDsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQxID0gZmFs
c2U7Ci0gICAgYm9vbCBjb250YWluc1BvaW50MiA9IGZhbHNlOwotICAgIGJvb2wgY29udGFpbnNQ
b2ludDMgPSBmYWxzZTsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQ0ID0gZmFsc2U7Ci0gICAgYm9v
bCBpbnRlcnNlY3RGb3JQb2ludDEgPSBmYWxzZTsKLSAgICBib29sIGludGVyc2VjdEZvclBvaW50
MiA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmFsc2U7Ci0gICAgYm9v
bCBpbnRlcnNlY3RGb3JQb2ludDQgPSBmYWxzZTsKLQotICAgIC8vIFRvcCAvIGJvdHRvbSB2ZXJ0
aWNhbCBjbGFtcGluZy4KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMSgp
KSkgewotICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7Ci0gICAgICAgIHAxID0gdG9DbGFt
cC5wMSgpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDEgPSBmaW5kSW50ZXJz
ZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRvQ2xh
bXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwMSkpKQotICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsK
LQotICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAyKCkpKSB7Ci0gICAgICAg
IGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKLSAgICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7Ci0gICAg
fSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MiA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVC
ZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9DbGFtcC5wMigpLCB0b0Ns
YW1wLnAzKCksIHAyKSkpCi0gICAgICAgIHAyID0gdG9DbGFtcC5wMigpOwotCi0gICAgaWYgKGJv
dW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDMoKSkpIHsKLSAgICAgICAgY29udGFpbnNQb2lu
dDMgPSB0cnVlOwotICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKLSAgICB9IGVsc2UgaWYgKCEo
aW50ZXJzZWN0Rm9yUG9pbnQzID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMo
Ym91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwgcDMp
KSkKLSAgICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7Ci0KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5z
UG9pbnQodG9DbGFtcC5wNCgpKSkgewotICAgICAgICBjb250YWluc1BvaW50NCA9IHRydWU7Ci0g
ICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQ
b2ludDQgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQoKSwg
Ym91bmRzLnAzKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwNCkpKQotICAgICAgICBw
NCA9IHRvQ2xhbXAucDQoKTsKLQotICAgIC8vIElmIG9ubHkgb25lIG9mIHRoZSBwb2ludHMgaW50
ZXJzZWN0ZWQgb24gZWl0aGVyIHRoZSB0b3Agb3IgYm90dG9tIGxpbmUgdGhlbiB3ZQotICAgIC8v
IGNhbiBjbGFtcCB0aGUgb3RoZXIgcG9pbnQgb24gdGhhdCBsaW5lIHRvIHRoZSBjb3JuZXIgb2Yg
dGhlIGJvdW5kcy4KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmIGludGVyc2VjdEZvclBvaW50
MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1
ZTsKLSAgICAgICAgcDEgPSBib3VuZHMucDEoKTsKLSAgICB9IGVsc2UgaWYgKCFjb250YWluc1Bv
aW50MiAmJiBpbnRlcnNlY3RGb3JQb2ludDEgJiYgIWludGVyc2VjdEZvclBvaW50MikgewotICAg
ICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Ci0gICAgICAgIHAyID0gYm91bmRzLnAyKCk7Ci0g
ICAgfQotICAgIGlmICghY29udGFpbnNQb2ludDQgJiYgaW50ZXJzZWN0Rm9yUG9pbnQzICYmICFp
bnRlcnNlY3RGb3JQb2ludDQpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOwotICAg
ICAgICBwNCA9IGJvdW5kcy5wNCgpOwotICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQzICYm
IGludGVyc2VjdEZvclBvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKSB7Ci0gICAgICAgIGNv
bnRhaW5zUG9pbnQzID0gdHJ1ZTsKLSAgICAgICAgcDMgPSBib3VuZHMucDMoKTsKLSAgICB9Ci0K
LSAgICAvLyBOb3cgd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gaG9yaXpvbnRhbCBjbGFtcGluZyBm
b3IgdW5hZGp1c3RlZCBwb2ludHMuCi0gICAgaWYgKCFjb250YWluc1BvaW50MiAmJiAhaW50ZXJz
ZWN0Rm9yUG9pbnQyKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50
cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCksIHAxLCBwMiwgcDIpOwotICAgIGlmICghY29udGFp
bnNQb2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50MykKLSAgICAgICAgZmluZEludGVyc2VjdGlv
bk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwNCwgcDMsIHAz
KTsKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2ludDEpCi0gICAg
ICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3Vu
ZHMucDQoKSwgcDEsIHAyLCBwMSk7Ci0gICAgaWYgKCFjb250YWluc1BvaW50NCAmJiAhaW50ZXJz
ZWN0Rm9yUG9pbnQ0KQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50
cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHA0LCBwMywgcDQpOwotCi0gICAgcmV0dXJuIFdl
YkNvcmU6OkZsb2F0UXVhZChwMSwgcDIsIHAzLCBwNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxheWVy
UGF0aFdpdGhIb2xlKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVh
ZCYgb3V0ZXJRdWFkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIGhvbGVRdWFkKQotewotICAg
IC8vIE5vdGhpbmcgdG8gc2hvdy4KLSAgICBpZiAob3V0ZXJRdWFkID09IGhvbGVRdWFkIHx8IGhv
bGVRdWFkLmNvbnRhaW5zUXVhZChvdXRlclF1YWQpKSB7Ci0gICAgICAgIGxheWVyLnBhdGggPSBO
VUxMOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgYSBuZWdh
dGl2ZSBtYXJnaW4gLyBwYWRkaW5nIHRoZW4gdGhlIG91dGVyIGJveCBtaWdodCBub3QKLSAgICAv
LyBmdWxseSBjb250YWluIHRoZSBob2xlIGJveC4gSW4gc3VjaCBjYXNlcyB3ZSByZWNhbGN1bGF0
ZSB0aGUgaG9sZSB0bwotICAgIC8vIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBxdWFk
cy4KLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgaW5uZXJIb2xlOwotICAgIGlmIChvdXRlclF1YWQu
Y29udGFpbnNRdWFkKGhvbGVRdWFkKSkKLSAgICAgICAgaW5uZXJIb2xlID0gaG9sZVF1YWQ7Ci0g
ICAgZWxzZQotICAgICAgICBpbm5lckhvbGUgPSBxdWFkSW50ZXJzZWN0aW9uKG91dGVyUXVhZCwg
aG9sZVF1YWQpOwotCi0gICAgLy8gQ2xvY2t3aXNlIGluc2lkZSByZWN0IChob2xlKSwgQ291bnRl
ci1DbG9ja3dpc2Ugb3V0c2lkZSByZWN0IChmaWxsKS4KLSAgICBDR011dGFibGVQYXRoUmVmIHBh
dGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7Ci0gICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwg
MCwgaW5uZXJIb2xlLnAxKCkueCgpLCBpbm5lckhvbGUucDEoKS55KCkpOwotICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMigpLngoKSwgaW5uZXJIb2xlLnAyKCku
eSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDMoKS54
KCksIGlubmVySG9sZS5wMygpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwg
MCwgaW5uZXJIb2xlLnA0KCkueCgpLCBpbm5lckhvbGUucDQoKS55KCkpOwotICAgIENHUGF0aE1v
dmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgp
KTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCks
IG91dGVyUXVhZC5wNCgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwg
b3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOwotICAgIENHUGF0aEFkZExp
bmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgp
KTsKLSAgICBsYXllci5wYXRoID0gcGF0aDsKLSAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOwotfQot
Ci1zdGF0aWMgdm9pZCBsYXllclBhdGgoQ0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQpCi17Ci0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0g
Q0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91
dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5l
VG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7
Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBv
dXRlclF1YWQucDMoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91
dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKLSAgICBsYXllci5wYXRoID0g
cGF0aDsKLSAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOwotfQotCi0tICh2b2lkKV9sYXlvdXRGb3JO
b2RlSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodCBvZmZzZXQ6
KHVuc2lnbmVkKW9mZnNldAotewotICAgIEFTU0VSVChbX2xheWVycyBjb3VudF0gPj0gb2Zmc2V0
ICsgNCk7Ci0gICAgQVNTRVJUKGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPj0gb2Zmc2V0ICsgNCk7
Ci0gICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA8IG9mZnNldCArIDQgfHwgaGlnaGxpZ2h0LnF1YWRz
LnNpemUoKSA8IG9mZnNldCArIDQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENBU2hhcGVMYXll
ciAqbWFyZ2luTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldF07Ci0gICAgQ0FT
aGFwZUxheWVyICpib3JkZXJMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsg
MV07Ci0gICAgQ0FTaGFwZUxheWVyICpwYWRkaW5nTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdElu
ZGV4Om9mZnNldCArIDJdOwotICAgIENBU2hhcGVMYXllciAqY29udGVudExheWVyID0gW19sYXll
cnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAzXTsKLQotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBt
YXJnaW5RdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldF07Ci0gICAgV2ViQ29yZTo6RmxvYXRR
dWFkIGJvcmRlclF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMV07Ci0gICAgV2ViQ29y
ZTo6RmxvYXRRdWFkIHBhZGRpbmdRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDJdOwot
ICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBjb250ZW50UXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZz
ZXQgKyAzXTsKLQotICAgIG1hcmdpbkxheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGln
aGxpZ2h0Lm1hcmdpbkNvbG9yKTsKLSAgICBib3JkZXJMYXllci5maWxsQ29sb3IgPSBjYWNoZWRD
R0NvbG9yKGhpZ2hsaWdodC5ib3JkZXJDb2xvcik7Ci0gICAgcGFkZGluZ0xheWVyLmZpbGxDb2xv
ciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7Ci0gICAgY29udGVudExh
eWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7Ci0K
LSAgICBsYXllclBhdGhXaXRoSG9sZShtYXJnaW5MYXllciwgbWFyZ2luUXVhZCwgYm9yZGVyUXVh
ZCk7Ci0gICAgbGF5ZXJQYXRoV2l0aEhvbGUoYm9yZGVyTGF5ZXIsIGJvcmRlclF1YWQsIHBhZGRp
bmdRdWFkKTsKLSAgICBsYXllclBhdGhXaXRoSG9sZShwYWRkaW5nTGF5ZXIsIHBhZGRpbmdRdWFk
LCBjb250ZW50UXVhZCk7Ci0gICAgbGF5ZXJQYXRoKGNvbnRlbnRMYXllciwgY29udGVudFF1YWQp
OwotfQotCi0tICh2b2lkKV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDooY29uc3QgV2ViQ29y
ZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKLXsKLSAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5zaXpl
KCkpIHsKLSAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgp
IC8gNDsKLSAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3VudCAqIDRdOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKQotICAgICAgICBbc2VsZiBfbGF5
b3V0Rm9yTm9kZUhpZ2hsaWdodDpoaWdobGlnaHQgb2Zmc2V0OmkgKiA0XTsKLX0KLQotLSAodm9p
ZClfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGln
aGxpZ2h0Ci17Ci0gICAgTlNVSW50ZWdlciBudW1MYXllcnMgPSBoaWdobGlnaHQucXVhZHMuc2l6
ZSgpOwotICAgIGlmICghbnVtTGF5ZXJzKSB7Ci0gICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXll
cnNdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NlbGYgX2NyZWF0ZUxheWVyczpu
dW1MYXllcnNdOwotCi0gICAgQ0dDb2xvclJlZiBjb250ZW50Q29sb3IgPSBjYWNoZWRDR0NvbG9y
KGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IG51bUxheWVyczsgKytpKSB7Ci0gICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbX2xheWVy
cyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBsYXllci5maWxsQ29sb3IgPSBjb250ZW50Q29s
b3I7Ci0gICAgICAgIGxheWVyUGF0aChsYXllciwgaGlnaGxpZ2h0LnF1YWRzW2ldKTsKLSAgICB9
Ci19Ci0KLS0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdo
dAotewotICAgIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpO
b2RlIHx8IGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGVMaXN0
KQotICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6aGlnaGxpZ2h0XTsK
LSAgICBlbHNlIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpS
ZWN0cykKLSAgICAgICAgW3NlbGYgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0OmhpZ2hsaWdodF07
Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNw
ZWN0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZDcwNWU4M2U3
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQ
cm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVk
ZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiQVBJVUlDbGllbnQu
aCIKLSNpbmNsdWRlICJXZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIgotI2luY2x1ZGUgIldlYkZyYW1l
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29k
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0KLSNpZiBQTEFURk9STShHVEsp
Ci0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdCB1bnNpZ25lZCBX
ZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOwotY29uc3QgdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7Ci0KLWNvbnN0
IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAxMDAwOwot
Y29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2
NTA7Ci0KLVdlYkluc3BlY3RvclByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkq
IGluc3BlY3RlZFBhZ2UpCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIDogbV9jbG9zZUZyb250ZW5k
QWZ0ZXJJbmFjdGl2aXR5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViSW5zcGVjdG9y
UHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQotI2VuZGlmCi17
Ci0gICAgaWYgKGluc3BlY3RlZFBhZ2UgJiYgaW5zcGVjdGVkUGFnZS0+aGFzUnVubmluZ1Byb2Nl
c3MoKSkgewotICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOwotICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFn
ZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3RvclByb3h5Ojp+
V2ViSW5zcGVjdG9yUHJveHkoKQotewotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdGlvbkxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yTGV2ZWxGb3JQ
YWdlKGluc3BlY3RlZFBhZ2UoKSk7Ci19Ci0KLVdlYlByZWZlcmVuY2VzJiBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9p
bnNwZWN0b3JQYWdlKTsKLSAgICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAoKS5w
cmVmZXJlbmNlcygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkK
LXsKLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwot
Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICBwbGF0Zm9ybUludmFsaWRh
dGUoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdl
VG9Gcm9udGVuZChtZXNzYWdlKSk7Ci19Ci0KLS8vIFB1YmxpYyBBUElzCi1ib29sIFdlYkluc3Bl
Y3RvclByb3h5Ojppc0Zyb250KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvd01lc3NhZ2VTZW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7Ci0gICAgbV9pZ25v
cmVGaXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsK
LQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7Ci0gICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNDb25uZWN0ZWQoKSkgewotICAgICAgICBi
cmluZ1RvRnJvbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbm5lY3QoKTsK
LQotICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNvIGl0IG9wZW5z
IHRoZSBJbnNwZWN0b3IuCi0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpoaWRlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLQot
ICAgIHBsYXRmb3JtSGlkZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZSgp
Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKLQot
ICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmNsb3NlRm9yQ3Jhc2goKQotewotICAgIGNsb3NlKCk7Ci0KLSAgICBwbGF0Zm9ybURp
ZENsb3NlRm9yQ3Jhc2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkK
LXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xv
c2UoKTsKLSAgICBzaG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3Rh
dGUoKQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5z
cGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRl
bGV0ZUluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuZGVsZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKLSAgICBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotCi0gICAgcGxhdGZv
cm1SZXNldFN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0KCkKLXsK
LSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKSB7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7Ci0g
ICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkqIGluc3Bl
Y3RlZFBhZ2UpCi17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAgIEFTU0VSVChp
bnNwZWN0ZWRQYWdlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7Ci0g
ICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBh
Z2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQotICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRh
dGVDb25uZWN0aW9uKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGcm9udGVu
ZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQotewotICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9u
KGNvbm5lY3Rpb25JZGVudGlmaWVyKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNo
b3dDb25zb2xlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3dSZXNvdXJjZXMoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3Vy
Y2VzKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJlc291cmNlRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgbV9p
bnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dNYWluUmVzb3Vy
Y2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmF0dGFjaEJvdHRvbSgpCi17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpCb3R0b20p
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCi17Ci0gICAgYXR0
YWNoKEF0dGFjaG1lbnRTaWRlOjpSaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmF0dGFjaExlZnQoKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVmdCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBzaWRlKQotewot
ICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFjYW5BdHRhY2goKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pc0F0dGFjaGVkID0gdHJ1ZTsKLSAgICBtX2F0dGFjaG1lbnRTaWRlID0gc2lk
ZTsKLQotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaG1l
bnRTaWRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihzaWRlKSk7Ci0KLSAgICBpZiAobV9pc1Zpc2li
bGUpCi0gICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0
c0F0dGFjaGVkKHRydWUpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKHRydWUpKTsKLQotICAgIHN3aXRjaCAobV9hdHRhY2ht
ZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0
b20oKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6
Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OkF0dGFjaGVkUmlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6TGVmdDoKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybUF0dGFjaCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpkZXRhY2go
KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lzQXR0YWNoZWQgPSBmYWxzZTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSkKLSAgICAgICAgaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2Up
OwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNl
dEF0dGFjaGVkKGZhbHNlKSk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7Ci0KLSAgICBwbGF0Zm9ybURldGFjaCgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCi17Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKLSAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2lu
ZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2Vz
KCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7Ci0gICAgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0
U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9ybVNldFNoZWV0
UmVjdChyZWN0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFn
KCkKLXsKLSAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNQcm9maWxpbmdQYWdlKQotICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBh
Z2VQcm9maWxpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZWxlbWVudFNl
bGVjdGlvbkFjdGl2ZSkgewotICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2Ug
PSB0cnVlOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29u
bmVjdCgpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOwotICAgIH0KLX0KLQotYm9vbCBXZWJJbnNw
ZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmIHVybCkKLXsK
LSAgICAvLyBVc2UgVVJMIHNvIHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQgcHJvdG9jb2xz
LgotICAgIFVSTCBtYWluUGFnZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clBhZ2VVUkwoKSk7Ci0gICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdlVVJMLnByb3Rv
Y29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJvZHVjdGlvbiBi
dWlsZHMuCi0gICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclRlc3RQYWdlVVJMKCk7Ci0gICAgaWYgKHRlc3RQYWdlVVJMU3RyaW5nLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVUkwgdGVzdFBhZ2VVUkwoVVJMKCks
IHRlc3RQYWdlVVJMU3RyaW5nKTsKLSAgICByZXR1cm4gdXJsLnByb3RvY29sKCkgPT0gdGVzdFBh
Z2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkg
PT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgaWYgKG1f
aW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0g
cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdl
KTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJh
Y2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdlKTsKLQotICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdl
LT5pZGVudGlmaWVyKCksICp0aGlzKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5h
c3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpv
cGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3Qp
Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5k
KCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV91
bmRlclRlc3QgPSB1bmRlclRlc3Q7Ci0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBB
U1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIo
KSwgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVs
KCkpKTsKLQotICAgIEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKLSAgICBtX2lzQWN0aXZl
RnJvbnRlbmQgPSB0cnVlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmNvbm5lY3RGcm9udGVuZCgqdGhpcyk7Ci0KLSAgICBpZiAoIW1fdW5kZXJUZXN0KSB7Ci0g
ICAgICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKTsKLSAgICAg
ICAgbV9pc0F0dGFjaGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0gICAgICAgIG1fYXR0YWNo
bWVudFNpZGUgPSBzdGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKG1faXNBdHRh
Y2hlZCkpOwotCi0gICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobV9hdHRhY2htZW50U2lkZSkgewotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
Qm90dG9tOgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKLSAgICAgICAgICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRh
Y2hlZFJpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNl
IEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hl
ZCgpKTsKLQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0gICAgfQotCi0g
ICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBhdHRhY2hl
cyBzbyB0aGF0IGl0IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUgX1dLSW5zcGVj
dG9yIGxvYWRpbmcgaXRzIGZyb250ZW5kLgotICAgIG1faW5zcGVjdGVkUGFnZS0+dWlDbGllbnQo
KS5kaWRBdHRhY2hJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOwotCi0gICAgLy8g
QmFpbCBvdXQgaWYgdGhlIGNsaWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBmcm9tIHRoZSBkZWxl
Z2F0ZSBtZXRob2QuCi0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBtX3VuZGVyVGVz
dCA/IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDogV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpvcGVuKCkKLXsKLSAgICBpZiAobV91bmRlclRlc3QpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZXRGb3JT
Y29wZTxib29sPiBpc09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOwotICAgIG1faXNWaXNpYmxl
ID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKLQotICAgIGlmIChtX2lzQXR0YWNoZWQp
Ci0gICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7Ci0gICAgZWxzZQotICAgICAgICBwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kV2luZG93KCk7Ci0KLSAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpkaWRDbG9zZSgpCi17Ci0gICAgY2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOwotICAgIG1faXNQcm9maWxpbmdQ
YWdlID0gZmFsc2U7Ci0gICAgbV9zaG93TWVzc2FnZVNlbnQgPSBmYWxzZTsKLSAgICBtX2lnbm9y
ZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Ci0KLSAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZSht
X2luc3BlY3RvclBhZ2UpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0gICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50
aWZpZXIoKSk7Ci0KLSAgICBpZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7Ci0gICAgICAgIG1faXNB
Y3RpdmVGcm9udGVuZCA9IGZhbHNlOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotICAgIH0KLQotICAgIGlm
IChtX2lzQXR0YWNoZWQpCi0gICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci0KLSAgICAvLyBOdWxs
IG91dCBtX2luc3BlY3RvclBhZ2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28gdGhlIHZpZXdz
IGNhbiBiZSBjbGVhbmVkIHVwIGNvcnJlY3RseS4KLSAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxs
cHRyOwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0gICAgbV9jYW5BdHRhY2ggPSBmYWxz
ZTsKLSAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOwotCi0gICAgcGxhdGZvcm1DbG9zZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQotewotICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogYXV0b21hdGlv
blNlc3Npb24gPSBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmF1dG9t
YXRpb25TZXNzaW9uKCkpCi0gICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5pbnNwZWN0b3JGcm9u
dGVuZExvYWRlZCgqbV9pbnNwZWN0ZWRQYWdlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsIHRlbGxzIHVzIHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0bwotICAgIC8v
IGlnbm9yZSBpdCBvbmNlIGlmIHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRoaXMgYWxsb3dz
IHRoZSBJbnNwZWN0b3IgdG8gbGF0ZXIKLSAgICAvLyByZXF1ZXN0IHRvIGJlIGJyb3VnaHQgdG8g
dGhlIGZyb250IHdoZW4gYSBicmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVyIGFjdGlvbi4K
LSAgICBpZiAobV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCkgewotICAgICAgICBtX2lnbm9yZUZp
cnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAobV9pc1Zpc2libGUpCi0gICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Ci0gICAgZWxz
ZQotICAgICAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nSW5z
cGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotewotICAgIGJvb2wgcHJldmlvdXNDYW5BdHRhY2ggPSBt
X2NhbkF0dGFjaDsKLQotICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxh
YmxlKTsKLQotICAgIGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFjaCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCi0g
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
dERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKLQotICAgIHBsYXRmb3JtQXR0YWNo
QXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0g
ICAgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbykKLXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0
ZUluZm8pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2VsZWN0aW9uQ2hh
bmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgPSBhY3Rp
dmU7Ci0KLSAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7Ci0gICAgICAg
IG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOwotICAgICAgICBpZiAoIW1f
aXNWaXNpYmxlKQotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChhY3RpdmUpCi0gICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpOwotICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCi0gICAgICAgIGJyaW5nVG9Gcm9u
dCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5n
ZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3RpdmU7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVy
cmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQotewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5z
cGVjdGVkUGFnZS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKGVuYWJsZWQp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFp
bGFibGUpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKLSNlbmRpZgotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KQotewotICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwg
Zm9yY2VTYXZlQXMpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBlbmQoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIHBsYXRmb3Jt
QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6
c2hvdWxkT3BlbkF0dGFjaGVkKCkKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsKLX0KLQotLy8g
VW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJvdmlkZWQgaGVy
ZS4KLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShX
SU4pCi0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRy
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2lu
ZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3Nl
Rm9yQ3Jhc2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0
IENlcnRpZmljYXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVEaWFsb2cpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi11bnNpZ25l
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdG9yQmFzZVVSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5m
b0ZvckxvY2FsRGVidWdnYWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9S
TShXSU4pCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMWZk
ZmNhMWRmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNw
ZWN0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNpbmNsdWRlICJEZWJ1
Z2dhYmxlSW5mb0RhdGEuaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUg
IldLR2VvbWV0cnkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgotCi1PQkpDX0NMQVNTIE5TVVJMOwotT0JKQ19DTEFTUyBOU1ZpZXc7Ci1PQkpD
X0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0
ZXI7Ci1PQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0jZWxpZiBQTEFURk9S
TShXSU4pCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIENlcnRpZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFdlYkZyYW1lUHJveHk7Ci1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eUNsaWVudDsKLWNsYXNz
IFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlByZWZlcmVuY2VzOwotCi1lbnVtIGNsYXNzIEF0dGFj
aG1lbnRTaWRlIHsKLSAgICBCb3R0b20sCi0gICAgUmlnaHQsCi0gICAgTGVmdCwKLX07Ci0KLWNs
YXNzIFdlYkluc3BlY3RvclByb3h5Ci0gICAgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpJbnNwZWN0b3I+Ci0gICAgLCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKLSAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAotI2lmIFBMQVRGT1JN
KFdJTikKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIKLSNlbmRp
ZgotewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yUHJveHk+IGNyZWF0ZShX
ZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBXZWJJbnNwZWN0b3JQcm94eShpbnNwZWN0ZWRQYWdlKSk7Ci0gICAgfQotCi0gICAg
fldlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIC8v
IFB1YmxpYyBBUElzCi0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9Ci0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JQYWdlOyB9Ci0KLSAgICBib29sIGlzQ29ubmVj
dGVkKCkgY29uc3QgeyByZXR1cm4gISFtX2luc3BlY3RvclBhZ2U7IH0KLSAgICBib29sIGlzVmlz
aWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXNpYmxlOyB9Ci0gICAgYm9vbCBpc0Zyb250KCk7
Ci0KLSAgICB2b2lkIGNvbm5lY3QoKTsKLQotICAgIHZvaWQgc2hvdygpOwotICAgIHZvaWQgaGlk
ZSgpOwotICAgIHZvaWQgY2xvc2UoKTsKLSAgICB2b2lkIGNsb3NlRm9yQ3Jhc2goKTsKLSAgICB2
b2lkIHJlb3BlbigpOwotICAgIHZvaWQgcmVzZXRTdGF0ZSgpOwotCi0gICAgdm9pZCByZXNldCgp
OwotICAgIHZvaWQgdXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5Kik7Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgZW51bSBjbGFzcyBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB7IExv
Y2FsLCBSZW1vdGUgfTsKLSAgICBzdGF0aWMgUmV0YWluUHRyPE5TV2luZG93PiBjcmVhdGVGcm9u
dGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdldFR5cGUp
OwotCi0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OwotICAgIHZv
aWQgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgPSAwKTsKLSAgICB2b2lkIHdp
bmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgdm9pZCB3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdl
KCk7Ci0gICAgTlNXaW5kb3cqIGluc3BlY3RvcldpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1faW5z
cGVjdG9yV2luZG93LmdldCgpOyB9Ci0KLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlKCk7Ci0g
ICAgdm9pZCBjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpOwotCi0gICAg
dm9pZCBhdHRhY2htZW50Vmlld0RpZENoYW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3
Vmlldyk7Ci0gICAgdm9pZCBhdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpv
bGRXaW5kb3cpOwotICAgIHZvaWQgYXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRvdyAq
bmV3V2luZG93KTsKLQotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RL
KQotICAgIEd0a1dpZGdldCogaW5zcGVjdG9yVmlldygpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVj
dG9yVmlldzsgfTsKLSAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVj
dG9yUHJveHlDbGllbnQ+JiYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNob3dDb25zb2xlKCk7Ci0g
ICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJh
bWUoV2ViRnJhbWVQcm94eSopOwotCi0gICAgQXR0YWNobWVudFNpZGUgYXR0YWNobWVudFNpZGUo
KSBjb25zdCB7IHJldHVybiBtX2F0dGFjaG1lbnRTaWRlOyB9Ci0gICAgYm9vbCBpc0F0dGFjaGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0F0dGFjaGVkOyB9Ci0gICAgdm9pZCBhdHRhY2hSaWdodCgp
OwotICAgIHZvaWQgYXR0YWNoTGVmdCgpOwotICAgIHZvaWQgYXR0YWNoQm90dG9tKCk7Ci0gICAg
dm9pZCBhdHRhY2goQXR0YWNobWVudFNpZGUgPSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsKLSAg
ICB2b2lkIGRldGFjaCgpOwotCi0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCk7Ci0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKLQotICAg
IHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotCi0gICAgdm9p
ZCBzdGFydFdpbmRvd0RyYWcoKTsKLQotICAgIGJvb2wgaXNQcm9maWxpbmdQYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1Byb2ZpbGluZ1BhZ2U7IH0KLSAgICB2b2lkIHRvZ2dsZVBhZ2VQcm9maWxp
bmcoKTsKLQotICAgIGJvb2wgaXNFbGVtZW50U2VsZWN0aW9uQWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlOyB9Ci0gICAgdm9pZCB0b2dnbGVFbGVtZW50U2Vs
ZWN0aW9uKCk7Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV91bmRl
clRlc3Q7IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7
Ci0KLSAgICAvLyBQcm92aWRlZCBieSBwbGF0Zm9ybSBXZWJJbnNwZWN0b3JQcm94eSBpbXBsZW1l
bnRhdGlvbnMuCi0gICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JQYWdlVVJMKCk7Ci0gICAgc3Rh
dGljIFN0cmluZyBpbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIHN0YXRpYyBTdHJpbmcgaW5z
cGVjdG9yQmFzZVVSTCgpOwotICAgIHN0YXRpYyBib29sIGlzTWFpbk9yVGVzdEluc3BlY3RvclBh
Z2UoY29uc3QgVVJMJik7Ci0gICAgc3RhdGljIERlYnVnZ2FibGVJbmZvRGF0YSBpbmZvRm9yTG9j
YWxEZWJ1Z2dhYmxlKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdpbmRv
d1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2luZG93SGVpZ2h0Owot
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dXaWR0aDsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd0hlaWdodDsKLQotcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkqKTsKLQotICAgIHZvaWQgY3Jl
YXRlRnJvbnRlbmRQYWdlKCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8g
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOwotICAgIENvbm5lY3Rpb25UeXBlIGNv
bm5lY3Rpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29ubmVjdGlvblR5cGU6Okxv
Y2FsOyB9Ci0KLSAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtRGlk
Q2xvc2VGb3JDcmFzaCgpOwotICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLSAgICB2b2lk
IHBsYXRmb3JtSGlkZSgpOwotICAgIGJvb2wgcGxhdGZvcm1Jc0Zyb250KCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBwbGF0Zm9y
bUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB1bnNp
Z25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpOwotICAgIHVuc2lnbmVkIHBsYXRm
b3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXR0YWNoKCk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybURldGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93
V2lkdGgodW5zaWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwot
ICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2
b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
Y29udGVudCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBwbGF0Zm9ybUNhbkF0dGFj
aChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpOwotI2Vsc2UKLSAgICBib29sIHBsYXRmb3JtQ2Fu
QXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkgeyByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0
dGFjaDsgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yUHJveHkgbWVz
c2FnZXMKLSAgICB2b2lkIG9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNo
LCBib29sIHVuZGVyVGVzdCk7Ci0gICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpB
dHRhY2htZW50KTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCBmcm9udGVuZExvYWRlZCgpOwotICAgIHZvaWQgZGlkQ2xvc2UoKTsKLSAg
ICB2b2lkIGJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgYnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9u
dCgpOwotICAgIHZvaWQgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2b2lk
IGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzaG93Q2VydGlm
aWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0gICAgdm9pZCBlbGVtZW50
U2VsZWN0aW9uQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdl
ZChib29sKTsKLSAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShP
cHRpb25hbDxib29sPik7Ci0KLSAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
QXMpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCk7Ci0KLSAgICBib29sIGNhbkF0dGFjaCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fu
QXR0YWNoOyB9Ci0gICAgYm9vbCBzaG91bGRPcGVuQXR0YWNoZWQoKTsKLQotICAgIHZvaWQgb3Bl
bigpOwotCi0gICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Q7Ci0KLSAgICBXZWJQ
cmVmZXJlbmNlcyYgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3Q7Ci0KLSNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKLSAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRv
d1RpdGxlKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyB3bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSAg
ICBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICB2b2lkIHdpbmRvd1JlY2VpdmVkTWVz
c2FnZShIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAg
IFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0ZWRQYWdlIHsgbnVsbHB0ciB9OwotICAgIFdlYlBhZ2VQ
cm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9OwotCi0gICAgYm9vbCBtX3VuZGVyVGVz
dCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2lzQXR0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9jYW5BdHRhY2ggeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9pc1Byb2ZpbGluZ1BhZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG93TWVz
c2FnZVNlbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faXNPcGVuaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNBY3RpdmVGcm9udGVuZCB7
IGZhbHNlIH07Ci0KLSAgICBBdHRhY2htZW50U2lkZSBtX2F0dGFjaG1lbnRTaWRlIHtBdHRhY2ht
ZW50U2lkZTo6Qm90dG9tfTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8V0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLSAgICBS
ZXRhaW5QdHI8TlNXaW5kb3c+IG1faW5zcGVjdG9yV2luZG93OwotICAgIFJldGFpblB0cjxXS1dl
Ykluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7Ci0gICAg
UnVuTG9vcDo6VGltZXI8V2ViSW5zcGVjdG9yUHJveHk+IG1fY2xvc2VGcm9udGVuZEFmdGVySW5h
Y3Rpdml0eVRpbWVyOwotICAgIFN0cmluZyBtX3VybFN0cmluZzsKLSAgICBXZWJDb3JlOjpGbG9h
dFJlY3QgbV9zaGVldFJlY3Q7Ci0gICAgYm9vbCBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJl
Y3QgeyBmYWxzZSB9OwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJJbnNwZWN0b3JQcm94eUNsaWVudD4gbV9jbGllbnQ7Ci0gICAgR3RrV2lkZ2V0KiBtX2luc3Bl
Y3RvclZpZXcgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3RvcldpbmRvdyB7
IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1faGVhZGVyQmFyIHsgbnVsbHB0ciB9OwotICAg
IFN0cmluZyBtX2luc3BlY3RlZFVSTFN0cmluZzsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICBI
V05EIG1faW5zcGVjdGVkVmlld1dpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05EIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05EIG1faW5zcGVjdG9yVmll
d1dpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05EIG1faW5zcGVjdG9yRGV0YWNoV2luZG93IHsg
bnVsbHB0ciB9OwotICAgIFJlZlB0cjxXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7Ci0jZW5kaWYK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWJiNzc1NTNjNmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAg
LTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6
Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAgT3BlbkxvY2FsSW5zcGVj
dG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotICAgIFNldEZyb250
ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi0KLSAg
ICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkKLQotICAgIEZyb250ZW5kTG9h
ZGVkKCkKLSAgICBEaWRDbG9zZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLSAgICBCcmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCkKLSAgICBSZW9wZW4oKQotICAgIFJlc2V0U3RhdGUoKQotCi0gICAg
SW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJpbmcgdXJsU3RyaW5nKQotICAgIFNob3dDZXJ0aWZpY2F0
ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQotICAgIEVsZW1lbnRT
ZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQotICAgIFRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdl
ZChib29sIGFjdGl2ZSkKLSAgICBTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUo
T3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJp
bmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotICAgIEFw
cGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAgQXR0YWNoQm90dG9t
KCkKLSAgICBBdHRhY2hSaWdodCgpCi0gICAgQXR0YWNoTGVmdCgpCi0gICAgRGV0YWNoKCkKLQot
ICAgIEF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCi0KLSAgICBTZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi0gICAgU2V0QXR0YWNoZWRXaW5k
b3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLQotICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKLQotICAgIFN0YXJ0V2luZG93RHJhZygpCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2ZlYTE1ZWU2NTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxXZWJQYWdlUHJv
eHkqLCB1bnNpZ25lZD4gUGFnZUxldmVsTWFwOwotCi1zdGF0aWMgUGFnZUxldmVsTWFwJiBwYWdl
TGV2ZWxNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQYWdlTGV2ZWxNYXA+IG1h
cDsKLSAgICByZXR1cm4gbWFwOwotfQotCi11bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2Uo
V2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIGlmIChwYWdlKSB7Ci0gICAgICAgIGF1dG8gZmlu
ZFJlc3VsdCA9IHBhZ2VMZXZlbE1hcCgpLmZpbmQocGFnZSk7Ci0gICAgICAgIGlmIChmaW5kUmVz
dWx0ICE9IHBhZ2VMZXZlbE1hcCgpLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZpbmRSZXN1
bHQtPnZhbHVlICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotU3RyaW5nIGluc3Bl
Y3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiX19XZWJJbnNwZWN0b3JQYWdlR3JvdXBMZXZlbCIsIGluc3Bl
Y3RvckxldmVsRm9yUGFnZShwYWdlKSwgIl9fIik7Ci19Ci0KLXZvaWQgdHJhY2tJbnNwZWN0b3JQ
YWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQ
YWdlKQotewotICAgIHBhZ2VMZXZlbE1hcCgpLnNldChpbnNwZWN0b3JQYWdlLCBpbnNwZWN0b3JM
ZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSkpOwotfQotCi12b2lkIHVudHJhY2tJbnNwZWN0b3JQ
YWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSkKLXsKLSAgICBwYWdlTGV2ZWxNYXAoKS5y
ZW1vdmUoaW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXN0YXRpYyBXZWJQcm9jZXNzUG9vbCogc19tYWlu
SW5zcGVjdG9yUHJvY2Vzc1Bvb2w7Ci1zdGF0aWMgV2ViUHJvY2Vzc1Bvb2wqIHNfbmVzdGVkSW5z
cGVjdG9yUHJvY2Vzc1Bvb2w7Ci0KLVdlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9jZXNzUG9v
bCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCi17Ci0gICAgLy8gSGF2aW5nIG91ciBvd24gcHJv
Y2VzcyBwb29sIHJlbW92ZXMgdXMgZnJvbSB0aGUgbWFpbiBwcm9jZXNzIHBvb2wgYW5kCi0gICAg
Ly8gZ3VhcmFudGVlcyBubyBwcm9jZXNzIHNoYXJpbmcgZm9yIG91ciB1c2VyIGludGVyZmFjZS4K
LSAgICBXZWJQcm9jZXNzUG9vbComIHBvb2wgPSAoaW5zcGVjdGlvbkxldmVsID09IDEpID8gc19t
YWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgOiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sOwot
ICAgIGlmICghcG9vbCkgewotICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBBUEk6OlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIHBvb2wgPSAmV2ViUHJvY2Vz
c1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uLmdldCgpKS5sZWFrUmVmKCk7Ci0gICAgICAgIC8v
IERvIG5vdCBkZWxheSBwcm9jZXNzIGxhdW5jaCBmb3IgaW5zcGVjdG9yIHBhZ2VzIGFzIGluc3Bl
Y3RvciBwYWdlcyBkbyBub3Qga25vdyBob3cgdG8gdHJhbnNpdGlvbiBmcm9tIGEgdGVybWluYXRl
ZCBwcm9jZXNzLgotICAgICAgICBwb29sLT5kaXNhYmxlRGVsYXllZFdlYlByb2Nlc3NMYXVuY2go
KTsKLSAgICB9Ci0gICAgcmV0dXJuICpwb29sOwotfQotCi1ib29sIGlzSW5zcGVjdG9yUHJvY2Vz
c1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIHJldHVybiAoc19tYWlu
SW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnBy
b2Nlc3NQb29sKQotICAgICAgICB8fCAoc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCAmJiBz
X25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9jZXNzUG9vbCk7Ci19Ci0KLWJvb2wg
aXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gcGFn
ZUxldmVsTWFwKCkuY29udGFpbnMoJndlYlBhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxp
dGllcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOWVhNzU4OGNjLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7Ci0KLS8vIFRoZSBpbnNw
ZWN0b3IgcGFnZSBncm91cHMgYXJlIHVzZWQgdG8gZ2l2ZSBkaWZmZXJlbnQgcHJlZmVyZW5jZXMg
dG8gZWFjaAotLy8gaW5zcGVjdG9yIGxldmVsIGJ5IHNldHRpbmcgYSBwZXItbGV2ZWwgcGFnZSBn
cm91cCBpZGVudGlmaWVyLgotdW5zaWduZWQgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKFdlYlBhZ2VQ
cm94eSopOwotU3RyaW5nIGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKFdlYlBh
Z2VQcm94eSopOwotdm9pZCB0cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0
b3JQYWdlLCBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpOwotdm9pZCB1bnRyYWNrSW5zcGVj
dG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UpOwotCi1XZWJQcm9jZXNzUG9vbCYg
aW5zcGVjdG9yUHJvY2Vzc1Bvb2wodW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKTsKLWJvb2wgaXNJ
bnNwZWN0b3JQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpOwotYm9vbCBpc0luc3BlY3RvclBh
Z2UoV2ViUGFnZVByb3h5Jik7Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VEZWJ1Z2dhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViYmRmODdh
Y2UuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1
Z2dhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VEZWJ1Z2dhYmxlLmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLQotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotV2ViUGFnZURlYnVnZ2Fi
bGU6OldlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSkKLSAgICA6IG1fcGFnZShw
YWdlKQotewotfQotCi1TdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6Om5hbWUoKSBjb25zdAotewot
ICAgIGlmICghbV9uYW1lT3ZlcnJpZGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBtX25hbWVP
dmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLT50aXRsZSgpOwotfQot
Ci1TdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6OnVybCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Bh
Z2UubWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7
Ci0KLSAgICBTdHJpbmcgdXJsID0gbV9wYWdlLm1haW5GcmFtZSgpLT51cmwoKS5zdHJpbmcoKTsK
LSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6YmxhbmtVUkwoKS5z
dHJpbmcoKTsKLQotICAgIHJldHVybiB1cmw7Ci19Ci0KLWJvb2wgV2ViUGFnZURlYnVnZ2FibGU6
Omhhc0xvY2FsRGVidWdnZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKTsKLX0KLQotdm9pZCBXZWJQYWdlRGVidWdn
YWJsZTo6Y29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwsIGJvb2wgaXNBdXRvbWF0aWND
b25uZWN0aW9uLCBib29sIGltbWVkaWF0ZWx5UGF1c2UpCi17Ci0gICAgbV9wYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoY2hhbm5lbCwgaXNBdXRvbWF0aWNDb25uZWN0
aW9uLCBpbW1lZGlhdGVseVBhdXNlKTsKLX0KLQotdm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6ZGlz
Y29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCi17Ci0gICAgbV9wYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7Ci19Ci0KLXZvaWQgV2Vi
UGFnZURlYnVnZ2FibGU6OmRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpz
ZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKLXsKLSAgICBtX3BhZ2UuaW5zcGVjdG9yQ29u
dHJvbGxlcigpLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Ci19Ci0KLXZvaWQgV2ViUGFnZURl
YnVnZ2FibGU6OnNldE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgbV9u
YW1lT3ZlcnJpZGUgPSBuYW1lOwotICAgIHVwZGF0ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhmODQ4ZGUxMTZhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9SZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLWNsYXNz
IFdlYlBhZ2VEZWJ1Z2dhYmxlIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVj
dGlvblRhcmdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoV2ViUGFnZURlYnVnZ2FibGUpOwotcHVibGljOgotICAgIFdlYlBhZ2VEZWJ1
Z2dhYmxlKFdlYlBhZ2VQcm94eSYpOwotICAgIH5XZWJQYWdlRGVidWdnYWJsZSgpID0gZGVmYXVs
dDsKLQotICAgIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlIHR5cGUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdl
dDo6VHlwZTo6V2ViUGFnZTsgfQotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBmaW5hbDsKLSAg
ICBTdHJpbmcgdXJsKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBoYXNMb2NhbERlYnVnZ2VyKCkg
Y29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5
UGF1c2UgPSBmYWxzZSkgZmluYWw7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsJikgZmluYWw7Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3Rl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJv
b2wpIGZpbmFsOwotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWVPdmVycmlkZTsgfQotICAgIHZvaWQgc2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0
cmluZyYpOwotCi1wcml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAgIFN0cmlu
ZyBtX25hbWVPdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NPTlRST0xMQUJMRV9UQVJHRVQoV2ViS2l0OjpXZWJQYWdlRGVidWdn
YWJsZSwgV2ViUGFnZSk7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVlMjhiZjcxNjMuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJQcm92aXNp
b25hbFBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRCYXNlLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLXN0
YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0SUQoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zp
c2lvbmFsUGFnZSkKLXsKLSAgICByZXR1cm4gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJn
ZXRJRChwcm92aXNpb25hbFBhZ2Uud2ViUGFnZUlEKCkpOwotfQotCi1XZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiBwYWdl
KQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2Zyb250ZW5kUm91dGVyKEZyb250ZW5kUm91
dGVyOjpjcmVhdGUoKSkKLSAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShtX2Zyb250ZW5kUm91dGVyLmNvcHlSZWYoKSkpCi17Ci0gICAgYXV0byB0YXJn
ZXRBZ2VudCA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0QWdlbnQ+KG1fZnJvbnRlbmRSb3V0
ZXIuZ2V0KCksIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwotCi0gICAgbV90YXJnZXRBZ2Vu
dCA9IHRhcmdldEFnZW50LmdldCgpOwotCi0gICAgbV9hZ2VudHMuYXBwZW5kKFdURk1vdmUodGFy
Z2V0QWdlbnQpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5pdCgp
Ci17Ci0gICAgU3RyaW5nIHBhZ2VUYXJnZXRJZCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRv
VGFyZ2V0SUQobV9wYWdlLndlYlBhZ2VJRCgpKTsKLSAgICBjcmVhdGVJbnNwZWN0b3JUYXJnZXQo
cGFnZVRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2UpOwotfQot
Ci12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpwYWdlQ2xvc2VkKCkKLXsKLSAgICBk
aXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7Ci0KLSAgICBtX2FnZW50cy5kaXNjYXJkVmFsdWVzKCk7
Ci19Ci0KLWJvb2wgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0xvY2FsRnJvbnRlbmQo
KSBjb25zdAotewotICAgIHJldHVybiBtX2Zyb250ZW5kUm91dGVyLT5oYXNMb2NhbEZyb250ZW5k
KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVu
ZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgZnJvbnRlbmRDaGFubmVsLCBib29sLCBib29s
KQotewotICAgIGJvb2wgY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQgPSAhbV9mcm9udGVuZFJvdXRl
ci0+aGFzRnJvbnRlbmRzKCk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLT5jb25uZWN0RnJvbnRl
bmQoZnJvbnRlbmRDaGFubmVsKTsKLQotICAgIGlmIChjb25uZWN0aW5nRmlyc3RGcm9udGVuZCkK
LSAgICAgICAgbV9hZ2VudHMuZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKCZtX2Zyb250ZW5k
Um91dGVyLmdldCgpLCAmbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7Ci0KLSAgICBtX3BhZ2Uu
ZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVu
ZENvdW50KCkpOwotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgaWYgKGhhc0xv
Y2FsRnJvbnRlbmQoKSkKLSAgICAgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9u
RGlkQ2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlzY29ubmVjdEZyb250ZW5kKEZyb250ZW5kQ2hhbm5lbCYgZnJvbnRlbmRDaGFubmVsKQot
ewotICAgIG1fZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RGcm9udGVuZChmcm9udGVuZENoYW5u
ZWwpOwotCi0gICAgYm9vbCBkaXNjb25uZWN0aW5nTGFzdEZyb250ZW5kID0gIW1fZnJvbnRlbmRS
b3V0ZXItPmhhc0Zyb250ZW5kcygpOwotICAgIGlmIChkaXNjb25uZWN0aW5nTGFzdEZyb250ZW5k
KQotICAgICAgICBtX2FnZW50cy53aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25u
ZWN0UmVhc29uOjpJbnNwZWN0b3JEZXN0cm95ZWQpOwotCi0gICAgbV9wYWdlLmRpZENoYW5nZUlu
c3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsK
LQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIGlmIChkaXNjb25uZWN0aW5nTGFz
dEZyb250ZW5kKQotICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRD
aGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNjb25uZWN0QWxsRnJvbnRlbmRzKCkKLXsKLSAgICAvLyBGSVhNRTogSGFuZGxlIGEgbG9jYWwg
aW5zcGVjdG9yIGNsaWVudC4KLQotICAgIGlmICghbV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRl
bmRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5vdGlmeSBhZ2VudHMgZmlyc3QsIHNp
bmNlIHRoZXkgbWF5IG5lZWQgdG8gdXNlIEluc3BlY3RvckNsaWVudC4KLSAgICBtX2FnZW50cy53
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uOjpJbnNwZWN0ZWRU
YXJnZXREZXN0cm95ZWQpOwotCi0gICAgLy8gRGlzY29ubmVjdCBhbnkgcmVtYWluaW5nIHJlbW90
ZSBmcm9udGVuZHMuCi0gICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEFsbEZyb250ZW5k
cygpOwotCi0gICAgbV9wYWdlLmRpZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9u
dGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpOwot
I2VuZGlmCi19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpc3BhdGNoTWVz
c2FnZUZyb21Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+ZGlzcGF0Y2gobWVzc2FnZSk7Ci19Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluZGljYXRpbmco
Ym9vbCBpbmRpY2F0aW5nKQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1fcGFn
ZS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOwotI2Vsc2UKLSAgICBpZiAoaW5kaWNhdGluZykK
LSAgICAgICAgbV9wYWdlLnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Ci0gICAgZWxzZQotICAg
ICAgICBtX3BhZ2UuaGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKLSNlbmRpZgotfQotI2VuZGlm
Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUluc3BlY3RvclRhcmdl
dChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUg
dHlwZSkKLXsKLSAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShtX3Bh
Z2UsIHRhcmdldElkLCB0eXBlKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKLXsKLSAg
ICBhdXRvIGl0ID0gbV90YXJnZXRzLmZpbmQodGFyZ2V0SWQpOwotICAgIGlmIChpdCA9PSBtX3Rh
cmdldHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXRE
ZXN0cm95ZWQoKml0LT52YWx1ZSk7Ci0gICAgbV90YXJnZXRzLnJlbW92ZShpdCk7Ci19Ci0KLXZv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9u
dGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgbV90YXJnZXRBZ2VudC0+c2VuZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZCh0YXJnZXRJ
ZCwgbWVzc2FnZSk7Ci19Ci0KLWJvb2wgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNob3Vs
ZFBhdXNlTG9hZGluZyhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdl
KSBjb25zdAotewotICAgIGlmICghbV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQo
Z2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci0gICAgQVNTRVJUKHRhcmdldCk7Ci0gICAg
cmV0dXJuIHRhcmdldC0+aXNQYXVzZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0Q29udGludWVMb2FkaW5nQ2FsbGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdl
UHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2sp
Ci17Ci0gICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldChnZXRUYXJnZXRJRChwcm92aXNp
b25hbFBhZ2UpKTsKLSAgICBBU1NFUlQodGFyZ2V0KTsKLSAgICB0YXJnZXQtPnNldFJlc3VtZUNh
bGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiBw
cm92aXNpb25hbFBhZ2UpCi17Ci0gICAgYWRkVGFyZ2V0KEluc3BlY3RvclRhcmdldFByb3h5Ojpj
cmVhdGUocHJvdmlzaW9uYWxQYWdlLCBnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2UpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6d2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlz
aW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKLXsKLSAgICBkZXN0cm95SW5zcGVjdG9y
VGFyZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIgb2xkV2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBuZXdXZWJQ
YWdlSUQpCi17Ci0gICAgU3RyaW5nIG9sZElEID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9U
YXJnZXRJRChvbGRXZWJQYWdlSUQpOwotICAgIFN0cmluZyBuZXdJRCA9IFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQ6OnRvVGFyZ2V0SUQobmV3V2ViUGFnZUlEKTsKLSAgICBhdXRvIG5ld1RhcmdldCA9
IG1fdGFyZ2V0cy50YWtlKG5ld0lEKTsKLSAgICBBU1NFUlQobmV3VGFyZ2V0KTsKLSAgICBuZXdU
YXJnZXQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7Ci0gICAgbV90YXJnZXRBZ2VudC0+
ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQob2xkSUQsIG5ld0lEKTsKLQotICAgIC8vIFdlJ3Zl
IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBvbGQgcGFnZSBhbmQgd2lsbCBub3QgcmVjZWl2ZSBhbnkg
bWVzc2FnZSBmcm9tIGl0LCBzbwotICAgIC8vIHdlIGRlc3Ryb3kgZXZlcnl0aGluZyBidXQgdGhl
IG5ldyB0YXJnZXQgaGVyZS4KLSAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIw
MjkzNz4gZG8gbm90IGRlc3Ryb3kgdGFyZ2V0cyB0aGF0IGJlbG9uZyB0byB0aGUgY29tbWl0dGVk
IHBhZ2UuCi0gICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX3RhcmdldHMudmFsdWVzKCkpCi0gICAg
ICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqdGFyZ2V0KTsKLSAgICBtX3Rhcmdl
dHMuY2xlYXIoKTsKLSAgICBtX3RhcmdldHMuc2V0KG5ld1RhcmdldC0+aWRlbnRpZmllcigpLCBX
VEZNb3ZlKG5ld1RhcmdldCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjphZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmIHRhcmdl
dCkKLXsKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKCp0YXJnZXQpOwotICAgIG1f
dGFyZ2V0cy5zZXQodGFyZ2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUodGFyZ2V0KSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDc4Y2FlZGYwYzBjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5Lmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VJ
ZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci1jbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKLWNsYXNzIEZyb250ZW5kQ2hh
bm5lbDsKLWNsYXNzIEZyb250ZW5kUm91dGVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdlUHJv
eHkmKTsKLQotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgcGFnZUNsb3NlZCgpOwotCi0gICAg
Ym9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGNvbm5lY3RGcm9udGVu
ZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNJbnNwZWN0aW9u
ID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKLSAgICB2b2lkIGRpc2Nv
bm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwotICAgIHZvaWQgZGlz
Y29ubmVjdEFsbEZyb250ZW5kcygpOwotCi0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKLSNlbmRpZgotCi0gICAgdm9pZCBj
cmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQot
ICAgIGJvb2wgc2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5Jikg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92aXNp
b25hbFBhZ2VQcm94eSYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgZGlk
Q3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7Ci0gICAgdm9pZCB3
aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYpOwot
ICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
IG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlEKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFy
Z2V0UHJveHk+JiYpOwotCi0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAgUmVmPEluc3Bl
Y3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7Ci0gICAgUmVmPEluc3BlY3Rv
cjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci0gICAgSW5zcGVjdG9y
OjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWQ1MGRj
Mjg2Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCi0KLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCi0jaW5j
bHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9SZW1vdGVJbnNwZWN0b3JVdGlscy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVi
dWdnYWJsZVR5cGUuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3Rl
SW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGll
bnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3Rl
SW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIHVp
bnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCi0gICAgICAgIDogbV9wcm94
eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCi0gICAgICAgICwgbV9pbnNwZWN0
b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQotICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5l
Y3Rpb25JRCkKLSAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQotICAgIHsKLSAgICAgICAg
bV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgIH0KLQotICAgIH5SZW1vdGVJbnNwZWN0b3JQ
cm94eSgpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAg
ICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWQoKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMg
c2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KLSAg
ICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJOjpEZWJ1
Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7Ci0gICAgICAg
IGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlOjpXZWJQYWdlKTsKLSAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJ
bmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOwotICAgIH0KLQot
ICAgIHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zaG93KCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBzZXRUYXJnZXROYW1lKGNvbnN0IENTdHJpbmcmIG5hbWUpCi0gICAgewotI2lm
IFBMQVRGT1JNKEdUSykKLSAgICAgICAgbV9wcm94eS0+dXBkYXRlV2luZG93VGl0bGUobmFtZSk7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2luc3BlY3Rv
ckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCwg
bWVzc2FnZSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVuZChtX2Nv
bm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlZjxSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKLSAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQm
IG1faW5zcGVjdG9yQ2xpZW50OwotICAgIHVpbnQ2NF90IG1fY29ubmVjdGlvbklEOwotICAgIHVp
bnQ2NF90IG1fdGFyZ2V0SUQ7Ci19OwotCi1jb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdl
SGFuZGxlcnMmIFJlbW90ZUluc3BlY3RvckNsaWVudDo6bWVzc2FnZUhhbmRsZXJzKCkKLXsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhh
bmRsZXJzPiBtZXNzYWdlSGFuZGxlcnMgPSBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxl
cnMoewotICAgIHsgIkRpZENsb3NlIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rp
b246Ok1lc3NhZ2VDYWxsYmFjaz4geyB7IH0sCi0gICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24m
LCBHVmFyaWFudCosIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBhdXRvJiBjbGll
bnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAg
ICAgICAgICAgY2xpZW50LmNvbm5lY3Rpb25EaWRDbG9zZSgpOwotICAgICAgICB9fQotICAgIH0s
Ci0gICAgeyAiRGlkU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29j
a2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIoYXkpIiwKLSAgICAgICAgW10oU29j
a2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkg
ewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3Rv
ckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGJhY2tl
bmRDb21tYW5kc1ZhcmlhbnQ7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMs
ICIoQGF5KSIsICZiYWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigpKTsKLSAgICAgICAgICAg
IGNsaWVudC5zZXRCYWNrZW5kQ29tbWFuZHMoZ192YXJpYW50X2dldF9ieXRlc3RyaW5nKGJhY2tl
bmRDb21tYW5kc1ZhcmlhbnQuZ2V0KCkpKTsKLSAgICAgICAgfX0KLSAgICB9LAotICAgIHsgIlNl
dFRhcmdldExpc3QiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2Fn
ZUNhbGxiYWNrPiB7ICIodGEodHNzc2IpKSIsCi0gICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24m
LCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAg
IGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2Vy
RGF0YSk7Ci0gICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsKLSAgICAgICAgICAgIEdV
bmlxdWVPdXRQdHI8R1ZhcmlhbnRJdGVyPiBpdGVyOwotICAgICAgICAgICAgZ192YXJpYW50X2dl
dChwYXJhbWV0ZXJzLCAiKHRhKHRzc3NiKSkiLCAmY29ubmVjdGlvbklELCAmaXRlci5vdXRQdHIo
KSk7Ci0gICAgICAgICAgICBzaXplX3QgdGFyZ2V0Q291bnQgPSBnX3ZhcmlhbnRfaXRlcl9uX2No
aWxkcmVuKGl0ZXIuZ2V0KCkpOwotICAgICAgICAgICAgVmVjdG9yPFJlbW90ZUluc3BlY3RvckNs
aWVudDo6VGFyZ2V0PiB0YXJnZXRMaXN0OwotICAgICAgICAgICAgdGFyZ2V0TGlzdC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHRhcmdldENvdW50KTsKLSAgICAgICAgICAgIGd1aW50NjQgdGFyZ2V0
SUQ7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB0eXBlOwotICAgICAgICAgICAgY29uc3QgY2hh
ciogbmFtZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybDsKLSAgICAgICAgICAgIGdib29s
ZWFuIGhhc0xvY2FsRGVidWdnZXI7Ci0gICAgICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJf
bG9vcChpdGVyLmdldCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwgJnR5cGUsICZuYW1lLCAm
dXJsLCAmaGFzTG9jYWxEZWJ1Z2dlcikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWdfc3RyY21w
MCh0eXBlLCAiV2ViIikgfHwgIWdfc3RyY21wMCh0eXBlLCAiSmF2YVNjcmlwdCIpKQotICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFwcGVuZCh7IHRhcmdldElELCB0eXBl
LCBuYW1lLCB1cmwgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGllbnQuc2V0VGFy
Z2V0TGlzdChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOwotICAgICAgICB9fQot
ICAgIH0sCi0gICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgc3RkOjpwYWlyPENTdHJpbmcs
IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0cykiLAotICAgICAgICBb
XShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJE
YXRhKSB7Ci0gICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5z
cGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9u
SUQsIHRhcmdldElEOwotICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKLSAgICAgICAg
ICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCZzKSIsICZjb25uZWN0aW9uSUQsICZ0
YXJnZXRJRCwgJm1lc3NhZ2UpOwotICAgICAgICAgICAgY2xpZW50LnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKLSAgICAgICAgfX0KLSAgICB9
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG1lc3NhZ2VIYW5kbGVyczsKLX0KLQotUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5z
aWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQotICAgIDogbV9o
b3N0QW5kUG9ydChTdHJpbmc6OmZyb21VVEY4KGFkZHJlc3MpICsgJzonICsgU3RyaW5nOjpudW1i
ZXIocG9ydCkpCi0gICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQotICAgICwgbV9jYW5jZWxsYWJs
ZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCi17Ci0gICAgR1JlZlB0cjxHU29ja2V0
Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsK
LSAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENsaWVudC5n
ZXQoKSwgbV9ob3N0QW5kUG9ydC51dGY4KCkuZGF0YSgpLCAwLCBtX2NhbmNlbGxhYmxlLmdldCgp
LAotICAgICAgICBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9p
bnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgICAgICAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFk
b3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChHX1NPQ0tFVF9D
TElFTlQob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAgICAgIGlm
IChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FO
Q0VMTEVEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhdXRvKiBjbGll
bnQgPSBzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7Ci0gICAg
ICAgICAgICBpZiAoY29ubmVjdGlvbikKLSAgICAgICAgICAgICAgICBjbGllbnQtPnNldHVwQ29u
bmVjdGlvbihTb2NrZXRDb25uZWN0aW9uOjpjcmVhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgbWVz
c2FnZUhhbmRsZXJzKCksIGNsaWVudCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmFpbGVkIHRvIGNvbm5l
Y3QgdG8gaW5zcGVjdG9yIHNlcnZlcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgICAg
ICAgICAgY2xpZW50LT5tX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKmNsaWVudCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgfSwgdGhpcyk7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNsaWVudDo6flJl
bW90ZUluc3BlY3RvckNsaWVudCgpCi17Ci0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5j
ZWxsYWJsZS5nZXQoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXR1cENv
bm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKLXsKLSAgICBtX3Nv
Y2tldENvbm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOwotICAgIG1fc29ja2V0Q29ubmVj
dGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwSW5zcGVjdG9yQ2xpZW50IiwgZ192YXJpYW50X25ldygi
KEBheSkiLCBnX3ZhcmlhbnRfbmV3X2J5dGVzdHJpbmcoSW5zcGVjdG9yOjpiYWNrZW5kQ29tbWFu
ZHNIYXNoKCkuZGF0YSgpKSkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0
QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKLXsKLSAgICBpZiAo
IWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7Ci0gICAgICAgIG1fYmFj
a2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoYmFja2VuZENvbW1h
bmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7Ci0gICAgbV9iYWNrZW5k
Q29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIgKyBiYXNlNjREYXRh
OwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkRpZENsb3NlKCkK
LXsKLSAgICBtX3RhcmdldHMuY2xlYXIoKTsKLSAgICBtX2luc3BlY3RvclByb3h5TWFwLmNsZWFy
KCk7Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICBtX29ic2VydmVyLmNv
bm5lY3Rpb25DbG9zZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6
aW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotewotICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtlX3Bh
aXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElE
XSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclByb3h5PigqdGhp
cywgY29ubmVjdGlvbklELCB0YXJnZXRJRCk7Ci0gICAgfSk7Ci0gICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgewotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRN
ZXNzYWdlKCJTZXR1cCIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9uSUQsIHRhcmdl
dElEKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOwotfQotCi12b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3QgY29u
bmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNzYWdlVG9CYWNrZW5k
IiwgZ192YXJpYW50X25ldygiKHR0cykiLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdl
LnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNsb3Nl
RnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCi17
Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUHJveHlNYXAuY29udGFpbnMoc3RkOjptYWtlX3BhaXIo
Y29ubmVjdGlvbklELCB0YXJnZXRJRCkpKTsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRN
ZXNzYWdlKCJGcm9udGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rp
b25JRCwgdGFyZ2V0SUQpKTsKLSAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1h
a2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgVmVjdG9yPFRh
cmdldD4mJiB0YXJnZXRMaXN0KQotewotICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVt
b3ZlIHRoZW0uCi0gICAgVmVjdG9yPHVpbnQ2NF90LCA0PiB0YXJnZXRzVG9SZW1vdmU7Ci0gICAg
Zm9yIChhdXRvJiBjb25uZWN0aW9uVGFyZ2V0UGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5
cygpKSB7Ci0gICAgICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0UGFpci5maXJzdCAhPSBjb25uZWN0
aW9uSUQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKLSAgICAg
ICAgICAgIGlmICh0YXJnZXQuaWQgPT0gY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKSB7Ci0g
ICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoY29ubmVjdGlvblRhcmdldFBh
aXIpLT5zZXRUYXJnZXROYW1lKHRhcmdldC5uYW1lKTsKLSAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5hcHBlbmQo
Y29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKTsKLSAgICB9Ci0gICAgZm9yIChhdXRvIHRhcmdl
dElEIDogdGFyZ2V0c1RvUmVtb3ZlKQotICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92
ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0KLSAgICBtX3Rhcmdl
dHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7Ci0gICAgbV9vYnNlcnZl
ci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRf
dCB0YXJnZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBhdXRvIHByb3h5ID0gbV9p
bnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJ
RCkpOwotICAgIEFTU0VSVChwcm94eSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAgICAgcmV0dXJu
OwotICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nOjpmcm9tVVRGOChtZXNz
YWdlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGli
L1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRl
ZTAyY2U1ZDYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HQ2FuY2VsbGFibGUgR0NhbmNl
bGxhYmxlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OwotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7Ci1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgewotcHVibGljOgotICAg
IHZpcnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci19
OwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIq
IGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJik7Ci0gICAg
flJlbW90ZUluc3BlY3RvckNsaWVudCgpOwotCi0gICAgc3RydWN0IFRhcmdldCB7Ci0gICAgcHVi
bGljOgotICAgICAgICB1aW50NjRfdCBpZDsKLSAgICAgICAgQ1N0cmluZyB0eXBlOwotICAgICAg
ICBDU3RyaW5nIG5hbWU7Ci0gICAgICAgIENTdHJpbmcgdXJsOwotICAgIH07Ci0KLSAgICBjb25z
dCBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4mIHRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX3RhcmdldHM7IH0KLSAgICBjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9ob3N0QW5kUG9ydDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1h
bmRzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KLQotICAgIHZv
aWQgaW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKTsKLSAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0
X3QgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQo
dWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCk7Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGNvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyYgbWVzc2Fn
ZUhhbmRsZXJzKCk7Ci0gICAgdm9pZCBzZXR1cENvbm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rp
b24+JiYpOwotICAgIHZvaWQgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0KLSAgICB2b2lkIHNldEJh
Y2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzZXRUYXJnZXRMaXN0KHVpbnQ2
NF90IGNvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4mJik7Ci0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29u
c3QgY2hhciopOwotCi0gICAgU3RyaW5nIG1faG9zdEFuZFBvcnQ7Ci0gICAgU3RyaW5nIG1fYmFj
a2VuZENvbW1hbmRzVVJMOwotICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVy
OwotICAgIFJlZlB0cjxTb2NrZXRDb25uZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247Ci0gICAg
R1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgSGFzaE1hcDx1aW50NjRf
dCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50
NjRfdCwgdWludDY0X3Q+LCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yUHJveHk+PiBt
X2luc3BlY3RvclByb3h5TWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU5OWM0NDY1NzY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5OwotCi1jbGFz
cyBXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViSW5z
cGVjdG9yUHJveHlDbGllbnQoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCBib29sIG9wZW5XaW5k
b3coV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKFdl
Ykluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2Vi
SW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoV2ViSW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBhdHRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGRldGFjaChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlQXR0YWNoZWRIZWlnaHQoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBoZWlnaHQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQ
cm94eSYsIHVuc2lnbmVkIHdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0
dGFjaEF2YWlsYWJpbGl0eShXZWJJbnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjZmRlMzQ5YmI3MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSA8Z25zQGdub21lLm9yZz4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgot
I2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKLSNpbmNsdWRlICJXS0FycmF5LmgiCi0j
aW5jbHVkZSAiV0tDb250ZXh0TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJXS011dGFibGVBcnJheS5o
IgotI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgotI2luY2x1ZGUgIldlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0
aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB2b2lkIGluc3BlY3RvclZpZXdEZXN0cm95
ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJv
eHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPih1c2Vy
RGF0YSk7Ci0KLSAgICAvLyBJbmZvcm0gV2ViUHJvY2VzcyBhYm91dCB3ZWJpbnNwZWN0b3IgY2xv
c3VyZS4gTm90IGRvaW5nIHNvLAotICAgIC8vIHJlc3VsdHMgaW4gZmFpbHVyZSBvZiBzdWJzZXF1
ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9yLgotICAgIGluc3BlY3RvclByb3h5LT5jbG9z
ZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmIGNsaWVudCkKLXsKLSAgICBtX2NsaWVudCA9
IFdURk1vdmUoY2xpZW50KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5z
cGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRv
dyk7Ci0gICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RP
Ul9XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCAhbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0
eSgpID8gbV9pbnNwZWN0ZWRVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIpOwotfQot
Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXS1BhZ2VS
ZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmlu
Z1JlZiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxv
bmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVk
VXNhZ2UsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZCBsb25n
IGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnREYXRhYmFzZVVzYWdlICogMS4yNSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0g
c3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJ
bmZvKSk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLSAgICB3ZWJJbnNwZWN0b3JQ
cm94eS0+Y2xvc2VGb3JDcmFzaCgpOwotfQotCi1zdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYg
bmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVm
LCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgLy8gQWxsb3cgbm9u
LW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgotICAgIEFQSTo6RnJhbWVJbmZvKiBz
b3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsK
LSAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7Ci0g
ICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKLSAgICBB
U1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKLQotICAg
IC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCi0gICAgaWYgKFdl
Ykluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkp
KSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5n
IGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgotICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9y
ZSgpOwotCi0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2Uu
Ci0gICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RG
TW92ZShyZXF1ZXN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bv
c2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tBcnJheVJlZiBwcm9wb3NlZE1lbnVSZWYsIFdL
QXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVzdFJlc3VsdFJlZiwgV0tUeXBlUmVmLCBjb25z
dCB2b2lkKikKLXsKLSAgICBXS011dGFibGVBcnJheVJlZiBtZW51SXRlbXMgPSBXS011dGFibGVB
cnJheUNyZWF0ZSgpOwotCi0gICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUocHJvcG9z
ZWRNZW51UmVmKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgY29udGV4dE1lbnVJdGVtID0gc3RhdGljX2Nhc3Q8
V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChwcm9wb3NlZE1lbnVS
ZWYsIGkpKTsKLSAgICAgICAgc3dpdGNoIChXS0NvbnRleHRNZW51SXRlbUdldFRhZyhjb250ZXh0
TWVudUl0ZW0pKSB7Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJ
bk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJ
bk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJ
bk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJ
bk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExp
bmtUb0Rpc2s6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFn
ZVRvRGlzazoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0ZW1zLCBjb250ZXh0TWVudUl0ZW0pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqbmV3TWVudVJlZiA9IG1lbnVJ
dGVtczsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVh
dGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotICAgIEFT
U0VSVCghbV9pbnNwZWN0b3JWaWV3KTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVm
ZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBF
TkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0
IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRp
bmdzLgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwot
ICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxl
ZCh0cnVlKTsKLSNlbmRpZgotICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZs
YWdzKHsKLSAgICB9KTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRl
KGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwot
Ci0gICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNy
ZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9y
UHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBH
VEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIo
KSkpOwotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JW
aWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcpKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKGlu
c3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKLQotICAgIFdLUGFnZVVJQ2xpZW50VjIgdWlD
bGllbnQgPSB7Ci0gICAgICAgIHsgMiwgdGhpcyB9LAotICAgICAgICBudWxscHRyLCAvLyBjcmVh
dGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hv
d1BhZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdlCi0gICAgICAgIG51bGxwdHIsIC8v
IHRha2VGb2N1cwotICAgICAgICBudWxscHRyLCAvLyBmb2N1cwotICAgICAgICBudWxscHRyLCAv
LyB1bmZvY3VzCi0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAotICAgICAg
ICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQotICAgICAgICBudWxscHRyLCAvLyBy
dW5KYXZhU2NyaXB0UHJvbXB0Ci0gICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKLSAg
ICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVz
ZVdpdGhWMAotICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtl
eUV2ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKLSAgICAg
ICAgbnVsbHB0ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNl
dFRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJWaXNpYmxlCi0g
ICAgICAgIG51bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8v
IGlzU3RhdHVzQmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNCYXJWaXNp
YmxlCi0gICAgICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCi0gICAgICAgIG51bGxwdHIsIC8v
IHNldFJlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZSwKLSAgICAg
ICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbAotICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3Ci0gICAg
ICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwKLSAgICAgICAgZXhjZWVkZWREYXRhYmFzZVF1
b3RhLAotICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwsCi0gICAgICAgIG51bGxwdHIs
IC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKLSAgICAgICAg
bnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0Ci0gICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdo
dAotICAgICAgICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCi0gICAgICAgIG51bGxwdHIsIC8vIGRy
YXdGb290ZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRGcmFtZQotICAgICAgICBudWxscHRy
LCAvLyBydW5Nb2RhbAotICAgICAgICBudWxscHRyLCAvLyB1bnVzZWQKLSAgICAgICAgbnVsbHB0
ciwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgotICAgICAgICBudWxscHRyLCAv
LyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Ci0gICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZVBh
Z2UKLSAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKLSAgICAgICAg
bnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QK
LSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJl
Y2F0ZWRGb3JVc2VXaXRoVjEKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCi0g
ICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgotICAgICAgICBudWxscHRyLCAvLyB1
bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICB9OwotCi0gICAgV0tQYWdlTmF2aWdh
dGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQgPSB7Ci0gICAgICAgIHsgMCwgdGhpcyB9LAot
ICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAotICAgICAgICBudWxscHRy
LCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFy
dFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRDb21t
aXROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RmluaXNoRG9jdW1lbnRMb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5h
dmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UK
LSAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UK
LSAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAotICAgICAgICBudWxscHRyLCAvLyBjb3B5V2Vi
Q3J5cHRvTWFzdGVyS2V5Ci0KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9u
R2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0
ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAotICAgIH07Ci0KLSAgICBX
S1BhZ2VDb250ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51Q2xpZW50ID0gewotICAgICAgICB7
IDMsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9z
ZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gY3VzdG9t
Q29udGV4dE1lbnVJdGVtU2VsZWN0ZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gY29udGV4dE1lbnVE
aXNtaXNzZWQKLSAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51LAotICAgICAg
ICBudWxscHRyLCAvLyBzaG93Q29udGV4dE1lbnUKLSAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNv
bnRleHRNZW51Ci0gICAgfTsKLQotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdl
YmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2luc3BlY3RvclZp
ZXcpKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0KLSAgICBXS1BhZ2VTZXRQYWdlVUlD
bGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVudC5iYXNlKTsKLSAgICBXS1BhZ2VT
ZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25D
bGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJKGlu
c3BlY3RvclBhZ2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7Ci0KLSAgICByZXR1cm4gaW5z
cGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVG
cm9udGVuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5vcGVuV2lu
ZG93KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBpbnNwZWN0ZWRW
aWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoaW5zcGVjdGVkUGFnZSgpLT52aWV3
V2lkZ2V0KCkpOwotICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2lu
ZG93KGluc3BlY3RlZFZpZXdQYXJlbnQpKQotICAgICAgICBpbnNwZWN0ZWRWaWV3UGFyZW50ID0g
bnVsbHB0cjsKLQotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIG1faW5zcGVj
dG9yV2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KGluc3BlY3RlZFZpZXdQYXJlbnQg
PyBHVEtfV0lORE9XKGluc3BlY3RlZFZpZXdQYXJlbnQpIDogbnVsbHB0cik7Ci0gICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9y
Vmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci0KLSAgICBpZiAo
IW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgdXBkYXRlSW5zcGVjdG9y
V2luZG93VGl0bGUoKTsKLQotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1Qo
bV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9y
V2luZG93KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV9pbnNwZWN0b3JX
aW5kb3cpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yVmlldykgewotICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0g
ICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xp
ZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2xvc2UoKnRoaXMpOwotCi0gICAgaWYgKG1faW5z
cGVjdG9yV2luZG93KSB7Ci0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3Rvcldp
bmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KCkKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQo
KQotewotICAgIGlmIChtX2lzT3BlbmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
Y2xpZW50ICYmIG1fY2xpZW50LT5icmluZ1RvRnJvbnQoKnRoaXMpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5z
cGVjdG9yVmlldyk7Ci0gICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdp
bmRvdyhwYXJlbnQpKQotICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJl
bnQpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIEd0a1dpZGdldCogcGFyZW50
ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpZiAoV2Vi
Q29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIHJl
dHVybiBtX2lzVmlzaWJsZSAmJiBndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBhcmVu
dCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1faW5z
cGVjdGVkVVJMU3RyaW5nID0gdXJsOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGll
bnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMsIHVybCk7Ci0KLSAgICBpZiAobV9pbnNwZWN0
b3JXaW5kb3cpCi0gICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3Ry
aW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL01h
aW4uaHRtbCIpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQ
YWdlVVJMKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2lu
c3BlY3Rvci9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbCIpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIHJldHVybiBTdHJpbmcoInJlc291
cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvIik7Ci19Ci0KLURlYnVn
Z2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgp
Ci17Ci0gICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hv
dWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KLSAgICBy
ZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIHJldHVy
biBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dp
ZGdldCgpKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93V2lkdGgoKQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRf
d2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGlu
c3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KSB7Ci0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0
b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
bV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAg
fQotCi0gICAgLy8gU2V0IGEgZGVmYXVsdCBzaXplcyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRT
aXplID0gMzAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0
aCA9IDc1MDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0
ID0gMjUwOwotCi0gICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJv
dHRvbSkgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1p
bihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUlu
c3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZh
dWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0dGFjaCgqdGhpcykpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19C
QVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBtX2F0
dGFjaG1lbnRTaWRlKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIGlmICgh
aW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldzsK
LSAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVudC0+ZGV0YWNoKCp0aGlzKSkgewotICAgICAg
ICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9pc0F0dGFjaGVkIGlzIHRydWUsIGJ1dCBpdCBj
b3VsZCBjYWxsZWQgYmVmb3JlCi0gICAgICAgIC8vIHRoZSBpbnNwZWN0b3IgaXMgb3BlbmVkIGlm
IHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2VkIHF1aWNrbHkuIFNvLAotICAgICAgICAvLyB3
ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQuCi0gICAgICAgIGlmIChHdGtXaWRnZXQqIHBh
cmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtX2luc3BlY3RvclZpZXcpKQotICAgICAgICAg
ICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBtX2luc3BlY3Rv
clZpZXcpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2li
bGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCi0g
ICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2lu
ZG93LgotICAgIGlmICghbV9pc1Zpc2libGUpIHsKLSAgICAgICAgLy8gVGhlIGluc3BlY3RvciB2
aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhlIHdl
YiBwcm9jZXNzIHRvIGNsb3NlIHRoZQotICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBjYXNl
LCBzaW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQq
PihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmll
dyA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBvcGVuKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRh
Y2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3Bl
Y3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dp
ZGdldCgpKSwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlmICghbV9pc0F0
dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKCp0aGlzLCB3aWR0aCk7Ci0gICAgd2Via2l0
V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNw
ZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
c3RhdGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9i
amVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIEdG
aWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7Ci0gICAgaWYgKCFnX2ZpbGVfcmVwbGFj
ZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+
KHVzZXJEYXRhKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZp
bGUpKTsKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OkRpZFNhdmUocGF0aC5nZXQoKSksIHBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVE
aWFsb2cpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7Ci0KLSAgICBHdGtX
aWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7
Ci0gICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4g
ZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxl
IiwKLSAgICAgICAgR1RLX1dJTkRPVyhwYXJlbnQpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9T
QVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7Ci0KLSAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9
IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKLSAgICBndGtfZmlsZV9jaG9vc2VyX3Nl
dF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOwotCi0gICAgLy8gU29t
ZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkg
c2NoZW1lLCBzdWNoCi0gICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBv
biB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCi0gICAgLy8gdW5mb3J0dW5hdGVs
eS4KLSAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOwotICAgIC8vIFN0cmlwIGxlYWRp
bmcgLyBjaGFyYWN0ZXIuCi0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNo
b29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYg
KGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAh
PSBHVEtfUkVTUE9OU0VfQUNDRVBUKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Y2hh
cj4gZGF0YVZlY3RvcjsKLSAgICBDU3RyaW5nIGRhdGFTdHJpbmc7Ci0gICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3Rvciwg
QmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0
YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRhU3RyaW5nID0g
Y29udGVudC51dGY4KCk7Ci0KLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNO
dWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOwotICAgIHNpemVf
dCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgp
IDogZGF0YVZlY3Rvci5zaXplKCk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKLSAgICBHVW5pcXVlUHRyPGNo
YXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKLSAgICBnX2ZpbGVfcmVwbGFj
ZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBm
YWxzZSwKLSAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRy
LCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxl
KQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFj
aEF2YWlsYWJpbGl0eSgqdGhpcywgYXZhaWxhYmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVj
dG9yV2luZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0
b3JXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDkwZjBlNmYzMC4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3Bl
Y3RvcldpbmRvdy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCi0KLSNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dsaWIvR1VuaXF1ZVB0ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1zdHJ1Y3Qg
X1dlYktpdEluc3BlY3RvcldpbmRvdyB7Ci0gICAgR3RrV2luZG93IHBhcmVudDsKLQotICAgIEd0
a1dpZGdldCogaGVhZGVyQmFyOwotfTsKLQotc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dD
bGFzcyB7Ci0gICAgR3RrV2luZG93Q2xhc3MgcGFyZW50OwotfTsKLQotR19ERUZJTkVfVFlQRShX
ZWJLaXRJbnNwZWN0b3JXaW5kb3csIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93LCBHVEtfVFlQRV9X
SU5ET1cpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2NsYXNzX2luaXQo
V2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MqKQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
aW5zcGVjdG9yX3dpbmRvd19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93KQotewot
ICAgIHdpbmRvdy0+aGVhZGVyQmFyID0gZ3RrX2hlYWRlcl9iYXJfbmV3KCk7Ci0gICAgZ3RrX2hl
YWRlcl9iYXJfc2V0X3RpdGxlKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgXygi
V2ViIEluc3BlY3RvciIpKTsKLSAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0
b24oR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBUUlVFKTsKLSAgICBndGtfd2lu
ZG93X3NldF90aXRsZWJhcihHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+aGVhZGVyQmFyKTsK
LSAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93LT5oZWFkZXJCYXIpOwotfQotCi1HdGtXaWRnZXQq
IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhHdGtXaW5kb3cqIHBhcmVudCkKLXsKLSAgICByZXR1
cm4gR1RLX1dJREdFVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywg
InR5cGUiLCBHVEtfV0lORE9XX1RPUExFVkVMLCAidHJhbnNpZW50LWZvciIsIHBhcmVudCwKLSAg
ICAgICAgImRlZmF1bHQtd2lkdGgiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dp
ZHRoLCAiZGVmYXVsdC1oZWlnaHQiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hl
aWdodCwgbnVsbHB0cikpOwotfQotCi12b2lkIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRp
dGxlKFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93LCBjb25zdCBjaGFyKiBzdWJ0aXRsZSkK
LXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKHdpbmRv
dykpOwotCi0gICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3N1YnRpdGxlKEdUS19IRUFERVJfQkFSKHdp
bmRvdy0+aGVhZGVyQmFyKSwgc3VidGl0bGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlYmRjMjhkMTA5Zi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLUdfQkVHSU5fREVDTFMK
LQotI2RlZmluZSBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XICAgICAgICAgICAgKHdlYmtp
dF9pbnNwZWN0b3Jfd2luZG93X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9JTlNQRUNUT1Jf
V0lORE9XKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIFdlYktpdEluc3BlY3RvcldpbmRvdykpCi0j
ZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQot
I2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBX
ZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1Jf
V0lORE9XX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJ
TkRPV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgV2ViS2l0SW5zcGVjdG9y
V2luZG93OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzIFdlYktp
dEluc3BlY3RvcldpbmRvd0NsYXNzOwotCi1HVHlwZSB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19n
ZXRfdHlwZSh2b2lkKTsKLQotR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3Rr
V2luZG93KiBwYXJlbnQpOwotdm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShX
ZWJLaXRJbnNwZWN0b3JXaW5kb3cqLCBjb25zdCBjaGFyKiBzdWJ0aXRsZSk7Ci0KLUdfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZmJhNjk1ZTZiYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29nbml6ZXIuaD4K
LQotQGludGVyZmFjZSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplciA6IFVJ
R2VzdHVyZVJlY29nbml6ZXIKLS0gKENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJVmlldyAqKXZp
ZXc7Ci1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjdmZTdiY2NkYi4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNp
bXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29nbml6ZXJTdWJjbGFzcy5oPgotI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgotCi1AaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2Vz
dHVyZVJlY29nbml6ZXIgewotICAgIFJldGFpblB0cjxVSVRvdWNoPiBfdG91Y2g7Ci19Ci0KLS0g
KENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJVmlldyAqKXZpZXcKLXsKLSAgICByZXR1cm4gW190
b3VjaCBsb2NhdGlvbkluVmlldzp2aWV3XTsKLX0KLQotLSAodm9pZClfcHJvY2Vzc1RvdWNoZXM6
KE5TU2V0ICopdG91Y2hlcyBzdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKW5ld1N0YXRl
Ci17Ci0gICAgQVNTRVJUKF90b3VjaCk7Ci0gICAgaWYgKFt0b3VjaGVzIGNvbnRhaW5zT2JqZWN0
Ol90b3VjaC5nZXQoKV0pCi0gICAgICAgIHNlbGYuc3RhdGUgPSBuZXdTdGF0ZTsKLX0KLQotLSAo
dm9pZCl0b3VjaGVzQmVnYW46KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKill
dmVudAotewotICAgIGlmIChzZWxmLnN0YXRlICE9IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBv
c3NpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIV90b3VjaCk7Ci0gICAgX3Rv
dWNoID0gW3RvdWNoZXMgYW55T2JqZWN0XTsKLQotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0
b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuXTsKLX0KLQotLSAodm9p
ZCl0b3VjaGVzTW92ZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVu
dAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUNoYW5nZWRdOwotfQotCi0tICh2b2lkKXRvdWNoZXNFbmRlZDooTlNTZXQg
Kil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3NlbGYgX3Byb2Nl
c3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWRdOwot
fQotCi0tICh2b2lkKXRvdWNoZXNDYW5jZWxsZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6
KFVJRXZlbnQgKilldmVudAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0
YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZF07Ci19Ci0KLS0gKHZvaWQpcmVz
ZXQKLXsKLSAgICBfdG91Y2ggPSBuaWw7Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlN
YWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYmRlYjVmNmQwLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQot
I2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiUmVt
b3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKLSNp
bXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlv
bkFjdGlvbi5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2ltcG9y
dCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgPFNl
Y3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJpdHlJ
bnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNh
dGVJbmZvLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotQGludGVyZmFjZSBXS1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dEZWxl
Z2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7Ci0gICAgV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyCi0KLS0gKE5TUmVjdCl3aW5kb3c6KE5T
V2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5n
UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBy
ZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgp
LCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAgIHJldHVybiBy
ZWN0OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAg
X2luc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOwotfQotCi0tIChCT09MKWluc3BlY3Rv
clZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIHJldHVybiBfaW5zcGVjdG9y
UHJveHktPmlzVW5kZXJUZXN0KCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6d2ViVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5nZXQo
KS53ZWJWaWV3OwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbV9vYmpDQWRhcHRl
ciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxsb2Nd
IGluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOwotCi0gICAgbV9pbnNwZWN0
b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRX
aXRoSW5zcGVjdGVkUGFnZTpudWxscHRyXSk7Ci0gICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBz
ZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgIG1fd2luZG93ID0gV2ViSW5z
cGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdlYkluc3BlY3Rv
clByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlKTsKLSAgICBbbV93aW5kb3cgc2V0
RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0gICAgW21fd2luZG93IHNldEZyYW1lQXV0
b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JXaW5kb3dGcmFtZSJdOwotCi0gICAgTlNW
aWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgpLmNvbnRlbnRWaWV3OwotICAgIFt3ZWJW
aWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRzXTsKLSAgICBbY29udGVudFZpZXcgYWRk
U3Vidmlldzp3ZWJWaWV3KCldOwotCi0gICAgcmV0dXJuIHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICBbbV93aW5k
b3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21fd2luZG93IGNsb3NlXTsKLSAgICAgICAg
bV93aW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlldykgewotICAg
ICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIG1f
aW5zcGVjdG9yVmlldyA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmpDQWRhcHRlcikKLSAg
ICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAgICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVV
c2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3NhdmVOYW1lXV07Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBbbV93aW5k
b3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLSAgICBbbV93aW5kb3cgbWFrZUZpcnN0UmVz
cG9uZGVyOndlYlZpZXcoKV07Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIC8v
IEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFz
dWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOwotICAgIGlm
ICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3
IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAgZm9yY2VTYXZl
RGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKLSAg
ICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWNlc3Nhcnkg
Zm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dl
c3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OwotCi0gICAgYXV0byBz
YXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJUKGFjdHVhbFVS
TCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJM
Q29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5z
aXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBh
dG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW2NvbnRlbnRDb3B5
IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxV
UkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0gICAg
fTsKLQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0
Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFu
ZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKLSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdW
YWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2
ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQK
LSAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwg
dXNlIHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFs
IGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlz
RmlsZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5
RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0KLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVy
ID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJl
c3BvbnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0
ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0g
ICAgfTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2luZG93LmdldCgp
IDogW05TQXBwIGtleVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3BhbmVsIGJl
Z2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1
bk1vZGFsXSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBw
ZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17
Ci0gICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCi0KLSAgICBB
U1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIFJldGFpblB0cjxOU1VS
TD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJM
KTsKLSAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25m
aXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxVUkwpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBm
aWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKLSAg
ICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRl
bnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbaGFuZGxl
IGNsb3NlRmlsZV07Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJWaWV3
KCktPl9wYWdlLmdldCgpOwotICAgIGluc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVT
dHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgd2ViVmlldygpLT5f
cGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIFtbTlNX
b3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnVy
bF1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0
aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBB
U1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWluUHRyPFNGQ2Vy
dGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRl
UGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIEFTU0VSVChtX3dpbmRvdyk7Ci0jaWYgSEFWRShT
RUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0
Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9y
Ok5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBz
aG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZv
cldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpO
VUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNh
dGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKLSNlbmRpZgotCi0gICAg
Ly8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlz
cGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVo
YW5kLgotICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNh
dGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxh
eVRydXN0OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsK
LSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107Ci0gICAgW2NlcnRp
ZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwOGJkMDhmZjlkNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2ltcG9ydCA8V2ViS2l0L1dL
Rm91bmRhdGlvbi5oPgotI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+Ci0KLSNpZiBQTEFURk9STShN
QUMpCi0KLU9CSkNfQ0xBU1MgV0tXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNz
IFdlYlBhZ2VQcm94eTsKLX0KLQotQHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZTsKLQotTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KLQotQGludGVyZmFjZSBXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIDogTlNPYmplY3QKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBXS1dlYlZpZXcgKndlYlZpZXc7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaykg
aWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEluc3BlY3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktpdDo6V2ViUGFn
ZVByb3h5PilpbnNwZWN0ZWRQYWdlOwotCi0rIChCT09MKXZpZXdJc0luc3BlY3RvcldlYlZpZXc6
KE5TVmlldyAqKXZpZXc7Ci0KLUBlbmQKLQotQHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAq
KWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXI7Ci0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVU
b1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7Ci0tICh2b2lkKWluc3BlY3RvclZpZXdDb250
cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXI7Ci1AZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORAotCi0jZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDkyNjNlMGZkNmUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAg
LTEsMjcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2lt
cG9ydCAiQVBJTmF2aWdhdGlvbi5oIgotI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgotI2ltcG9y
dCAiV0tGcmFtZUluZm8uaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCi0jaW1w
b3J0ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRl
LmgiCi0jaW1wb3J0ICJXS09wZW5QYW5lbFBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgIldLUHJlZmVy
ZW5jZXNQcml2YXRlLmgiCi0jaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRp
b25Qcml2YXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0jaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgotCi1AaW50
ZXJmYWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKCkgPFdLVUlEZWxlZ2F0ZSwgV0tOYXZp
Z2F0aW9uRGVsZWdhdGUsIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+Ci1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHsKLSAgICBOYWtlZFB0cjxX
ZWJLaXQ6OldlYlBhZ2VQcm94eT4gX2luc3BlY3RlZFBhZ2U7Ci0gICAgUmV0YWluUHRyPFdLSW5z
cGVjdG9yV0tXZWJWaWV3PiBfd2ViVmlldzsKLSAgICBXZWFrT2JqQ1B0cjxpZCA8V0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPj4gX2RlbGVnYXRlOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4p
aW5zcGVjdGVkUGFnZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgLy8gVGhlIChsb2NhbCkgaW5zcGVjdGVkIHBhZ2UgaXMgbmls
IGlmIHRoZSBjb250cm9sbGVyIGlzIGhvc3RpbmcgYSBSZW1vdGUgV2ViIEluc3BlY3RvciB2aWV3
LgotICAgIF9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAoX3dlYlZpZXcpIHsKLSAgICAgICAg
W193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW193ZWJWaWV3IHNldE5hdmln
YXRpb25EZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbX3dlYlZpZXcgc2V0SW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgX3dlYlZpZXcgPSBuaWw7Ci0gICAgfQotCi0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRl
bGVnYXRlPilkZWxlZ2F0ZQotewotICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2Vk
KCk7Ci19Ci0KLS0gKFdLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICAvLyBDb25zdHJ1Y3QgbGF6
aWx5IHNvIHRoZSBjbGllbnQgY2FuIHNldCB0aGUgZGVsZWdhdGUgYmVmb3JlIHRoZSBXZWJWaWV3
IGlzIGNyZWF0ZWQuCi0gICAgaWYgKCFfd2ViVmlldykgewotICAgICAgICBOU1JlY3QgaW5pdGlh
bEZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0
aWFsV2luZG93V2lkdGgsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dI
ZWlnaHQpOwotICAgICAgICBfd2ViVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvcldLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTppbml0aWFsRnJhbWUgY29uZmlndXJhdGlvbjpbc2VsZiBj
b25maWd1cmF0aW9uXV0pOwotICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsK
LSAgICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAg
W193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOnNlbGZdOwotICAgICAgICBb
X3dlYlZpZXcgX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0czpOT107Ci0gICAg
ICAgIFtfd2ViVmlldyBfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTpZRVNdOwotICAgICAgICBbX3dl
YlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWln
aHRTaXphYmxlXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gX3dlYlZpZXcuZ2V0KCk7Ci19Ci0KLS0g
KHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+
KWRlbGVnYXRlCi17Ci0gICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0gKFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCi17Ci0gICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLQotICAg
IFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJl
bmNlczsKLSAgICBwcmVmZXJlbmNlcy5fYWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzID0gWUVT
OwotICAgIFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJM
czpZRVNdOwotICAgIHByZWZlcmVuY2VzLl9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBfV0tTdG9y
YWdlQmxvY2tpbmdQb2xpY3lBbGxvd0FsbDsKLSAgICBwcmVmZXJlbmNlcy5famF2YVNjcmlwdFJ1
bnRpbWVGbGFncyA9IDA7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVy
cyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNo
YW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLl9kZXZlbG9wZXJFeHRyYXNFbmFibGVk
ID0gWUVTOwotICAgIHByZWZlcmVuY2VzLl9sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xl
RW5hYmxlZCA9IFlFUzsKLSNlbmRpZgotCi0gICAgcHJlZmVyZW5jZXMuX2RpYWdub3N0aWNMb2dn
aW5nRW5hYmxlZCA9IFlFUzsKLQotICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0
b3JJc1VuZGVyVGVzdDopXSkgewotICAgICAgICBpZiAoW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OnNlbGZdKSB7Ci0gICAgICAgICAgICBwcmVm
ZXJlbmNlcy5faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBOTzsKLSAgICAg
ICAgICAgIHByZWZlcmVuY2VzLl9wYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCA9IE5POwotICAgICAgICB9Ci0gICAgfQotCi0gICAgW2NvbmZpZ3VyYXRpb24gc2V0
UHJvY2Vzc1Bvb2w6d3JhcHBlcihXZWJLaXQ6Omluc3BlY3RvclByb2Nlc3NQb29sKFdlYktpdDo6
aW5zcGVjdG9yTGV2ZWxGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKSkpXTsKLSAgICBbY29uZmlndXJh
dGlvbiBfc2V0R3JvdXBJZGVudGlmaWVyOldlYktpdDo6aW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRp
ZmllckZvclBhZ2UoX2luc3BlY3RlZFBhZ2UpXTsKLQotICAgIHJldHVybiBjb25maWd1cmF0aW9u
LmF1dG9yZWxlYXNlKCk7Ci19Ci0KLSsgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmlldzooTlNW
aWV3ICopdmlldwotewotICAgIHJldHVybiBbdmlldyBpc0tpbmRPZkNsYXNzOltXS0luc3BlY3Rv
cldLV2ViVmlldyBjbGFzc11dOwotfQotCi0vLyBNQVJLOiBXS1VJRGVsZWdhdGUgbWV0aG9kcwot
Ci0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGdldFdpbmRvd0ZyYW1lV2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShDR1JlY3QpKWNvbXBsZXRpb25IYW5kbGVyCi17
Ci0gICAgaWYgKCFfd2ViVmlldy5nZXQoKS53aW5kb3cpCi0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENHUmVjdFplcm8pOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTlNS
ZWN0VG9DR1JlY3QoW3dlYlZpZXcgZnJhbWVdKSk7Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgc2V0V2luZG93RnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIGlm
ICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3dlYlZp
ZXcuZ2V0KCkud2luZG93IHNldEZyYW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUpIGRpc3BsYXk6
WUVTXTsKLX0KLQotLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bk9wZW5Q
YW5lbFdpdGhQYXJhbWV0ZXJzOihXS09wZW5QYW5lbFBhcmFtZXRlcnMgKilwYXJhbWV0ZXJzIGlu
aXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKE5TQXJyYXk8TlNVUkwgKj4gKlVSTHMpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAg
TlNPcGVuUGFuZWwgKm9wZW5QYW5lbCA9IFtOU09wZW5QYW5lbCBvcGVuUGFuZWxdOwotICAgIG9w
ZW5QYW5lbC5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHBhcmFtZXRlcnMuYWxsb3dzTXVsdGlw
bGVTZWxlY3Rpb247Ci0KLSAgICBhdXRvIHJlcG9ydFNlbGVjdGVkRmlsZXMgPSBeKE5TSW50ZWdl
ciByZXN1bHQpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSykKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG9wZW5QYW5lbC5VUkxzKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICB9OwotCi0gICAgaWYg
KF93ZWJWaWV3LmdldCgpLndpbmRvdykKLSAgICAgICAgW29wZW5QYW5lbCBiZWdpblNoZWV0TW9k
YWxGb3JXaW5kb3c6X3dlYlZpZXcuZ2V0KCkud2luZG93IGNvbXBsZXRpb25IYW5kbGVyOnJlcG9y
dFNlbGVjdGVkRmlsZXNdOwotICAgIGVsc2UKLSAgICAgICAgcmVwb3J0U2VsZWN0ZWRGaWxlcyhb
b3BlblBhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOihXS1NlY3VyaXR5
T3JpZ2luICopc2VjdXJpdHlPcmlnaW4gY3VycmVudFF1b3RhOih1bnNpZ25lZCBsb25nIGxvbmcp
Y3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJl
bnRPcmlnaW5Vc2FnZSBjdXJyZW50RGF0YWJhc2VVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWN1
cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpZXhwZWN0ZWRVc2Fn
ZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkp
ZGVjaXNpb25IYW5kbGVyCi17Ci0gICAgZGVjaXNpb25IYW5kbGVyKHN0ZDo6bWF4PHVuc2lnbmVk
IGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudFVzYWdlICogMS4yNSkpOwotfQotCi0t
IChOU01lbnUgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjb250ZXh0TWVudTooTlNN
ZW51ICopbWVudSBmb3JFbGVtZW50OihfV0tDb250ZXh0TWVudUVsZW1lbnRJbmZvICopZWxlbWVu
dAotewotICAgIGZvciAoTlNJbnRlZ2VyIGkgPSBtZW51Lm51bWJlck9mSXRlbXMgLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICBOU01lbnVJdGVtICppdGVtID0gW21lbnUgaXRlbUF0SW5kZXg6
aV07Ci0gICAgICAgIHN3aXRjaCAoaXRlbS50YWcpIHsKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgotICAgICAgICBjYXNlIGtXS0NvbnRl
eHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgotICAgICAgICBjYXNlIGtXS0NvbnRl
eHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgotICAgICAgICAgICAgW21lbnUgcmVtb3Zl
SXRlbUF0SW5kZXg6aV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBtZW51OwotfQotCi0vLyBNQVJLOiBXS05hdmlnYXRpb25EZWxlZ2F0ZSBtZXRo
b2RzCi0KLS0gKHZvaWQpd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlOihXS1dl
YlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
ckRpZENyYXNoOildKQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9yRGlkQ3Jhc2g6c2VsZl07Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25B
Y3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKLXsKLSAgICAvLyBBbGxvdyBub24t
bWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgaWYgKCFuYXZpZ2F0aW9uQWN0
aW9uLnRhcmdldEZyYW1lLmlzTWFpbkZyYW1lKSB7Ci0gICAgICAgIGRlY2lzaW9uSGFuZGxlcihX
S05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgotICAgIGlm
IChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKG5h
dmlnYXRpb25BY3Rpb24ucmVxdWVzdC5VUkwpKSB7Ci0gICAgICAgIGRlY2lzaW9uSGFuZGxlcihX
S05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZS4KLSAgICBkZWNpc2lvbkhhbmRsZXIoV0tO
YXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKLSAgICAKLSAgICAvLyBBbmQgaW5zdGVhZCBs
b2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICBpZiAoX2luc3BlY3RlZFBhZ2UpCi0g
ICAgICAgIF9pbnNwZWN0ZWRQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uQWN0aW9uLnJlcXVl
c3QpOwotfQotCi0vLyBNQVJLOiBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIG1ldGhvZHMK
LQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tXZWJWaWV3
ICopd2ViVmlldwotewotICAgIGlmICghX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIE9wdGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlvbnM7Ci0g
ICAgaWYgKFdlYktpdDo6bGlua2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RX
aXRoRXhwaXJlZE9ubHlSZWxvYWRCZWhhdmlvcikpCi0gICAgICAgIHJlbG9hZE9wdGlvbnMuYWRk
KFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOwotCi0gICAgX2luc3BlY3RlZFBh
Z2UtPnJlbG9hZChyZWxvYWRPcHRpb25zKTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZp
ZXdSZWxvYWRGcm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAg
ICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfaW5zcGVjdGVk
UGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RnJvbU9yaWdpbik7Ci19Ci0KLS0g
KHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcg
d2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBpZiAoISFfZGVs
ZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3Rv
clZpZXdDb250cm9sbGVyOndpbGxNb3ZlVG9XaW5kb3c6KV0pCi0gICAgICAgIFtfZGVsZWdhdGUg
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107
Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihXS0luc3Bl
Y3RvcldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVy
RGlkTW92ZVRvV2luZG93OildKQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250
cm9sbGVyRGlkTW92ZVRvV2luZG93OnNlbGZdOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNw
ZWN0b3JXS1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTdlNzdjZmU3Zi4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9y
V0tXZWJWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLQotI2lmIFBMQVRG
T1JNKE1BQykKLQotQHByb3RvY29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci0KLUBp
bnRlcmZhY2UgV0tJbnNwZWN0b3JXS1dlYlZpZXcgOiBXS1dlYlZpZXcKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4gaW5zcGVjdG9y
V0tXZWJWaWV3RGVsZWdhdGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlCi1AcmVxdWlyZWQKLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihX
S0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7Ci0tICh2b2lkKWluc3BlY3RvcldLV2ViVmll
d1JlbG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKLS0gKHZv
aWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2ls
bE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7Ci0tICh2b2lkKWluc3BlY3RvcldL
V2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Owot
QGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YmZlZjRhMDFiYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEs
ODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJ
bnNwZWN0b3JXS1dlYlZpZXcuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiV0tJ
bnNwZWN0b3JQcml2YXRlTWFjLmgiCi0jaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KLQotQGlt
cGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yV0tXZWJWaWV3IHsKLSAgICBXZWFrT2JqQ1B0cjxpZCA8
V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4+IF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZTsKLX0KLQotLSAoTlNSZWN0KV9vcGFxdWVSZWN0Rm9yV2luZG93TW92ZVdoZW5JblRpdGxlYmFy
Ci17Ci0gICAgLy8gVGhpcyBjb252aW5jZXMgQXBwS2l0IHRvIGFsbG93IHdpbmRvdyBtb3ZlcyB3
aGVuIGNsaWNraW5nIGFueXdoZXJlIGluIHRoZSB0aXRsZWJhciAodG9wIDIycHQpCi0gICAgLy8g
d2hlbiB0aGlzIHZpZXcncyBjb250ZW50cyBjb3ZlciB0aGUgZW50aXJlIHdpbmRvdydzIGNvbnRl
bnRzLCBpbmNsdWRpbmcgdGhlIHRpdGxlYmFyLgotICAgIHJldHVybiBOU1plcm9SZWN0OwotfQot
Ci0tIChOU0ludGVnZXIpdGFnCi17Ci0gICAgcmV0dXJuIFdLSW5zcGVjdG9yVmlld1RhZzsKLX0K
LQotLSAoaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+KWluc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZS5nZXRB
dXRvcmVsZWFzZWQoKTsKLX0KLQotLSAodm9pZClzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZTooaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgX2lu
c3BlY3RvcldLV2ViVmlld0RlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0gKElCQWN0aW9uKXJl
bG9hZDooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUg
aW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOnNlbGZdOwotfQotCi0tIChJQkFjdGlvbilyZWxvYWRG
cm9tT3JpZ2luOihpZClzZW5kZXIKLXsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOnNlbGZdOwotfQotCi0tICh2
b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIFtz
dXBlciB2aWV3V2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOwotICAgIFtzZWxmLmluc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlldzpzZWxmIHdpbGxNb3ZlVG9XaW5k
b3c6bmV3V2luZG93XTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Ci17Ci0gICAg
W3N1cGVyIHZpZXdEaWRNb3ZlVG9XaW5kb3ddOwotICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzpzZWxmXTsKLX0KLQot
QGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
ZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJJ
bnNwZWN0b3JQcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlNzI4
ZDQzNWMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJJ
bnNwZWN0b3JQcm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkluc3BlY3RvclBy
b3h5LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0
ZU1hYy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgotI2ltcG9ydCAi
V0tWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0
ICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKLSNp
bXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50ZXJuYWwuaCIK
LSNpbXBvcnQgIl9XS0luc3BlY3RvcldpbmRvdy5oIgotI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZh
Y2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+Ci0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNl
cnRpZmljYXRlVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNp
bXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgotI2ltcG9ydCA8
V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4K
LQotc3RhdGljIGNvbnN0IE5TVUludGVnZXIgd2luZG93U3R5bGVNYXNrID0gTlNXaW5kb3dTdHls
ZU1hc2tUaXRsZWQgfCBOU1dpbmRvd1N0eWxlTWFza0Nsb3NhYmxlIHwgTlNXaW5kb3dTdHlsZU1h
c2tNaW5pYXR1cml6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrUmVzaXphYmxlIHwgTlNXaW5kb3dT
dHlsZU1hc2tGdWxsU2l6ZUNvbnRlbnRWaWV3OwotCi0vLyBUaGUgdGltZSB3ZSBrZWVwIG91ciBX
ZWJWaWV3IGFsaXZlIGJlZm9yZSBjbG9zaW5nIGl0IGFuZCBpdHMgcHJvY2Vzcy4KLS8vIFJldXNp
bmcgdGhlIFdlYlZpZXcgaW1wcm92ZXMgc3RhcnQgdXAgdGltZSBmb3IgcGVvcGxlIHRoYXQganVt
cCBpbiBhbmQgb3V0IG9mIHRoZSBJbnNwZWN0b3IuCi1zdGF0aWMgY29uc3QgU2Vjb25kcyB3ZWJW
aWV3Q2xvc2VUaW1lb3V0IHsgMV9taW4gfTsKLQotc3RhdGljIHZvaWQqIGtXaW5kb3dDb250ZW50
TGF5b3V0T2JzZXJ2ZXJDb250ZXh0ID0gJmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250
ZXh0OwotCi1AaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciAoKSA8TlNX
aW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPgotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eSopaW5zcGVjdG9yUHJveHk7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0KLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciB7Ci0gICAgV2Vi
S2l0OjpXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotCi0tIChXS0luc3Bl
Y3RvclJlZilpbnNwZWN0b3JSZWYKLXsKLSAgICByZXR1cm4gdG9BUEkoX2luc3BlY3RvclByb3h5
KTsKLX0KLQotLSAoX1dLSW5zcGVjdG9yICopaW5zcGVjdG9yCi17Ci0gICAgaWYgKF9pbnNwZWN0
b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIoKl9pbnNwZWN0b3JQcm94eSk7Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJv
eHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5Ci17Ci0gICAgQVNT
RVJUX0FSRyhpbnNwZWN0b3JQcm94eSwgaW5zcGVjdG9yUHJveHkpOwotCi0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBVbnJldGFp
bmVkIHRvIGF2b2lkIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIF9pbnNwZWN0b3JQcm94eSA9IGlu
c3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0
ZQotewotICAgIF9pbnNwZWN0b3JQcm94eSA9IG51bGxwdHI7Ci19Ci0KLS0gKE5TUmVjdCl3aW5k
b3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0
IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAg
ICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhl
aWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAgIHJl
dHVybiByZWN0OwotfQotCi0tICh2b2lkKXdpbmRvd0RpZE1vdmU6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3Bl
Y3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd0Rp
ZFJlc2l6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3Bl
Y3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdl
KCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQ
cm94eS0+Y2xvc2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxTY3JlZW46KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkK
LSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Ci19
Ci0KLS0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3Rv
clByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVj
dGVkVmlld0ZyYW1lRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewot
ICAgIC8vIFJlc2l6aW5nIHRoZSB2aWV3cyB3aGlsZSBpbnNpZGUgdGhpcyBub3RpZmljYXRpb24g
Y2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgd2hlbiBlbnRlcmluZwotICAgIC8vIG9yIGV4aXRpbmcg
ZnVsbCBzY3JlZW4uIFRvIGF2b2lkIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIHRoZSB3b3JrIGFm
dGVyIGEgZGVsYXkuIFdlIG9ubHkKLSAgICAvLyBkZXBlbmQgb24gdGhpcyBmb3IgZW5mb3JjaW5n
IHRoZSBoZWlnaHQgY29uc3RyYWludHMsIHNvIGEgc21hbGwgZGVsYXkgaXNuJ3QgdGVycmlibGUu
IE1vc3QKLSAgICAvLyBvZiB0aGUgdGltZSB0aGUgdmlld3Mgd2lsbCBhbHJlYWR5IGhhdmUgdGhl
IGNvcnJlY3QgZnJhbWVzIGJlY2F1c2Ugb2YgYXV0b3Jlc2l6aW5nIG1hc2tzLgotCi0gICAgZGlz
cGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IF57Ci0gICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgICAgICBfaW5zcGVjdG9y
UHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwotICAgIH0pOwotfQotCi0tICh2
b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDoo
aWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VLZXksIGlkPiAq
KWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dAotewotICAgIGlmIChjb250ZXh0ICE9IGtX
aW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgIFtzdXBlciBvYnNl
cnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggb2ZPYmplY3Q6b2JqZWN0IGNoYW5nZTpjaGFuZ2Ug
Y29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TV2luZG93
ICp3aW5kb3cgPSBvYmplY3Q7Ci0gICAgQVNTRVJUKFt3aW5kb3cgaXNLaW5kT2ZDbGFzczpbTlNX
aW5kb3cgY2xhc3NdXSk7Ci0gICAgaWYgKHdpbmRvdy5pbkxpdmVSZXNpemUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAg
ICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKLSAg
ICB9KTsKLX0KLQotLy8gTUFSSzogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIG1l
dGhvZHMKLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNo
OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsK
LSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3Nl
Rm9yQ3Jhc2goKTsKLX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
cklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIKLXsKLSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5ID8gX2luc3BlY3RvclByb3h5
LT5pc1VuZGVyVGVzdCgpIDogZmFsc2U7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIGlmIChfaW5z
cGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVudFdpbGxNb3Zl
RnJvbVdpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRvdyk7Ci19Ci0K
LS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVudERpZE1v
dmVUb1dpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRvdyk7Ci19Ci0K
LUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpv
bGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIG5hbWU6TlNW
aWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om9sZFZpZXddOwotICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRl
ci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikg
bmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmV3Vmlld107Ci0K
LSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBhdHRhY2gobV9hdHRhY2htZW50U2lkZSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5k
b3coTlNXaW5kb3cgKm9sZFdpbmRvdykKLXsKLSAgICBpZiAobV9pc09ic2VydmluZ0NvbnRlbnRM
YXlvdXRSZWN0KSB7Ci0gICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IGZh
bHNlOwotICAgICAgICBbb2xkV2luZG93IHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0
KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBjb250ZXh0OmtXaW5kb3dDb250ZW50
TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dpbmRvdykKLXsKLSAg
ICBpZiAobV9pc0F0dGFjaGVkICYmICEhbmV3V2luZG93KSB7Ci0gICAgICAgIG1faXNPYnNlcnZp
bmdDb250ZW50TGF5b3V0UmVjdCA9IHRydWU7Ci0gICAgICAgIFtuZXdXaW5kb3cgYWRkT2JzZXJ2
ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExheW91dFJlY3QiIG9w
dGlvbnM6MCBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKLSAg
ICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfQotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWdu
ZWQgbGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWwoKTsKLSAgICBpZiAobGV2ZWwgPiAxKSB7Ci0gICAg
ICAgIE5TU3RyaW5nICpkZWJ1Z1RpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VC
X1VJX1NUUklORygiV2ViIEluc3BlY3RvciBbJWRdIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdp
bmRvdyB0aXRsZSB3aGVuIGluc3BlY3RpbmcgV2ViIEluc3BlY3RvciIpLCBsZXZlbCwgKE5TU3Ry
aW5nICopbV91cmxTdHJpbmddOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6
ZGVidWdUaXRsZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNTdHJpbmcgKnRpdGxlID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciDigJQg
JUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5nICopbV91cmxTdHJp
bmddOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6dGl0bGVdOwotICAgIH0K
LX0KLQotUmV0YWluUHRyPE5TV2luZG93PiBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRl
bmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlIHRh
cmdldFR5cGUpCi17Ci0gICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0gIU5TSXNFbXB0eVJlY3Qoc2F2
ZWRXaW5kb3dGcmFtZSkgPyBzYXZlZFdpbmRvd0ZyYW1lIDogTlNNYWtlUmVjdCgwLCAwLCBpbml0
aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQpOwotICAgIGF1dG8gd2luZG93ID0g
YWRvcHROUyhbW19XS0luc3BlY3RvcldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3
aW5kb3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5bGVNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3Rv
cmVCdWZmZXJlZCBkZWZlcjpOT10pOwotICAgIFt3aW5kb3cgc2V0TWluU2l6ZTpOU01ha2VTaXpl
KG1pbmltdW1XaW5kb3dXaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOwotICAgIFt3aW5kb3cg
c2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKLSAgICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhh
dmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVo
YXZpb3JGdWxsU2NyZWVuUHJpbWFyeSldOwotCi0gICAgYm9vbCBmb3JSZW1vdGVUYXJnZXQgPSB0
YXJnZXRUeXBlID09IEluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGU7Ci0gICAgW3dpbmRvdyBz
ZXRGb3JSZW1vdGVUYXJnZXQ6Zm9yUmVtb3RlVGFyZ2V0XTsKLQotICAgIENHRmxvYXQgYXBwcm94
aW1hdGVseUhhbGZTY3JlZW5TaXplID0gKFt3aW5kb3cgc2NyZWVuXS5mcmFtZS5zaXplLndpZHRo
IC8gMikgLSA0OwotICAgIENHRmxvYXQgbWluaW11bUZ1bGxTY3JlZW5XaWR0aCA9IHN0ZDo6bWF4
PENHRmxvYXQ+KDYzNiwgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplKTsKLSAgICBbd2luZG93
IHNldE1pbkZ1bGxTY3JlZW5Db250ZW50U2l6ZTpOU01ha2VTaXplKG1pbmltdW1GdWxsU2NyZWVu
V2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKLSAgICBbd2luZG93IHNldENvbGxlY3Rpb25C
ZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9u
QmVoYXZpb3JGdWxsU2NyZWVuQWxsb3dzVGlsaW5nKV07Ci0KLSAgICBbd2luZG93IHNldFRpdGxl
YmFyQXBwZWFyc1RyYW5zcGFyZW50OllFU107Ci0KLSAgICAvLyBDZW50ZXIgdGhlIHdpbmRvdyBp
ZiB0aGUgc2F2ZWQgZnJhbWUgd2FzIGVtcHR5LgotICAgIGlmIChOU0lzRW1wdHlSZWN0KHNhdmVk
V2luZG93RnJhbWUpKQotICAgICAgICBbd2luZG93IGNlbnRlcl07Ci0KLSAgICByZXR1cm4gd2lu
ZG93OwotfQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7Ci0gICAgQVNT
RVJUKCFtX2luc3BlY3RvclBhZ2UpOwotCi0gICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2
aXR5VGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIpIHsK
LSAgICAgICAgQVNTRVJUKG1fb2JqQ0FkYXB0ZXIpOwotICAgICAgICByZXR1cm4gW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOwotICAgIH0KLQotICAgIG1f
b2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIGFs
bG9jXSBpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsKLSAgICBOU1ZpZXcgKmluc3Bl
Y3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0g
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29i
akNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3RnJhbWVEaWRD
aGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDppbnNw
ZWN0ZWRWaWV3XTsKLQotICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtb
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOmlu
c3BlY3RlZFBhZ2UoKV0pOwotICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNl
dERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAgV2ViUGFnZVByb3h5ICppbnNw
ZWN0b3JQYWdlID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdl
dCgpOwotICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsKLQotICAgIHJldHVybiBpbnNwZWN0b3JQ
YWdlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
V2luZG93KCkKLXsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIE5TU3Ry
aW5nICpzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nID0gaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAo
KS5wcmVmZXJlbmNlcygpLmluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Ci0gICAgTlNSZWN0IHNhdmVk
V2luZG93RnJhbWUgPSBOU1JlY3RGcm9tU3RyaW5nKHNhdmVkV2luZG93RnJhbWVTdHJpbmcpOwot
Ci0gICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRl
bmRXaW5kb3coc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdldFR5cGU6OkxvY2FsKTsK
LSAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07
Ci0KLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XTsKLSAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3ID0gW21faW5zcGVjdG9yV2lu
ZG93IGNvbnRlbnRWaWV3XTsKLSAgICBpbnNwZWN0b3JWaWV3LmZyYW1lID0gW2NvbnRlbnRWaWV3
IGJvdW5kc107Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9yVmlld107Ci0K
LSAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQg
fHwgIW1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9s
bGVyKSB7Ci0gICAgICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVn
YXRlOm5pbF07Ci0gICAgICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAg
fQotCi0gICAgaWYgKG1fb2JqQ0FkYXB0ZXIpIHsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpXTsK
LQotICAgICAgICBbbV9vYmpDQWRhcHRlciBpbnZhbGlkYXRlXTsKLSAgICAgICAgbV9vYmpDQWRh
cHRlciA9IG5pbDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJv
bnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFn
ZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAg
W21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3BlY3Rv
cldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAgIH0K
LQotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0YXJ0T25lU2hvdCh3
ZWJWaWV3Q2xvc2VUaW1lb3V0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lci5zdG9wKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG1fY2xvc2VGcm9u
dGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdl
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAg
aWYgKG1faXNBdHRhY2hlZCkgewotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFtt
X2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JX
aW5kb3cgY2xvc2VdOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAg
aW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3Rv
cldpbmRvd0ZyYW1lKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdUb0Zyb250KCkKLXsKLSAgICAvLyBJZiB0aGUgV2ViIEluc3BlY3RvciBpcyBubyBsb25nZXIg
aW4gdGhlIHNhbWUgd2luZG93IGFzIHRoZSBpbnNwZWN0ZWQgdmlldywKLSAgICAvLyB0aGVuIHdl
IG5lZWQgdG8gcmVvcGVuIHRoZSBJbnNwZWN0b3IgdG8gZ2V0IGl0IGF0dGFjaGVkIHRvIHRoZSBy
aWdodCB3aW5kb3cuCi0gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZHJhZ2dpbmcgdGFicyB0
byBhbm90aGVyIHdpbmRvdyBpbiBTYWZhcmkuCi0gICAgaWYgKG1faXNBdHRhY2hlZCAmJiBbbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgIT0gaW5zcGVjdGVkUGFnZSgp
LT5wbGF0Zm9ybVdpbmRvdygpKSB7Ci0gICAgICAgIG9wZW4oKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2ls
bCBub3QgYnJpbmcgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmkgdG8gdGhlIGZyb250LCBvbmx5
IGl0cyB3aW5kb3cuCi0gICAgW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndp
bmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwotICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOlttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBbaW5zcGVjdGVkUGFnZSgp
LT5wbGF0Zm9ybVdpbmRvdygpIG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci19Ci0KLWJvb2wg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgLy8gRklYTUUgPHJk
YXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCByZXR1cm4gZmFsc2UgZm9yIGEg
YmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpLCBvbmx5IGEgYmFja2dyb3VuZCB3aW5kb3cuCi0gICAg
cmV0dXJuIG1faXNWaXNpYmxlICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXdd
LndpbmRvdy5pc01haW5XaW5kb3c7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkKLXsKLSAgICBOU1ZpZXcgKmlu
c3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7
Ci0gICAgaWYgKFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHZpZXdJc0luc3BlY3RvcldlYlZp
ZXc6aW5zcGVjdGVkVmlld10pCi0gICAgICAgIHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOwot
Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLSAg
ICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1Owot
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDUwMDsKLQotICAg
IE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOwotCi0gICAg
ZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gTlNIZWlnaHQoaW5zcGVjdGVkVmlld0ZyYW1l
KSAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOwotICAgIHJldHVybiBtaW5pbXVtQXR0YWNo
ZWRIZWlnaHQgPD0gbWF4aW11bUF0dGFjaGVkSGVpZ2h0ICYmIG1pbmltdW1BdHRhY2hlZFdpZHRo
IDw9IE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQot
ewotICAgIC8vIERvIG5vdGhpbmcuCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBt
X3VybFN0cmluZyA9IHVybFN0cmluZzsKLQotICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxl
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIEFTU0VSVCgh
Y2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7Ci0KLSAgICBSZXRhaW5QdHI8U0ZDZXJ0aWZpY2F0
ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNhdGVQYW5lbCBh
bGxvY10gaW5pdF0pOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdzsKLSAgICBpZiAobV9pbnNwZWN0
b3JXaW5kb3cpCi0gICAgICAgIHdpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93LmdldCgpOwotICAg
IGVsc2UKLSAgICAgICAgd2luZG93ID0gW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZp
ZXddIHdpbmRvd107Ci0KLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgd2luZG93ID0gW05TQXBw
IGtleVdpbmRvd107Ci0KLSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgIFtj
ZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6
bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZp
Y2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2NlcnRpZmljYXRl
UGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5k
U2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNBcnJheSAq
KWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107Ci0jZW5k
aWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVsIGhh
cyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNuJ3QgZXhp
c3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVWaWV3ID0g
W2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2VydGlmaWNhdGVWaWV3
IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFibGVU
cnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZRVNdOwot
ICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNl
U2F2ZURpYWxvZykKLXsKLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAg
IAotICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0
KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkgewotICAgICAgICBw
bGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVSTF07Ci0gICAgICAg
IC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2
ZSB0byB0aGVtLgotICAgICAgICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVlOwotICAgIH0KLSAgICAK
LSAgICBBU1NFUlQocGxhdGZvcm1VUkwpOwotICAgIGlmICghcGxhdGZvcm1VUkwpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJlbG93LgotICAgIFN0
cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2VzdGVkVVJMOwotICAgIFN0cmluZyBjb250ZW50
Q29weSA9IGNvbnRlbnQ7Ci0KLSAgICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVS
TCkgewotICAgICAgICBBU1NFUlQoYWN0dWFsVVJMKTsKLQotICAgICAgICBtX3N1Z2dlc3RlZFRv
QWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwotCi0gICAgICAg
IGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAg
ICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRh
dGVQYWRkaW5nKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5Q
dHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOwotICAgICAgICAgICAgW2RhdGFD
b250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWlj
YWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07Ci0KLSAg
ICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2luc3BlY3RvclBh
Z2UtPndlYlBhZ2VJRCgpKTsKLSAgICB9OwotCi0gICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsK
LSAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJMKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFuZWxdOwotICAg
IHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25l
bnQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0
aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAotICAgIC8vIGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3Rv
cnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3RlbSdzCi0gICAgLy8gZGVmYXVsdCBi
ZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4K
LSAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJMKQotICAgICAgICBwYW5lbC5kaXJlY3RvcnlV
UkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKLQotICAg
IGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKLSAgICAgICAg
aWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOwotICAgICAgICBz
YXZlVG9VUkwocGFuZWwuVVJMKTsKLSAgICB9OwotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IG1f
aW5zcGVjdG9yV2luZG93ID8gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5V2lu
ZG93XTsKLSAgICBpZiAod2luZG93KQotICAgICAgICBbcGFuZWwgYmVnaW5TaGVldE1vZGFsRm9y
V2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAg
ZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9kYWxdKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBBU1NFUlQoIXN1Z2dlc3Rl
ZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0g
bV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBEbyBu
b3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxl
bmFtZSBpbiBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxVUkwpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3Jp
dGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKLSAgICBbaGFuZGxlIHNlZWtU
b0VuZE9mRmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5j
b2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbaGFuZGxlIGNsb3NlRmlsZV07Ci0K
LSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQ
YWdlLT53ZWJQYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd0Zy
YW1lRGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7Ci0gICAgQVNTRVJU
KG1faXNWaXNpYmxlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgaWYg
KG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBOU1N0cmluZyAqZnJhbWVTdHJpbmcgPSBOU1N0cmluZ0Zyb21S
ZWN0KFttX2luc3BlY3RvcldpbmRvdyBmcmFtZV0pOwotICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFn
ZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JXaW5kb3dGcmFtZShmcmFtZVN0cmlu
Zyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFu
Z2UoKQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKLSAgICBBU1NFUlQobV9pc1Zpc2li
bGUpOwotICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAobV9pc0F0dGFj
aGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2Fu
QXR0YWNoKCkpKTsgICAgCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RlZFZp
ZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0IGN1cnJlbnREaW1lbnNpb24pCi17Ci0gICAgaWYgKCFt
X2lzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzQXR0YWNoZWQpIHsK
LSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF0dGFjaCBhdmFpbGFiaWxpdHkgY2hhbmdlZC4gV2Ug
bmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gY2FzZQotICAgICAgICAvLyB0aGUgYXR0YWNobWVudCB2
aWV3IGlzIG5vdCB0aGUgV0tWaWV3LgotICAgICAgICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNW
aWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50
VmlldygpOwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddOwotCi0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGlu
c3BlY3RlZFZpZXcuZnJhbWU7Ci0gICAgTlNSZWN0IG9sZEluc3BlY3RvclZpZXdGcmFtZSA9IGlu
c3BlY3RvclZpZXcuZnJhbWU7Ci0gICAgTlNSZWN0IG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5T
WmVyb1JlY3Q7Ci0gICAgTlNSZWN0IHBhcmVudEJvdW5kcyA9IGluc3BlY3RlZFZpZXcuc3VwZXJ2
aWV3LmJvdW5kczsKLSAgICBDR0Zsb2F0IGluc3BlY3RlZFZpZXdUb3AgPSBOU01heFkoaW5zcGVj
dGVkVmlld0ZyYW1lKTsKLQotICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgIGNh
c2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewotICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNp
b24pCi0gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNIZWlnaHQob2xkSW5zcGVjdG9y
Vmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudEhlaWdodCA9IE5TSGVpZ2h0KHBh
cmVudEJvdW5kcyk7Ci0gICAgICAgIENHRmxvYXQgaW5zcGVjdG9ySGVpZ2h0ID0gSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChjdXJy
ZW50RGltZW5zaW9uLCBwYXJlbnRIZWlnaHQpOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0
b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0
aWxsIHdvcmsuCi0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgaW5z
cGVjdG9ySGVpZ2h0LCBOU1dpZHRoKHBhcmVudEJvdW5kcyksIGluc3BlY3RlZFZpZXdUb3AgLSBp
bnNwZWN0b3JIZWlnaHQpOwotICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VS
ZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKSwgaW5zcGVjdG9ySGVpZ2h0KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6
IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERp
bWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zs
b2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0
IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWlu
ZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsKLQot
ICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmll
dyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKLSAg
ICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJh
bm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgotICAgICAg
ICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIHBhcmVudFdpZHRoIC0gaW5z
cGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOwotICAgICAgICBuZXdJbnNwZWN0b3JWaWV3
RnJhbWUgPSBOU01ha2VSZWN0KHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIDAsIGluc3Bl
Y3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKLQotICAgICAgICBpZiAoTlNXaW5k
b3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7Ci0gICAgICAgICAg
ICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgY29u
dmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3Om5pbF07
Ci0gICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlvblJlY3Qo
bmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDogewot
ICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCi0gICAgICAgICAgICBjdXJyZW50RGltZW5z
aW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOwotCi0gICAgICAgIENHRmxvYXQg
cGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7Ci0gICAgICAgIENHRmxvYXQgaW5z
cGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0
dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwgcGFyZW50V2lkdGgpOwotCi0gICAg
ICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNv
IGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBkb24ndCB1c2UgdGhhdAotICAgICAg
ICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3IgdmlldyBzaW5jZSB0aGUgYmFubmVy
cyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVjdGVkIHZpZXcuCi0gICAgICAgIGlu
c3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoaW5zcGVjdG9yV2lkdGgsIDAsIHBhcmVudFdp
ZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOwotICAgICAgICBuZXdJbnNw
ZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdo
dChwYXJlbnRCb3VuZHMpKTsKLQotICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRv
dyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7Ci0gICAgICAgICAgICBOU1JlY3QgY29udGVudExh
eW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9y
V2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3Om5pbF07Ci0gICAgICAgICAgICBuZXdJ
bnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0Zy
YW1lLCBjb250ZW50TGF5b3V0UmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KLQotICAgIGlmIChOU0VxdWFsUmVjdHMob2xkSW5zcGVjdG9yVmlld0ZyYW1lLCBu
ZXdJbnNwZWN0b3JWaWV3RnJhbWUpICYmIE5TRXF1YWxSZWN0cyhbaW5zcGVjdGVkVmlldyBmcmFt
ZV0sIGluc3BlY3RlZFZpZXdGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERpc2Fi
bGUgc2NyZWVuIHVwZGF0ZXMgdG8gbWFrZSBzdXJlIHRoZSBsYXllcnMgZm9yIGJvdGggdmlld3Mg
cmVzaXplIGluIHN5bmMuCi0gICAgW2luc3BlY3RvclZpZXcud2luZG93IGRpc2FibGVTY3JlZW5V
cGRhdGVzVW50aWxGbHVzaF07Ci0KLSAgICBbaW5zcGVjdG9yVmlldyBzZXRGcmFtZTpuZXdJbnNw
ZWN0b3JWaWV3RnJhbWVdOwotICAgIFtpbnNwZWN0ZWRWaWV3IHNldEZyYW1lOmluc3BlY3RlZFZp
ZXdGcmFtZV07Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3Bl
Y3RlZFdpbmRvd0hlaWdodCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVj
dGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIE5TUmVjdCBpbnNwZWN0
ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUuaGVpZ2h0KTsKLX0KLQotdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewot
ICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0
YWNobWVudFZpZXcoKTsKLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVk
VmlldyBmcmFtZV07Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRW
aWV3UmVjdC5zaXplLndpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1BdHRhY2goKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2Uo
KS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZp
ZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIGlmIChtX2lu
c3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6
bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAgICAgbV9pbnNw
ZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107Ci0KLSAgICBDR0Zsb2F0IGN1cnJlbnREaW1lbnNpb247Ci0gICAgc3dpdGNo
IChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgot
ICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6
YWJsZSB8IE5TVmlld01heFlNYXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAgIFtpbnNw
ZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmll
d01pblhNYXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVBy
ZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRB
dXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNYXhYTWFyZ2luXTsK
LSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmlu
c3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaW5z
cGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGN1cnJlbnREaW1lbnNpb24pOwotCi0gICAgW2luc3Bl
Y3RlZFZpZXcuc3VwZXJ2aWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9yVmlldyBwb3NpdGlvbmVkOk5T
V2luZG93QmVsb3cgcmVsYXRpdmVUbzppbnNwZWN0ZWRWaWV3XTsKLSAgICBbaW5zcGVjdG9yVmll
dy53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOmluc3BlY3RvclZpZXddOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0
ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAg
IFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdl
YlZpZXddOwotCi0gICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAg
ICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8
IE5TVmlld0hlaWdodFNpemFibGVdOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugc2l6ZSB0
aGUgaW5zcGVjdGVkIHZpZXcncyBmcmFtZSBhZnRlciBkZXRhY2hpbmcgc28gdGhhdCBpdCB0YWtl
cyB1cCB0aGUgc3BhY2UgdGhhdCB0aGUKLSAgICAvLyBhdHRhY2hlZCBpbnNwZWN0b3IgdXNlZCB0
by4gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFu
bmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KLQotICAgIGluc3BlY3RlZFZpZXcuZnJhbWUgPSBO
U01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcuYm91bmRzKSwg
TlNNYXhZKGluc3BlY3RlZFZpZXcuZnJhbWUpKTsKLQotICAgIC8vIFJldHVybiBlYXJseSBpZiB3
ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdo
aWxlIGF0dGFjaGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRo
ZSBpbnNwZWN0b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG9wZW4oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgaWYgKCFtX2lz
QXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENo
YW5nZShoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgaWYgKCFtX2lzQXR0YWNo
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSh3
aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3NoZWV0UmVjdCA9IHJlY3Q7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAg
ICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UtPnN0YXJ0V2luZG93
RHJhZygpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwo
KQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZp
ZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhG
b3JSZXNvdXJjZTpAIk1haW4iIG9mVHlwZTpAImh0bWwiXTsKLSAgICBBU1NFUlQocGF0aCAmJiBw
YXRoLmxlbmd0aCk7Ci0gICAgaWYgKCFwYXRoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5h
YnNvbHV0ZVN0cmluZzsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JU
ZXN0UGFnZVVSTCgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVX
aXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVu
ZGxlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBXZSBtaWdodCBub3QgaGF2
ZSBhIFRlc3QuaHRtbCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KLSAgICBOU1N0cmluZyAqcGF0aCA9
IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiVGVzdCIgb2ZUeXBlOkAiaHRtbCJdOwotICAgIGlm
ICghcGF0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Ci19Ci0K
LVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCi17Ci0gICAgTlNC
dW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBs
ZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVuZGxlKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IGJ1bmRsZS5yZXNvdXJjZVBhdGg7Ci0gICAg
QVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpZRVNdLmFic29sdXRlU3RyaW5nOwotfQotCi1zdGF0
aWMgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uUGxpc3QoKQotewotICAgIE5TU3RyaW5nICpz
eXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JEaXJlY3Rvcmllc0luRG9tYWlucyhO
U0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywgWUVTKSBvYmplY3RBdEluZGV4
OjBdOwotICAgIE5TU3RyaW5nICpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoID0gW3N5c3RlbUxpYnJh
cnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvcmVTZXJ2aWNlcy9TeXN0
ZW1WZXJzaW9uLnBsaXN0Il07Ci0gICAgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uSW5mbyA9
IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDb250ZW50c09mRmlsZTpzeXN0ZW1WZXJzaW9u
UGxpc3RQYXRoXTsKLSAgICByZXR1cm4gc3lzdGVtVmVyc2lvbkluZm87Ci19Ci0KLURlYnVnZ2Fi
bGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCi17
Ci0gICAgTlNEaWN0aW9uYXJ5ICpwbGlzdCA9IHN5c3RlbVZlcnNpb25QbGlzdCgpOwotCi0gICAg
RGVidWdnYWJsZUluZm9EYXRhIHJlc3VsdDsKLSAgICByZXN1bHQuZGVidWdnYWJsZVR5cGUgPSBJ
bnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotICAgIHJlc3VsdC50YXJnZXRQbGF0
Zm9ybU5hbWUgPSAibWFjT1MiX3M7Ci0gICAgcmVzdWx0LnRhcmdldEJ1aWxkVmVyc2lvbiA9IHBs
aXN0W0AiUHJvZHVjdEJ1aWxkVmVyc2lvbiJdOwotICAgIHJlc3VsdC50YXJnZXRQcm9kdWN0VmVy
c2lvbiA9IHBsaXN0W0AiUHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lvbiJdOwotICAgIHJlc3VsdC50
YXJnZXRJc1NpbXVsYXRvciA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmVlNWNkZmYzOC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmgi
Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2Fi
bGVJbmZvLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJs
aWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVj
dG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRh
cmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBl
KQotICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQot
ICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgLCBt
X2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJ
RCkKLSAgICAgICAgLCBtX2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQotICAgIHsKLSAg
ICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgIH0KLQotICAgIH5SZW1vdGVJbnNw
ZWN0b3JQcm94eSgpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7
Ci0gICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWQo
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46
IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdl
dC4KLSAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJ
OjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7Ci0g
ICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVnZ2FibGVUeXBl
KTsKLSAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKSwgbV9pbnNw
ZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2hv
dygpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zaG93KCk7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAg
ICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQotICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
bV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQg
Y2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JD
bGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7
Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLSAgICBDb25u
ZWN0aW9uSUQgbV9jb25uZWN0aW9uSUQ7Ci0gICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKLSAgICBJ
bnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIG1fZGVidWdnYWJsZVR5cGU7Ci19OwotCi1SZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBSZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCi0gICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQotewot
ICAgIGlmICghdXJsLmhvc3QoKSB8fCAhdXJsLnBvcnQoKSkgewotICAgICAgICBMT0dfRVJST1Io
IkludmFsaWQgaW5zcGVjdG9yIHVybDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb25JRCA9IGNvbm5lY3RJ
bmV0KHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgpKTsKLSAgICBp
ZiAoIW1fY29ubmVjdGlvbklEKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9yIGNsaWVu
dCBjb3VsZCBub3QgY29ubmVjdCB0byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24o
KTsKLX0KLQotUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkK
LXsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNwZWN0b3JFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOwotICAgIGF1dG8gbWVzc2FnZSA9
IGV2ZW50LnV0ZjgoKTsKLSAgICBzZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgo
KSk7Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaXNwYXRj
aE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDYWxs
SGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7Ci0g
ICAgICAgIHsgIkJhY2tlbmRDb21tYW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcykgfSwKLSAgICAgICAgeyAi
U2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OnNldFRhcmdldExpc3QpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9u
dGVuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKLSAgICB9KTsKLQotICAgIHJldHVybiBkaXNwYXRj
aE1hcDsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5pdGlhbENvbW11
bmljYXRpb24oKQotewotICAgIGF1dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3Mp
OwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5nKCkpOwotfQot
Ci12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgpCi17Ci0gICAg
bV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVhcigpOwotICAg
IG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Ci0gICAgbV9vYnNlcnZlci50YXJn
ZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpk
aWRDbG9zZShDb25uZWN0aW9uSUQpCi17Ci0gICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewot
ICAgICAgICBjb25uZWN0aW9uQ2xvc2VkKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElE
IHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQotewot
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtl
X3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdl
dElELCBkZWJ1Z2dhYmxlVHlwZV0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJ
bnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVU
eXBlKTsKLSAgICB9KTsKLQotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOwotICAgIHNldHVw
RXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKLSAgICBz
ZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAgIHNlbmRX
ZWJJbnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBU
YXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGF1dG8gYmFj
a2VuZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBiYWNrZW5kRXZlbnQtPnNl
dFN0cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7Ci0gICAgYmFja2Vu
ZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAg
YmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAgIGJh
Y2tlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKLSAgICBzZW5kV2Vi
SW5zcGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQgY29u
bmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKLXsKLSAgICBhdXRvIGNsb3NlZEV2ZW50ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBjbG9zZWRFdmVudC0+c2V0U3RyaW5nKCJldmVu
dCJfcywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOwotICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2Vy
KCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAgY2xvc2VkRXZlbnQtPnNldElu
dGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7Ci0gICAgc2VuZFdlYkluc3BlY3RvckV2ZW50
KGNsb3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBtX2luc3BlY3RvclByb3h5TWFw
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQm
IGV2ZW50KQotewotICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNzYWdlLT5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFr
ZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZShldmVu
dC5tZXNzYWdlLT51dGY4KCkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQuY29ubmVj
dGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpT
T04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBpZiAoIW1lc3Nh
Z2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBW
ZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OwotICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1l
c3NhZ2VBcnJheSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0Owot
ICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBUYXJnZXQgdGFyZ2V0OwotICAgICAgICBpZiAoIWl0ZW1P
YmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCi0gICAgICAgICAgICB8
fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKLSAgICAgICAg
ICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKLSAgICAg
ICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1v
dmUodGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgYXV0byBjb25uZWN0aW9uSUQgPSBldmVudC5jb25u
ZWN0aW9uSUQudmFsdWUoKTsKLQotICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3Zl
IHRoZW0uCi0gICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7Ci0gICAgZm9y
IChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYg
KHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHRh
cmdldExpc3QpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5zZWNvbmQpIHsK
LSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAg
ICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7Ci0gICAgfQotICAgIGZvciAo
YXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCi0gICAgICAgIG1faW5zcGVjdG9yUHJv
eHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLQot
ICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKLSAg
ICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYgZXZlbnQp
Ci17Ci0gICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdldElEIHx8ICFl
dmVudC5tZXNzYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3h5ID0gbV9pbnNw
ZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlvbklELnZhbHVl
KCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKLSAgICBpZiAoIXByb3h5KSB7Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJv
eHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUxZDYzZGVhMC4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0Lmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVidWdnYWJsZVR5cGUuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQ
cm94eTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHZp
cnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRh
cmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci19Owot
Ci11c2luZyBDb25uZWN0aW9uSUQgPSBJbnNwZWN0b3I6OkNvbm5lY3Rpb25JRDsKLXVzaW5nIFRh
cmdldElEID0gSW5zcGVjdG9yOjpUYXJnZXRJRDsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKLXB1YmxpYzoKLSAgICBSZW1v
dGVJbnNwZWN0b3JDbGllbnQoVVJMLCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYpOwotICAgIH5S
ZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXBkYXRl
IHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgdG8gdXNlIERlYnVnZ2FibGVUeXBlIGluc3RlYWQgb2Yg
U3RyaW5nIGZvciB0aGUgdGFyZ2V0IHR5cGUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNjA0NwotICAgIHN0cnVjdCBUYXJnZXQgewotICAgICAgICBU
YXJnZXRJRCBpZDsKLSAgICAgICAgU3RyaW5nIHR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwot
ICAgICAgICBTdHJpbmcgdXJsOwotICAgIH07Ci0KLSAgICBjb25zdCBIYXNoTWFwPENvbm5lY3Rp
b25JRCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRz
OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQotCi0gICAgdm9pZCBpbnNwZWN0KENvbm5lY3Rpb25J
RCwgVGFyZ2V0SUQsIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUpOwotICAgIHZvaWQgc2VuZE1l
c3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQsIFRhcmdldElEKTsKLQotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50PjsKLQotICAgIHZvaWQgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOwotICAgIHZvaWQg
Y29ubmVjdGlvbkNsb3NlZCgpOwotCi0gICAgdm9pZCBzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50
Jik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmKTsKLSAgICB2
b2lkIHNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBFdmVudCYpOwotCi0gICAgdm9pZCBkaWRDbG9z
ZShDb25uZWN0aW9uSUQpIGZpbmFsOwotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4m
IGRpc3BhdGNoTWFwKCkgZmluYWw7Ci0KLSAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChj
b25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLSAgICBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgbV9vYnNlcnZlcjsKLSAgICBPcHRpb25hbDxDb25uZWN0
aW9uSUQ+IG1fY29ubmVjdGlvbklEOwotICAgIEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8
VGFyZ2V0Pj4gbV90YXJnZXRzOwotICAgIEhhc2hNYXA8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwg
VGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yUHJveHk+PiBtX2luc3Bl
Y3RvclByb3h5TWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQ1NWQzZTYyLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXIuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVk
ZSAiQVBJTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1
ZGUgIkFQSVVzZXJDb250ZW50V29ybGQuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxl
ci5oIgotI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFNjcmlwdE1lc3NhZ2VDbGllbnQgZmluYWwgOiBw
dWJsaWMgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgU2NyaXB0TWVzc2FnZUNsaWVudChSZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXImIGluc3BlY3RvclByb3RvY29sSGFuZGxlcikKLSAgICAgICAg
OiBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsg
fQotCi0gICAgflNjcmlwdE1lc3NhZ2VDbGllbnQoKSB7IH0KLQotICAgIHZvaWQgZGlkUG9zdE1l
c3NhZ2UoV2ViUGFnZVByb3h5JiBwYWdlLCBGcmFtZUluZm9EYXRhJiYsIFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSYgc2VyaWFsaXplZFNjcmlwdFZhbHVlKSBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgYXV0byB0b2tlbnMgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUudG9TdHJpbmcoKS5z
cGxpdCgiOiIpOwotICAgICAgICBpZiAodG9rZW5zLnNpemUoKSAhPSAzKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIFVSTCByZXF1ZXN0VVJMIHsgeyB9LCBwYWdlLnBhZ2VMb2FkU3Rh
dGUoKS51cmwoKSB9OwotICAgICAgICBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlci5pbnNwZWN0
KHJlcXVlc3RVUkwuaG9zdEFuZFBvcnQoKSwgdG9rZW5zWzBdLnRvVUludFN0cmljdCgpLCB0b2tl
bnNbMV0udG9VSW50U3RyaWN0KCksIHRva2Vuc1syXSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciYgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXI7Ci19OwotCi1jbGFzcyBMb2FkZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpMb2FkZXJD
bGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIExvYWRl
ckNsaWVudChGdW5jdGlvbjx2b2lkKCk+JiYgbG9hZGVkQ2FsbGJhY2spCi0gICAgICAgIDogbV9s
b2FkZWRDYWxsYmFjayB7IFdURk1vdmUobG9hZGVkQ2FsbGJhY2spIH0geyB9Ci0KLSAgICB2b2lk
IGRpZEZpbmlzaExvYWRGb3JGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2Vi
RnJhbWVQcm94eSYsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6T2JqZWN0KikgZmluYWwKLSAgICB7
Ci0gICAgICAgIG1fbG9hZGVkQ2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVu
Y3Rpb248dm9pZCgpPiBtX2xvYWRlZENhbGxiYWNrOwotfTsKLQotc3RhdGljIE9wdGlvbmFsPElu
c3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU+IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgZGVidWdnYWJsZVR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKGRlYnVnZ2FibGVU
eXBlU3RyaW5nID09ICJqYXZhc2NyaXB0Il9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpE
ZWJ1Z2dhYmxlVHlwZTo6SmF2YVNjcmlwdDsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcg
PT0gInBhZ2UiX3MpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpQ
YWdlOwotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAic2VydmljZS13b3JrZXIiX3Mp
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpTZXJ2aWNlV29ya2Vy
OwotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAid2ViLXBhZ2UiX3MpCi0gICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotCi0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6
Omluc3BlY3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rp
b25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBhdXRv
IGRlYnVnZ2FibGVUeXBlID0gcGFyc2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmcodHlwZSk7Ci0g
ICAgaWYgKCFkZWJ1Z2dhYmxlVHlwZSkgewotICAgICAgICBMT0dfRVJST1IoIlVua25vd24gZGVi
dWdnYWJsZSB0eXBlOiBcIiVzXCIiLCB0eXBlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yQ2xpZW50KQotICAgICAgICBtX2luc3Bl
Y3RvckNsaWVudC0+aW5zcGVjdChjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlw
ZS52YWx1ZSgpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnJ1
blNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBtX3BhZ2UucnVuSmF2YVNjcmlw
dEluTWFpbkZyYW1lKHsgc2NyaXB0LCBmYWxzZSwgV1RGOjpudWxsb3B0LCBmYWxzZSB9LCAKLSAg
ICAgICAgW10oQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBPcHRpb25hbDxXZWJDb3JlOjpF
eGNlcHRpb25EZXRhaWxzPiBleGNlcHRpb25EZXRhaWxzLCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7
Ci0gICAgICAgICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkV4Y2VwdGlvbiBydW5uaW5nIHNjcmlwdCBcIiVzXCIiLCBleGNlcHRpb25EZXRhaWxz
LT5tZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0pOwotfQotCi12b2lkIFJlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlcjo6dGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50JiBjbGllbnQpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBodG1sOwotICAgIGlmIChjbGllbnQu
dGFyZ2V0cygpLmlzRW1wdHkoKSkKLSAgICAgICAgaHRtbC5hcHBlbmQoIjxwPk5vIHRhcmdldHMg
Zm91bmQ8L3A+Il9zKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaHRtbC5hcHBlbmQoIjx0YWJsZT4i
KTsKLSAgICAgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uSUQgOiBjbGllbnQudGFyZ2V0cygpLmtl
eXMoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjbGllbnQudGFyZ2V0cygp
LmdldChjb25uZWN0aW9uSUQpKSB7Ci0gICAgICAgICAgICAgICAgaHRtbC5hcHBlbmQobWFrZVN0
cmluZygKLSAgICAgICAgICAgICAgICAgICAgIjx0Ym9keT48dHI+IgotICAgICAgICAgICAgICAg
ICAgICAiPHRkIGNsYXNzPVwiZGF0YVwiPjxkaXYgY2xhc3M9XCJ0YXJnZXRuYW1lXCI+IiwgdGFy
Z2V0Lm5hbWUsICI8L2Rpdj48ZGl2IGNsYXNzPVwidGFyZ2V0dXJsXCI+IiwgdGFyZ2V0LnVybCwg
IjwvZGl2PjwvdGQ+IgotICAgICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwiaW5wdXRcIj48
aW5wdXQgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiSW5zcGVjdFwiIG9uY2xpY2s9XCJ3aW5kb3cu
d2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5pbnNwZWN0b3IucG9zdE1lc3NhZ2UoXFwnIiwgY29ubmVj
dGlvbklELCAiOiIsIHRhcmdldC5pZCwgIjoiLCB0YXJnZXQudHlwZSwgIlxcJyk7XCI+PC90ZD4i
Ci0gICAgICAgICAgICAgICAgICAgICI8L3RyPjwvdGJvZHk+IgotICAgICAgICAgICAgICAgICkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGh0bWwuYXBwZW5kKCI8L3RhYmxl
PiIpOwotICAgIH0KLSAgICBtX3RhcmdldExpc3RzSHRtbCA9IGh0bWwudG9TdHJpbmcoKTsKLSAg
ICBpZiAobV9wYWdlTG9hZGVkKQotICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7Ci19Ci0KLXZv
aWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjp1cGRhdGVUYXJnZXRMaXN0KCkKLXsK
LSAgICBpZiAoIW1fdGFyZ2V0TGlzdHNIdG1sLmlzRW1wdHkoKSkgewotICAgICAgICBydW5TY3Jp
cHQobWFrZVN0cmluZygidXBkYXRlVGFyZ2V0cyhgIiwgbV90YXJnZXRMaXN0c0h0bWwsICJgKTsi
KSk7Ci0gICAgICAgIG1fdGFyZ2V0TGlzdHNIdG1sID0geyB9OwotICAgIH0KLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQ
cm94eSYgcGFnZVByb3h5LCBXZWJVUkxTY2hlbWVUYXNrJiB0YXNrKQotewotICAgIGF1dG8mIHJl
cXVlc3RVUkwgPSB0YXNrLnJlcXVlc3QoKS51cmwoKTsKLQotICAgIC8vIERlc3Ryb3kgdGhlIGNs
aWVudCBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgY29ubmVjdGlvbiBzbyBpdCBjYW4gY29ubmVjdCB0
byB0aGUgc2FtZSBwb3J0Ci0gICAgbV9pbnNwZWN0b3JDbGllbnQgPSBudWxscHRyOwotICAgIG1f
aW5zcGVjdG9yQ2xpZW50ID0gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+KHJlcXVl
c3RVUkwsICp0aGlzKTsKLQotICAgIC8vIFNldHVwIHRhcmdldCBwb3N0TWVzc2FnZSBsaXN0ZW5l
cgotICAgIGF1dG8gaGFuZGxlciA9IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpjcmVhdGUobWFr
ZVVuaXF1ZTxTY3JpcHRNZXNzYWdlQ2xpZW50PigqdGhpcyksICJpbnNwZWN0b3IiLCBBUEk6OlVz
ZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpOwotICAgIHBhZ2VQcm94eS5wYWdlR3JvdXAo
KS51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIoaGFu
ZGxlci5nZXQoKSk7Ci0KLSAgICAvLyBTZXR1cCBsb2FkZXIgY2xpZW50IHRvIGdldCBub3RpZmll
ZCBvZiBwYWdlIGxvYWQKLSAgICBtX3BhZ2Uuc2V0TG9hZGVyQ2xpZW50KG1ha2VVbmlxdWU8TG9h
ZGVyQ2xpZW50PihbdGhpc10gewotICAgICAgICBtX3BhZ2VMb2FkZWQgPSB0cnVlOwotICAgICAg
ICB1cGRhdGVUYXJnZXRMaXN0KCk7Ci0gICAgfSkpOwotICAgIG1fcGFnZUxvYWRlZCA9IGZhbHNl
OwotCi0gICAgU3RyaW5nQnVpbGRlciBodG1sQnVpbGRlcjsKLSAgICBodG1sQnVpbGRlci5hcHBl
bmQoCi0gICAgICAgICI8aHRtbD48aGVhZD48dGl0bGU+UmVtb3RlIEluc3BlY3RvcjwvdGl0bGU+
IgotICAgICAgICAiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiAvPiIKLSAgICAgICAgIjxzdHlsZT4iCi0gICAgICAg
ICIgIGgxIHsgY29sb3I6ICNiYWJkYjY7IHRleHQtc2hhZG93OiAwIDFweCAwIHdoaXRlOyBtYXJn
aW4tYm90dG9tOiAwOyB9IgotICAgICAgICAiICBodG1sIHsgZm9udC1mYW1pbHk6IC13ZWJraXQt
c3lzdGVtLWZvbnQ7IGZvbnQtc2l6ZTogMTFwdDsgY29sb3I6ICMyZTM0MzY7IHBhZGRpbmc6IDIw
cHggMjBweCAwIDIwcHg7IGJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjQ7ICIKLSAgICAgICAgIiAg
ICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRv
cCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgI2VlZWVlYyksIGNvbG9yLXN0b3AoMSwgI2Y2
ZjZmNCkpOyIKLSAgICAgICAgIiAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSA1ZW07IGJh
Y2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IH0iCi0gICAgICAgICIgIHRhYmxlIHsgd2lkdGg6
IDEwMCU7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHRhYmxlLWxheW91dDogZml4ZWQ7IH0i
Ci0gICAgICAgICIgIHRhYmxlLCB0ZCB7IGJvcmRlcjogMXB4IHNvbGlkICNkM2Q3Y2Y7IGJvcmRl
ci1sZWZ0OiBub25lOyBib3JkZXItcmlnaHQ6IG5vbmU7IH0iCi0gICAgICAgICIgIHAgeyBtYXJn
aW4tYm90dG9tOiAzMHB4OyB9IgotICAgICAgICAiICB0ZCB7IHBhZGRpbmc6IDE1cHg7IH0iCi0g
ICAgICAgICIgIHRkLmRhdGEgeyB3aWR0aDogMjAwcHg7IH0iCi0gICAgICAgICIgIC50YXJnZXRu
YW1lIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOm5v
d3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH0iCi0gICAgICAgICIgIC50YXJnZXR1cmwg
eyBjb2xvcjogI2JhYmRiNjsgYmFja2dyb3VuZDogI2VlZTsgd29yZC13cmFwOiBicmVhay13b3Jk
OyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOyB9IgotICAgICAgICAiICB0ZC5pbnB1dCB7IHdp
ZHRoOiA2NHB4OyB9IgotICAgICAgICAiICBpbnB1dCB7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiA4
cHg7IH0iCi0gICAgICAgICI8L3N0eWxlPiIKLSAgICAgICAgIjwvaGVhZD48Ym9keT48aDE+SW5z
cGVjdGFibGUgdGFyZ2V0czwvaDE+IgotICAgICAgICAiPGRpdiBpZD1cInRhcmdldGxpc3RcIj48
cD5ObyB0YXJnZXRzIGZvdW5kPC9wPjwvZGl2PjwvYm9keT4iCi0gICAgICAgICI8c2NyaXB0PiIK
LSAgICAgICAgImZ1bmN0aW9uIHVwZGF0ZVRhcmdldHMoc3RyKSB7IgotICAgICAgICAgICAgImxl
dCB0YXJnZXREaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0bGlzdCcpOyIKLSAg
ICAgICAgICAgICJ0YXJnZXREaXYuaW5uZXJIVE1MID0gc3RyOyIKLSAgICAgICAgIn0iCi0gICAg
ICAgICI8L3NjcmlwdD4iKTsKLSAgICBodG1sQnVpbGRlci5hcHBlbmQoIjwvaHRtbD4iKTsKLQot
ICAgIGF1dG8gaHRtbCA9IGh0bWxCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwotICAgIGF1dG8g
ZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGh0bWwuZGF0YSgpLCBodG1sLmxlbmd0aCgpKTsK
LSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L2h0bWwiX3Ms
IGh0bWwubGVuZ3RoKCksICJVVEYtOCJfcyk7Ci0gICAgdGFzay5kaWRSZWNlaXZlUmVzcG9uc2Uo
cmVzcG9uc2UpOwotICAgIHRhc2suZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRhKSk7Ci0gICAg
dGFzay5kaWRDb21wbGV0ZShSZXNvdXJjZUVycm9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjYwMGVmZGVk
NC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90
ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAi
V2ViVVJMU2NoZW1lSGFuZGxlci5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFVSTDsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlVSTFNjaGVtZVRhc2s7Ci0KLWNsYXNz
IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciBmaW5hbCA6IHB1YmxpYyBSZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlciwgcHVibGljIFdlYlVSTFNjaGVtZUhhbmRsZXIgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyPiBjcmVhdGUoV2ViUGFn
ZVByb3h5JiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUluc3BlY3RvclByb3Rv
Y29sSGFuZGxlcihwYWdlKSk7IH0KLQotICAgIHZvaWQgaW5zcGVjdChjb25zdCBTdHJpbmcmIGhv
c3RBbmRQb3J0LCBDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpOwot
Ci1wcml2YXRlOgotICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihXZWJQYWdlUHJv
eHkmIHBhZ2UpCi0gICAgICAgIDogbV9wYWdlKHBhZ2UpIHsgfQotCi0gICAgLy8gUmVtb3RlSW5z
cGVjdG9yT2JzZXJ2ZXIKLSAgICB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3Rv
ckNsaWVudCYpIGZpbmFsOwotICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0
b3JDbGllbnQmKSBmaW5hbCB7IH0KLQotICAgIC8vIFdlYlVSTFNjaGVtZUhhbmRsZXIKLSAgICB2
b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBm
aW5hbDsKLSAgICB2b2lkIHBsYXRmb3JtU3RvcFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2No
ZW1lVGFzayYpIGZpbmFsIHsgfQotICAgIHZvaWQgcGxhdGZvcm1UYXNrQ29tcGxldGVkKFdlYlVS
TFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgdXBkYXRlVGFyZ2V0TGlzdCgpOwot
Ci0gICAgdm9pZCBydW5TY3JpcHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PiBtX2luc3BlY3RvckNsaWVudDsKLSAgICBXZWJQYWdl
UHJveHkmIG1fcGFnZTsKLSAgICBib29sIG1fcGFnZUxvYWRlZCB7IGZhbHNlIH07Ci0gICAgU3Ry
aW5nIG1fdGFyZ2V0TGlzdHNIdG1sOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTBjMmI5NGYyZi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0j
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJh
dGlvbi5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RhdGljIExQQ1RTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IFRFWFQo
IlJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlciIpOwotY29uc3QgTFBDV1NUUiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFz
cyI7Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2Mo
SFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAg
ICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eVBvaW50ZXJQcm9wKSk7Ci0KLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fU0la
RToKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+c2l6ZUNoYW5nZSgpOwotICAgIGNhc2UgV01fQ0xP
U0U6Ci0gICAgICAgIHJldHVybiBjbGllbnQtPm9uQ2xvc2UoKTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1z
Zywgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1zdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNz
KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7
Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENM
QVNTRVgpOwotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSAwOwotICAgIHdjZXgubHBmblduZFBy
b2MgICAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xz
RXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJ
bnN0YW5jZSAgICAgID0gMDsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3Y2V4
LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJy
QmFja2dyb3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOwotICAgIHdjZXgu
bHBzekNsYXNzTmFtZSAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3
Y2V4LmhJY29uU20gICAgICAgID0gMDsKLQotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3Mg
PSB0cnVlOwotICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLUxSRVNV
TFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNpemVDaGFuZ2UoKQotewotICAgIGlmICghbV93
ZWJWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENs
aWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnJlY3QpOwotICAgIDo6U2V0V2luZG93UG9zKG1f
d2ViVmlldy0+d2luZG93KCksIDAsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLUxSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9uQ2xvc2UoKQot
ewotICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19ISURFKTsKLSAgICBmcm9u
dGVuZERpZENsb3NlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYlBhZ2VQcm94eSogUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkK
LXsKLSAgICBSZWZQdHI8V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5j
ZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0gICAgcHJlZmVy
ZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKLQotI2lmIEVOQUJM
RShERVZFTE9QRVJfTU9ERSkKLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVt
Q29uc29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxXZWJQYWdlR3JvdXA+
IHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50
aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFn
ZShudWxscHRyKSkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVm
ZXJlbmNlcy5nZXQoKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdl
R3JvdXAuZ2V0KCkpOwotCi0gICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDYwLCAyMDAsIDE1MDAs
IDEwMDApOwotICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICBtX2Zyb250ZW5kSGFuZGxl
ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwg
MCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIDAsIDAsIDAsIDApOwotCi0gICAgOjpTZXRQcm9wKG1f
ZnJvbnRlbmRIYW5kbGUsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50
ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFu
ZGxlLCBTV19TSE9XKTsKLQotICAgIFJFQ1QgcjsKLSAgICA6OkdldENsaWVudFJlY3QobV9mcm9u
dGVuZEhhbmRsZSwgJnIpOwotICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdl
Q29uZmlndXJhdGlvbiwgbV9mcm9udGVuZEhhbmRsZSk7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+
cGFnZSgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0
U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdU
b0Zyb250KCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Ci12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hl
ZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQot
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29u
c3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgeyB9Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIDo6
RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSGFuZGxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGVhYzk3MzE3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmln
YXRpb24uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiQVBJ
UGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgotI2luY2x1
ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2Vz
LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2luLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dp
bmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4KLQot
I2lmIFVTRShDRikKLSNpbmNsdWRlIDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJv
eHlQb2ludGVyUHJvcCA9IEwiV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIjsKLXN0YXRpYyBjb25z
dCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJXZWJJbnNwZWN0b3JQcm94
eUNsYXNzIjsKLQotc3RydWN0IEluc3BlY3RlZFdpbmRvd0luZm8gewotICAgIGludCBsZWZ0Owot
ICAgIGludCB0b3A7Ci0gICAgaW50IHZpZXdXaWR0aDsKLSAgICBpbnQgdmlld0hlaWdodDsKLSAg
ICBpbnQgcGFyZW50V2lkdGg7Ci0gICAgaW50IHBhcmVudEhlaWdodDsKLX07Ci0KLXN0YXRpYyBJ
bnNwZWN0ZWRXaW5kb3dJbmZvIGdldEluc3BlY3RlZFdpbmRvd0luZm8oSFdORCBpbnNwZWN0ZWRX
aW5kb3csIEhXTkQgcGFyZW50V2luZG93KQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENs
aWVudFJlY3QoaW5zcGVjdGVkV2luZG93LCAmcmVjdCk7Ci0gICAgOjpNYXBXaW5kb3dQb2ludHMo
aW5zcGVjdGVkV2luZG93LCBwYXJlbnRXaW5kb3csIChMUFBPSU5UKSZyZWN0LCAyKTsKLQotICAg
IFJFQ1QgcGFyZW50UmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QocGFyZW50V2luZG93LCAmcGFy
ZW50UmVjdCk7Ci0gICAgcmV0dXJuIHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAt
IHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgcGFyZW50UmVjdC5yaWdodCAtIHBh
cmVudFJlY3QubGVmdCwgcGFyZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LnRvcCB9OwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCBod25k
LCBVSU5UIG1zZywgV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQotewotICAgIHN3aXRjaCAobXNnKSB7
Ci0gICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzogewotICAgICAgICBpZiAoIW1faXNBdHRh
Y2hlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIHdpbmRvd1BvcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V0lORE9XUE9TKj4obFBhcmFtKTsKLQotICAgICAgICBpZiAod2luZG93
UG9zLT5mbGFncyAmIFNXUF9OT1NJWkUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
SFdORCBwYXJlbnQgPSBHZXRQYXJlbnQoaHduZCk7Ci0gICAgICAgIFJFQ1QgcGFyZW50UmVjdDsK
LSAgICAgICAgR2V0Q2xpZW50UmVjdChwYXJlbnQsICZwYXJlbnRSZWN0KTsKLQotICAgICAgICBS
RUNUIGluc3BlY3RvclJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0b3JWaWV3
V2luZG93LCAmaW5zcGVjdG9yUmVjdCk7Ci0KLSAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRT
aWRlKSB7Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewotICAgICAgICAg
ICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChpbnNwZWN0b3JSZWN0
LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wLCB3aW5kb3dQb3MtPmN5KTsKLSAgICAgICAgICAg
IHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+
eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05P
Wk9SREVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXR0
YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChpbnNw
ZWN0b3JSZWN0LnJpZ2h0IC0gaW5zcGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQb3MtPmN4KTsKLSAg
ICAgICAgICAgIHdpbmRvd1Bvcy0+Y3ggLT0gaW5zcGVjdG9yV2lkdGg7Ci0gICAgICAgICAgICA6
OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCArIHdp
bmRvd1Bvcy0+Y3gsIHdpbmRvd1Bvcy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdpbmRvd1Bvcy0+Y3ks
IFNXUF9OT1pPUkRFUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotTFJFU1VMVCBD
QUxMQkFDSyBXZWJJbnNwZWN0b3JQcm94eTo6d25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiBj
bGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3
bmQsIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKLSAgICBzd2l0Y2ggKG1zZykgewot
ICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgOjpTZXRXaW5kb3dQb3MoY2xpZW50LT5tX2luc3Bl
Y3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSwg
U1dQX05PWk9SREVSKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBXTV9DTE9TRToKLSAg
ICAgICAgY2xpZW50LT5jbG9zZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBt
c2csIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cmVnaXN0
ZXJXaW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dD
bGFzcyA9IGZhbHNlOwotCi0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwot
Ci0gICAgV05EQ0xBU1NFWCB3Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNT
RVgpOwotICAgIHdjZXguc3R5bGUgPSAwOwotICAgIHdjZXgubHBmblduZFByb2MgPSB3bmRQcm9j
OwotICAgIHdjZXguY2JDbHNFeHRyYSA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhID0gMDsKLSAg
ICB3Y2V4LmhJbnN0YW5jZSA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0gICAgd2NleC5o
SWNvbiA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwot
ICAgIHdjZXguaGJyQmFja2dyb3VuZCA9IDA7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgPSAwOwot
ICAgIHdjZXgubHBzekNsYXNzTmFtZSA9IFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOwotICAg
IHdjZXguaEljb25TbSA9IDA7Ci0gICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsK
LX0KLQotc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VS
ZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdL
RnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQotewotICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0
ZSBhbnl3aGVyZS4KLSAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2
aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJjZUZyYW1lICYm
ICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJS
ZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFdlYklu
c3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYklu
c3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5
KTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmln
YXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRo
ZSBtYWluIGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWlu
T3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICB0b0ltcGwobGlz
dGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFBy
ZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFn
ZS4KLSAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKLQotICAgIC8vIEFuZCBpbnN0
ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclByb3h5
LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0
YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJv
eHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQ
YWdlKCkpOwotCi0gICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUo
U3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShERVZFTE9QRVJf
TU9ERSkKLSAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0
b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVy
ZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMt
PnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlm
Ci0gICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsK
LSAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7IH0pOwotICAgIGF1
dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRl
bnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7Ci0gICAgYXV0byBwYWdlQ29uZmlndXJh
dGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1
cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxl
dmVsKCkpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5j
ZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3Vw
LnB0cigpKTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50
ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
blJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQK
LSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24K
LSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgotICAgICAgICBudWxscHRy
LCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxOYXZp
Z2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZy
YW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAotICAgICAgICBu
dWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8v
IHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAgICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwK
LSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQotCi0gICAgICAgIG51
bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8g
d2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5hdmln
YXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0
dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgUkVDVCByID0geyAwLCAwLCBzdGF0aWNfY2FzdDxM
T05HPihpbml0aWFsV2luZG93V2lkdGgpLCBzdGF0aWNfY2FzdDxMT05HPihpbml0aWFsV2luZG93
SGVpZ2h0KSB9OwotICAgIGF1dG8gcGFnZSA9IGluc3BlY3RlZFBhZ2UoKTsKLSAgICBtX2luc3Bl
Y3RlZFZpZXdXaW5kb3cgPSBwYWdlLT52aWV3V2lkZ2V0KCk7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3
UGFyZW50V2luZG93ID0gOjpHZXRQYXJlbnQobV9pbnNwZWN0ZWRWaWV3V2luZG93KTsKLSAgICBh
dXRvIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gJnZpZXcubGVha1Jl
ZigpOwotICAgIGF1dG8gaW5zcGVjdG9yUGFnZSA9IG1faW5zcGVjdG9yVmlldy0+cGFnZSgpOwot
ICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IGluc3BlY3RvclBhZ2UtPnZpZXdXaWRnZXQoKTsK
LSAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwg
Jm5hdmlnYXRpb25DbGllbnQuYmFzZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCi17Ci0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVM
aXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotICAgIG1faW5zcGVjdG9yVmll
dyA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLSAgICBpZiAobV9p
bnNwZWN0b3JWaWV3V2luZG93KSB7Ci0gICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3Rv
clZpZXdXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBudWxscHRyOwot
ICAgIH0KLSAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKLSAgICAgICAgOjpSZW1v
dmVQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQ
cm9wKTsKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsK
LSAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSBudWxscHRyOwotICAgIH0KLSAgICBt
X2luc3BlY3RlZFZpZXdXaW5kb3cgPSBudWxscHRyOwotICAgIG1faW5zcGVjdGVkVmlld1BhcmVu
dFdpbmRvdyA9IG51bGxwdHI7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dG9yUGFnZVVSTCgpCi17Ci0jaWYgVVNFKENGKQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRt
bFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0
QnVuZGxlKCksIENGU1RSKCJNYWluIiksIENGU1RSKCJodG1sIiksIENGU1RSKCJXZWJJbnNwZWN0
b3JVSSIpKSk7Ci0gICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpOwot
I2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2VuZGlmCi19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJM
KFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiVGVzdCIpLCBDRlNUUigiaHRtbCIpLCBD
RlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1s
VVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotI2lmIFVTRShDRikK
LSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGJhc2VVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29w
eVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiV2ViSW5zcGVjdG9y
VUkiKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhiYXNl
VVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1EZWJ1
Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUo
KQotewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNo
b3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhLgotICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0Rh
dGE6OmVtcHR5KCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlu
c3BlY3RlZFdpbmRvd0hlaWdodCgpCi17Ci0gICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50
UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKLSAgICByZXR1cm4gcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgoKQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVu
dFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7Ci0gICAgcmV0dXJuIHJlY3Qucmln
aHQgLSByZWN0LmxlZnQ7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0
YWNoKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9
IDMwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3
NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1
MDsKLQotICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdyAmJiA6OkdldFBhcmVudChtX2lu
c3BlY3RvclZpZXdXaW5kb3cpID09IG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAgICAg
IDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50
V2luZG93KTsKLSAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBT
V19ISURFKTsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6
OmFkZExpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAgICBpZiAobV9h
dHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKSB7Ci0gICAgICAgIHVuc2ln
bmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0
KCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6
Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUs
IG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25l
ZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKSAq
IDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgoc3RkOjptYXgo
bWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGlt
dW1BdHRhY2hlZFdpZHRoKSkpOwotICAgIH0KLSAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JW
aWV3V2luZG93LCBTV19TSE9XKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1EZXRhY2goKQotewotICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2Vz
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yRGV0YWNoV2luZG93
KSB7Ci0gICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICAgICAgbV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFdlYkluc3BlY3RvclByb3h5Q2xhc3NO
YW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAotICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwg
Q1dfVVNFREVGQVVMVCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LAot
ICAgICAgICAgICAgMCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0gICAgICAg
IDo6U2V0UHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQb2lu
dGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICBX
ZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVj
dGVkVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRS
ZWN0KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCAmcmVjdCk7Ci0gICAgYXV0byB3aW5kb3dJbmZv
ID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2lu
ZG93LCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5z
cGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2lu
ZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRI
ZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLQotICAgIGlmIChtX2lzVmlz
aWJsZSkKLSAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBTV19T
SE9XKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0
SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmll
d1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93
LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gaGVpZ2h0LCB3
aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCBoZWlnaHQsIFNXUF9OT1pP
UkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5k
b3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lu
ZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBT
V1BfTk9aT1JERVIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgYXV0byB3aW5kb3dJbmZv
ID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3
V2luZG93LCAwLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lkdGgsIHdpbmRvd0luZm8udG9w
LCB3aWR0aCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05P
Wk9SREVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdp
bmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3
aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3As
IFNXUF9OT1pPUkRFUik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QnJpbmdUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIC8qIHVybCAqLykKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dD
ZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFu
Z2VkKGJvb2wgLyogYXZhaWxhYmxlICovKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQot
ewotICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0
V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODRiMDkwZmRj
NzIuLjk1ODJjY2VlMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTQ0MjEsOCArNDQyMSw4IEBACiAJCUE1MTNGNTNGMjE1NEE1Q0Qw
MDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmll
dy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3RvcldLV2ViVmlldy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNTE4QjVEMTFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0b3JX
S1dlYlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3RvcldLV2ViVmlldy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3
IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3Mv
V0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tJbnNwZWN0
b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE1NDI5M0EyMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTQyOTNB
MzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJl
UmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDUyMTVB
RDEyRDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwNjIxNUFEMTJFMDAyNzlDRDkgLyog
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjY1NCwxMCArNjY1NCw2IEBACiAJCQkJ
RjREQjU0RTUyMzE5RTczMzAwOUUzMTU1IC8qIFdLSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIubW0gKi8sCiAJCQkJOTMzREY4MkQxQjNCQzA5MDAwQUVBOUUzIC8qIFdLSW1hZ2VQ
cmV2aWV3Vmlld0NvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzNERjgyRjFCM0JDMEI0MDBBRUE5RTMg
LyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbSAqLywKLQkJCQkwRjNDNzI1OTE5NkY1
RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8sCi0JCQkJMEYzQzcy
NTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSAqLywKLQkJ
CQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIuaCAqLywKLQkJCQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCiAJCQkJMkRENUUxMjcyMTBB
REM3QTAwREI2MDEyIC8qIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICovLAogCQkJCTJE
RDVFMTI2MjEwQURDN0EwMERCNjAxMiAvKiBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0g
Ki8sCiAJCQkJMkRCOTQyOTcyMzRFN0E3RjAwRTc3NkFEIC8qIFdLTW91c2VHZXN0dXJlUmVjb2du
aXplci5oICovLApAQCAtNzk4Myw2ICs3OTc5LDk5IEBACiAJCQlwYXRoID0gY29jb2E7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk5MUQ5NzBENDIzREE2RDI1MDA1N0RCQzMg
LyogSW5zcGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk5MUQ5NzBENTIzREE2RDUwMDA1N0RCQzMgLyogQWdlbnRzICovLAorCQkJCTkxRDk3MEQ3
MjNEQTZENUIwMDU3REJDMyAvKiBpb3MgKi8sCisJCQkJOTFEOTcwRDYyM0RBNkQ1NTAwNTdEQkMz
IC8qIG1hYyAqLywKKwkJCQlBNUUzOTFGQjIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFy
Z2V0UHJveHkuY3BwICovLAorCQkJCUE1RTM5MUZDMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0
b3JUYXJnZXRQcm94eS5oICovLAorCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCisJCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNE
IC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCisJCQkJQTU1QkE4MUExQkEyNUIxRTAw
N0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTFD
OEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCisJCQkJ
MUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCisJCQkJ
MUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmlu
ICovLAorCQkJCUE1NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRp
ZXMuY3BwICovLAorCQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JV
dGlsaXRpZXMuaCAqLywKKwkJCQlBNUVDNkFEMjIxNTFCRDY5MDA2NzdEMTcgLyogV2ViUGFnZURl
YnVnZ2FibGUuY3BwICovLAorCQkJCUE1RUM2QUQzMjE1MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdl
RGVidWdnYWJsZS5oICovLAorCQkJCUE1MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTUxM0Y1M0UyMTU0QTVDQzAwNjYyODQx
IC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IElu
c3BlY3RvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTkxRDk3MEQ1MjNE
QTZENTAwMDU3REJDMyAvKiBBZ2VudHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJKTsKKwkJCXBhdGggPSBBZ2VudHM7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OworCQk5MUQ5NzBENjIzREE2RDU1MDA1N0RCQzMgLyogbWFjICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBNUQzNTA0RDFENzhGMEQy
MDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCisJCQkJMUNBOEI5
MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAorCQkJCTk5
NEJBREYxMUY3RDc3RUEwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggKi8s
CisJCQkJOTk0QkFERjIxRjdENzdFQjAwQjU3MUU3IC8qIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIubW0gKi8sCisJCQkJQTUxOEI1RDAxRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tX
ZWJWaWV3LmggKi8sCisJCQkJQTUxOEI1RDExRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9y
V0tXZWJWaWV3Lm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQk5MUQ5NzBENzIzREE2RDVCMDA1N0RCQzMgLyogaW9zICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjNDNzI1OTE5NkY1
RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8sCisJCQkJMEYzQzcy
NTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSAqLywKKwkJ
CQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIuaCAqLywKKwkJCQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCisJCQkpOworCQkJcGF0aCA9
IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTkxRDk3MEUwMjNEQTZG
QjEwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTkxRDk3MEU1MjNEQTcwNDcwMDU3REJDMyAvKiBtYWMgKi8sCisJCQkJ
QTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmNwcCAqLywK
KwkJCQlBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAq
LywKKwkJCQlBNTVCQTgxNDFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3Bl
Y3Rvci5jcHAgKi8sCisJCQkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rv
ci5oICovLAorCQkJCTFDOEUyQTFDMTI3NzgzM0YwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IubWVz
c2FnZXMuaW4gKi8sCisJCQkJQkMxMTFBNTkxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkluc3BlY3Rv
ckNsaWVudC5jcHAgKi8sCisJCQkJQkMwMzJENkQxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkluc3Bl
Y3RvckNsaWVudC5oICovLAorCQkJCUE1NUJBODMyMUJBM0U2RkEwMDdDRDMzRCAvKiBXZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwICovLAorCQkJCUE1NUJBODMzMUJBM0U2RkEw
MDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCAqLywKKwkJCQlG
RUU0M0ZEMDFFNjdBRkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ci5jcHAgKi8sCisJCQkJRkVFNDNGRDExRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIuaCAqLywKKwkJCQlGRUU0M0ZEMjFFNjdBRkM2MDA3N0Q2RDEgLyog
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiAqLywKKwkJCQkxQzg5
MUQ2MjE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuY3BwICovLAorCQkJCTFDODkx
RDYzMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5oICovLAorCQkJCTFDODkxRDY0
MTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLywKKwkJCQlB
NTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgKi8s
CisJCQkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
aCAqLywKKwkJCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXIuY3BwICovLAorCQkJCUE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAvKiBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICovLAorCQkJCUE1NDNFMzA2MjE1QUQx
MkUwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCAq
LywKKwkJCQlBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBJbnNwZWN0b3I7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBFNTIzREE3MDQ3MDA1N0RCQzMg
LyogbWFjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkx
QzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlNYWMubW0gKi8sCisJCQkp
OworCQkJcGF0aCA9IG1hYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTkz
OTI4OEUwMjE0MDRERjAwMEVCQkEzMyAvKiBJbmRleGVkREIgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtODE5Niw2ICs4Mjg1LDcgQEAKIAkJCQlCQzBFNUZD
QjEyRDY5NkREMDAxMkE3MkEgLyogR2VvbG9jYXRpb24gKi8sCiAJCQkJMkQ3RTQzQkYyMzc1MkNE
OTAwRUE1Q0EwIC8qIEdQVSAqLywKIAkJCQlCQzIwNEVERjExQzgzRTcyMDA4RjMzNzUgLyogSW5q
ZWN0ZWRCdW5kbGUgKi8sCisJCQkJOTFEOTcwRTAyM0RBNkZCMTAwNTdEQkMzIC8qIEluc3BlY3Rv
ciAqLywKIAkJCQkzM0QzQTNCRDEzMzk2MDk4MDA3MDlCRTQgLyogTWVkaWFDYWNoZSAqLywKIAkJ
CQk0QTQxMEY0MTE5QUY3QjI3MDAyRUJBQjUgLyogTWVkaWFTdHJlYW0gKi8sCiAJCQkJNTEwNUIw
RDIxNjJGN0E1RTAwRTI3NzA5IC8qIE5ldHdvcmsgKi8sCkBAIC04MjQ2LDggKzgzMzYsNiBAQAog
CQkJCUJDMDMyRDZBMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5oICov
LAogCQkJCUJDMUJFMURGMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5j
cHAgKi8sCiAJCQkJQkMxQkUxREUxMkQ1NEE0MTAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uQ2xp
ZW50LmggKi8sCi0JCQkJQkMxMTFBNTkxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkluc3BlY3RvckNs
aWVudC5jcHAgKi8sCi0JCQkJQkMwMzJENkQxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkluc3BlY3Rv
ckNsaWVudC5oICovLAogCQkJCTUxM0ZGQjhFMjAxNDU5QzIwMDI1OTZFQSAvKiBXZWJNZXNzYWdl
UG9ydENoYW5uZWxQcm92aWRlci5jcHAgKi8sCiAJCQkJNTEzRkZCOEYyMDE0NTlDMjAwMjU5NkVB
IC8qIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmggKi8sCiAJCQkJMzEwOTk5NzExNDZD
NzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgKi8sCkBAIC04Mjk2LDkg
KzgzODQsNiBAQAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxl
ci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAq
LywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAotCQkJ
CUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgKi8s
Ci0JCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmgg
Ki8sCi0JCQkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJ
Lm1lc3NhZ2VzLmluICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2Vz
dHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAz
RDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLAogCQkJCTJEODE5QjlCMTg2
Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2VzLmlu
ICovLApAQCAtODMxOCwxNyArODQwMyw2IEBACiAJCQkJMUE1QjFDNTMxODk4N0VERjAwNEZDRjlC
IC8qIFdlYkRvY3VtZW50TG9hZGVyLmggKi8sCiAJCQkJQkMxMTFBREMxMTJGNUI5MzAwMzM3QkFC
IC8qIFdlYkZyYW1lLmNwcCAqLywKIAkJCQlCQzAzMkQ4OTEwRjQzN0EwMDA1OEMxNUEgLyogV2Vi
RnJhbWUuaCAqLywKLQkJCQkxQzhFMjgxRjEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9y
LmNwcCAqLywKLQkJCQkxQzhFMjgxRTEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmgg
Ki8sCi0JCQkJMUM4RTJBMUMxMjc3ODMzRjAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5tZXNzYWdl
cy5pbiAqLywKLQkJCQlBNTVCQTgzMjFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyLmNwcCAqLywKLQkJCQlBNTVCQTgzMzFCQTNFNkZBMDA3Q0QzM0Qg
LyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmggKi8sCi0JCQkJRkVFNDNGRDAx
RTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwICov
LAotCQkJCUZFRTQzRkQxMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyLmggKi8sCi0JCQkJRkVFNDNGRDIxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUM4OTFENjIxOUIx
MjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmNwcCAqLywKLQkJCQkxQzg5MUQ2MzE5QjEy
NEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCAqLywKLQkJCQkxQzg5MUQ2NDE5QjEyNEZG
MDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQkM4NTdGODQx
MkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcCAqLywKIAkJ
CQlCQzg1N0Y4MzEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIu
aCAqLywKIAkJCQlCQzk2M0Q2QTExM0REMTkyMDA1NzRCRTIgLyogV2ViUGFnZS5jcHAgKi8sCkBA
IC04MzM2LDEyICs4NDEwLDYgQEAKIAkJCQlDMENFNzI1ODEyNDdFNERBMDBCQzBFQzQgLyogV2Vi
UGFnZS5tZXNzYWdlcy5pbiAqLywKIAkJCQlCQzdCNjIxNDEyQTQyMTlBMDBEMTc0QTQgLyogV2Vi
UGFnZUdyb3VwUHJveHkuY3BwICovLAogCQkJCUJDN0I2MjEzMTJBNDIxOUEwMEQxNzRBNCAvKiBX
ZWJQYWdlR3JvdXBQcm94eS5oICovLAotCQkJCUE1NDNFMzBBMjE1QzhBODQwMDI3OUNEOSAvKiBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcCAqLywKLQkJCQlBNTQzRTMwODIxNUM4QTgzMDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5oICovLAotCQkJCUE1NDNFMzA5MjE1QzhBODMw
MDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgKi8sCi0JCQkJ
QTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmggKi8sCi0JCQkJQTU0M0UzMDYyMTVBRDEyRTAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwICovLAotCQkJCUE1NDNFMzA1MjE1QUQxMkQwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggKi8sCiAJCQkJ
MkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLywKIAkJCQky
RDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLywKIAkJCQlCQ0Ew
RUY3RTEyMzMxRTc4MDA3RDNDRkIgLyogV2ViVW5kb1N0ZXAuY3BwICovLApAQCAtODM2NSw2ICs4
NDMzLDcgQEAKIAkJCQkxQUI3RDRDNzEyODhBQTlBMDBDRkQwOEMgLyogRG93bmxvYWRzICovLAog
CQkJCTUxNUJFMTdCMUQ1NEVGNUEwMEREN0M2OCAvKiBHYW1lcGFkICovLAogCQkJCTJEN0U0M0JC
MjM3NTJDQzQwMEVBNUNBMCAvKiBHUFUgKi8sCisJCQkJOTFEOTcwRDQyM0RBNkQyNTAwNTdEQkMz
IC8qIEluc3BlY3RvciAqLywKIAkJCQkyREE5NDRBODE4ODRFOUFCMDBFRDg2REIgLyogaW9zICov
LAogCQkJCUJDMTExQjE4MTEyRjVGQjQwMDMzN0JBQiAvKiBMYXVuY2hlciAqLywKIAkJCQlCQ0NG
MDg1QzExM0YzQjc1MDBDNjUwQzUgLyogbWFjICovLApAQCAtODM5NCw4ICs4NDYzLDYgQEAKIAkJ
CQkyREQ1QTcyQTFFQkYwOUE3MDA5QkE1OTcgLyogSGlkZGVuUGFnZVRocm90dGxpbmdBdXRvSW5j
cmVhc2VzQ291bnRlci5oICovLAogCQkJCTgzOUEyRjJGMUUyMDY3MzkwMDM5MDU3RSAvKiBIaWdo
UGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5jcHAgKi8sCiAJCQkJODM5QTJGMzAxRTIw
NjczOTAwMzkwNTdFIC8qIEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyLmggKi8s
Ci0JCQkJQTVFMzkxRkIyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmNw
cCAqLywKLQkJCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJv
eHkuaCAqLywKIAkJCQk1Q0VBQkEyQjIzMzMyNTE0MDA3OTc3OTcgLyogTGVnYWN5R2xvYmFsU2V0
dGluZ3MuY3BwICovLAogCQkJCTVDRUFCQTJBMjMzMzI0NzcwMDc5Nzc5NyAvKiBMZWdhY3lHbG9i
YWxTZXR0aW5ncy5oICovLAogCQkJCTMxNjA3RjM4MTk2MjcwMDIwMDlCODdEQSAvKiBMZWdhY3lT
ZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKQEAgLTg0MTEsOSArODQ3OCw2IEBACiAJCQkJODMwNDhB
RTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLywKIAkJCQk0
NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwICovLAog
CQkJCTQ2ODM1NjlBMjFFODFDQzcwMDZFMjdBMyAvKiBQcm92aXNpb25hbFBhZ2VQcm94eS5oICov
LAotCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5jcHAgKi8sCi0JCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmggKi8sCi0JCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUJDMTExQjA4MTEyRjVFM0MwMDMz
N0JBQiAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLywKIAkJCQkxQTMwMDY2QzExMTBGNEY3
MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovLAogCQkJCTVDQTk4NTQ5MjEwQkVC
NUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8sCkBAIC04NDkzLDExICs4NTU3
LDYgQEAKIAkJCQlCQzFCRTFGMTEyRDU0REJEMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92
aWRlci5jcHAgKi8sCiAJCQkJQkMxQkUxRjAxMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0
aW9uUHJvdmlkZXIuaCAqLywKIAkJCQk1MUM4RTE5QjFGMjE2MTcyMDBCRjczMUIgLyogV2ViSWNv
bkRhdGFiYXNlLmggKi8sCi0JCQkJMUM4RTI4MzMxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3Bl
Y3RvclByb3h5LmNwcCAqLywKLQkJCQkxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5z
cGVjdG9yUHJveHkuaCAqLywKLQkJCQkxQzc3QzE5NTEyODhBODcyMDA2QTc0MkYgLyogV2ViSW5z
cGVjdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJQTU1QkE4MjcxQkEzOEUxRTAwN0NEMzNE
IC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgKi8sCi0JCQkJQTU1QkE4MjgxQkEzOEUxRTAw
N0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5oICovLAogCQkJCUM5OEM0OEEzMUI2RkQ0
QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuY3BwICovLAogCQkJCUM5
OEM0OEE0MUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuaCAq
LywKIAkJCQlDOUMxODMzNzFCNzNGRDZBMDA3MDM2QTcgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNN
YW5hZ2VyQ2xpZW50LmNwcCAqLywKQEAgLTg1MDgsMTYgKzg1NjcsMTIgQEAKIAkJCQk3Q0NDQzhG
OTFBNUY1MEZEMDA4RkIwREEgLyogV2ViTmF2aWdhdGlvblN0YXRlLmggKi8sCiAJCQkJQkMxREZF
QTMxMkIzMUY4NzAwNURGNzMwIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3Bw
ICovLAogCQkJCUJDMURGRUEyMTJCMzFGODcwMDVERjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclByb3h5LmggKi8sCi0JCQkJQTVFQzZBRDIyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBh
Z2VEZWJ1Z2dhYmxlLmNwcCAqLywKLQkJCQlBNUVDNkFEMzIxNTFCRDY5MDA2NzdEMTcgLyogV2Vi
UGFnZURlYnVnZ2FibGUuaCAqLywKIAkJCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLywKIAkJCQk4MzcyREIyNzFBNjc1NjI4
MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8sCiAJCQkJQkM3
QjYyMDUxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgKi8sCiAJCQkJQkM3QjYy
MDQxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oICovLAogCQkJCTJEOUVBMzEwMUE5
NkQ5RUIwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwICovLAogCQkJ
CTJEOUVBMzBFMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCAqLywKLQkJCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXIuY3BwICovLAotCQkJCUE1MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAvKiBXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlci5oICovLAogCQkJCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAv
KiBXZWJQYWdlUHJveHkuY3BwICovLAogCQkJCUJDMDMyRENCMTBGNDM4OUYwMDU4QzE1QSAvKiBX
ZWJQYWdlUHJveHkuaCAqLywKIAkJCQlCQ0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYgLyogV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtOTE4Myw3ICs5MjM4LDYgQEAKIAkJCQk3QzZEMzdG
QTE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSAqLywKIAkJCQkxQUFGMjYzNzE0
Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCAqLywKIAkJ
CQkxQUFGMjYzNjE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEubW0gKi8sCi0JCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJ
TWFjLm1tICovLAogCQkJCUJDOTYzRDZEMTEzREQxQTUwMDU3NEJFMiAvKiBXZWJQYWdlTWFjLm1t
ICovLAogCQkJCTI5Q0Q1NUE4MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0QmFzZS5oICovLAogCQkJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5tbSAqLywKQEAgLTkyNjAsNyArOTMxNCw2IEBA
CiAJCQkJMUFGREU2NUIxOTU0RThENTAwQzQ4RkZBIC8qIExlZ2FjeVNlc3Npb25TdGF0ZUNvZGlu
Zy5jcHAgKi8sCiAJCQkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBs
TWFjLmggKi8sCiAJCQkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBs
TWFjLm1tICovLAotCQkJCUE1RDM1MDREMUQ3OEYwRDIwMDUxMjRBOSAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eU1hYy5tbSAqLywKIAkJCQlFMThFNjkwOTE2OUI1NjNGMDA5QjY2NzAgLyogU2Vj
SXRlbVNoaW1Qcm94eS5jcHAgKi8sCiAJCQkJRTE4RTY5MEExNjlCNTYzRjAwOUI2NjcwIC8qIFNl
Y0l0ZW1TaGltUHJveHkuaCAqLywKIAkJCQlFMThFNjkwRDE2OUI1N0RGMDA5QjY2NzAgLyogU2Vj
SXRlbVNoaW1Qcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTkyODEsNyArOTMzNCw2IEBACiAJCQkJ
RjZENjMyQkExMzNEMTgxQjAwNzQzRDc3IC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94eU1hYy5tbSAq
LywKIAkJCQlFNTY4QjkyMDIwQTNBQzZBMDBFM0M4NTYgLyogV2ViRGF0YUxpc3RTdWdnZXN0aW9u
c0Ryb3Bkb3duTWFjLmggKi8sCiAJCQkJRTU2OEI5MjEyMEEzQUM2QTAwRTNDODU2IC8qIFdlYkRh
dGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5tbSAqLywKLQkJCQkxQ0E4QjkzNTEyN0M3NzRF
MDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCiAJCQkJQkM4NTdFODUxMkI3
MUVCQjAwRURFQjJFIC8qIFdlYlBhZ2VQcm94eU1hYy5tbSAqLywKIAkJCQlCQzU3NTA5NTEyNjhG
M0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMuaCAqLywKIAkJCQlCQzU3NTA5NjEy
NjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMubW0gKi8sCkBAIC05MjkyLDEw
ICs5MzQ0LDYgQEAKIAkJCQlDRENBODVDNjEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5tbSAqLywKIAkJCQk5MzIxRDU4NTFBMzhFRTNDMDA4MDUyQkUgLyog
V0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMyMUQ1ODcxQTM4RUU3NDAw
ODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSAqLywKLQkJCQk5OTRCQURG
MTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovLAotCQkJ
CTk5NEJBREYyMUY3RDc3RUIwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
ICovLAotCQkJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmll
dy5oICovLAotCQkJCUE1MThCNUQxMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2Vi
Vmlldy5tbSAqLywKIAkJCQkwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1Zp
ZXcuaCAqLywKIAkJCQkwRkNCNEU1RDE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcu
bW0gKi8sCiAJCQkJNTEzRTQ2MkIxQUQ4Mzc1NjAwMTYyMzRBIC8qIFdLU2hhcmluZ1NlcnZpY2VQ
aWNrZXJEZWxlZ2F0ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTU4ZDhmMGMyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNw
cApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgorCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2Vy
dGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgorCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykg
JiYgIVBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
UmVmPFJlbW90ZVdlYkluc3BlY3RvclVJPiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdl
YlBhZ2UmIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVj
dG9yVUkocGFnZSkpOworfQorCitSZW1vdGVXZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2ViSW5zcGVj
dG9yVUkoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXIocGFnZSkKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
aW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3Ry
aW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpCit7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1v
dmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENv
bW1hbmRzVVJMOworCisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlzKTsKKworICAgIG1fZnJvbnRlbmRBUElE
aXNwYXRjaGVyLnJlc2V0KCk7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hD
b21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHRydWUpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVy
bCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVu
ZGVkVG9VUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1l
c3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICBpZiAo
bV9mcm9udGVuZEhvc3QpCisgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50
KCk7CisKKyAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRl
KHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKKyAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRv
R2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOworCisgICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHRydWUpOworCisgICAgYnJp
bmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3Bh
Z2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdp
bmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1f
cGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7CisgICAgZnJhbWVSZWN0Lm1v
dmUoeCwgeSk7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3Qo
ZnJhbWVSZWN0KTsKK30KKworV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgp
LCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
Y2xvc2VXaW5kb3coKQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7CisKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRl
bnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKK3sK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5p
ZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRl
KCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgp
LCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpPcGVuSW5OZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9y
Y2VTYXZlQXMpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUo
ZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlk
ZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIC8vIERvIG5v
dGhpbmcuIFRoZSByZW1vdGUgc2lkZSBjYW4ga25vdyBpZiB0aGUgbWFpbiByZXNvdXJjZSBjaGFu
Z2VkLgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29u
c3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKworSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6ZGVidWdnYWJsZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RlYnVnZ2FibGVJbmZvLmRlYnVnZ2FibGVUeXBlOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVi
dWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVi
dWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
ZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKK30KKworYm9vbCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6dGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Rl
YnVnZ2FibGVJbmZvLnRhcmdldElzU2ltdWxhdG9yOworfQorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9URUxFTUVUUlkpCitib29sIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0
aWNMb2dnaW5nKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCku
ZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNvbnN0IERp
YWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCit7Cisg
ICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25v
c3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBXZWIgSW5z
cGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6
Ok5vKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dp
bmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisgICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25v
c3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ug
c2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCisgICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9y
dHNEaWFnbm9zdGljTG9nZ2luZygpKTsKKyAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
ID0gYXZhaWxhYmxlOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21t
YW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2lu
Z0F2YWlsYWJsZSk7Cit9CisjZW5kaWYKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShHVEspICYmICFQTEFURk9STShXSU4pCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Omxv
Y2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclVJLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdl
Ykluc3BlY3RvclVJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI0
YWUxYzFkYWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaD4KKyNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNh
dGVJbmZvOworY2xhc3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUGFnZTsKKworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yVUkgZmluYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxSZW1vdGVXZWJJbnNwZWN0b3JVST4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlciwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYpOwor
CisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFJlbW90ZVdlYkluc3BlY3RvclVJTWVz
c2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBDYWxsZWQgYnkgUmVtb3Rl
V2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKKyAgICB2b2lkIGluaXRpYWxpemUoRGVidWdnYWJsZUlu
Zm9EYXRhJiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKTsKKyAgICB2b2lkIGRp
ZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgZGlkQXBwZW5kKGNvbnN0IFN0cmlu
ZyYgdXJsKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmKTsK
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIHZvaWQgc2V0RGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7CisjZW5kaWYKKworICAgIC8vIFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50CisgICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2hhbmdl
U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQg
eCwgZmxvYXQgeSkgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzUmVtb3RlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxl
VHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0YXJnZXRQ
bGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0QnVpbGRWZXJz
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldFByb2R1Y3RWZXJzaW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGJyaW5n
VG9Gcm9udCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlb3BlbigpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJyaWRl
OworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOworICAgIHZvaWQg
YXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRl
OworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBz
dXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBkaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGU7IH0KKyAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgY29uc3QgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGlj
dGlvbmFyeSYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBib29sIGNhblNhdmUoKSBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gMTsgfQorICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBv
dmVycmlkZSB7IH0KKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
KSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQpIG92ZXJyaWRlIHsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlbW90ZVdlYkluc3Bl
Y3RvclVJKFdlYlBhZ2UmKTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7CisgICAgUmVm
UHRyPFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7CisgICAg
RGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87CisgICAgU3RyaW5nIG1fYmFja2Vu
ZENvbW1hbmRzVVJMOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9v
bCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5p
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJmN2U0Yzg3OGQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBSZW1vdGVXZWJJ
bnNwZWN0b3JVSSB7CisgICAgSW5pdGlhbGl6ZShzdHJ1Y3QgV2ViS2l0OjpEZWJ1Z2dhYmxlSW5m
b0RhdGEgZGVidWdnYWJsZUluZm8sIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwpCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisgICAgRGlkU2F2ZShTdHJpbmcgdXJsKQor
ICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0
cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4zMzIyNWQxM2RkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcApAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3Bl
Y3Rvci5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZUxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JG
cm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0aW9uQWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVh
dHVyZXMuaD4KKworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1
MDsKK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7
CitzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7CisKK25hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxXZWJJbnNwZWN0
b3I+IFdlYkluc3BlY3Rvcjo6Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yKHBhZ2UpKTsKK30KKworV2ViSW5zcGVjdG9yOjpXZWJJ
bnNwZWN0b3IoV2ViUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCitXZWJJ
bnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQoreworICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlv
bikKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0
KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVy
KCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6
QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgLy8gV2UgbWln
aHQgcmVjZWl2ZSBtdWx0aXBsZSB1cGRhdGVzIGlmIHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBw
ZWQgaW50byBhIFdlYlBhZ2VQcm94eQorICAgIC8vIHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9j
ZXNzIGVzdGFibGlzaGVkIHRoZSBjb25uZWN0aW9uLgorICAgIGlmIChtX2Zyb250ZW5kQ29ubmVj
dGlvbikgeworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisjaWYgVVNFKFVO
SVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5l
Y3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURl
c2NyaXB0b3IoKSk7CisjZWxpZiBPUyhEQVJXSU4pCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5w
b3J0KCkpOworI2VsaWYgT1MoV0lORE9XUykKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRs
ZSgpKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYK
KworICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9u
SWRlbnRpZmllcikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9u
ID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVu
dGlmaWVyLCAqdGhpcyk7CisgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKKworICAg
IGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCisgICAg
ICAgIGNhbGxiYWNrKCk7CisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpCit7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRp
ZmllcigpKTsKKworICAgIC8vIElmIHdlIHRyaWVkIHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZv
cmUgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gbm8gY29ubmVjdGlvbiBleGlzdHMgeWV0LgorICAgIGlm
IChtX2Zyb250ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
aW52YWxpZGF0ZSgpOworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Cisg
ICAgfQorCisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7CisKKyAgICBt
X2F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGZhbHNlOworfQor
Cit2b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3I6OndoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChG
dW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0
aW9uKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsK
K30KKworLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvciBtZXNzYWdlcwordm9pZCBXZWJJbnNwZWN0
b3I6OnNob3coKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZSgpCit7CisgICAgaWYgKCFtX3BhZ2Ut
PmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENsb3NlIGNvdWxkIGJlIGNh
bGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGVhcmRvd24uCisgICAgaWYgKCFtX2Zyb250ZW5k
Q29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xvc2VGcm9udGVuZENvbm5lY3Rp
b24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgfTsKKworICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2Ut
PmNvcmVQYWdlKCk7CisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBGcmFtZSYgaW5zcGVjdGVkTWFpbkZyYW1lID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCk7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1h
aW5GcmFtZS5kb2N1bWVudCgpLCBpbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExv
Y2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVy
LCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6
OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5p
dGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsKKworICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0
aW9uIHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLCBmcmFtZUxvYWRSZXF1ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCks
IE5hdmlnYXRpb25UeXBlOjpMaW5rQ2xpY2tlZCB9OworICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNw
ZWN0ZWRQYWdlLT5jaHJvbWUoKS5jcmVhdGVXaW5kb3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFt
ZUxvYWRSZXF1ZXN0LCB7IH0sIGFjdGlvbik7CisgICAgaWYgKCFuZXdQYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBuZXdQYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUo
ZnJhbWVMb2FkUmVxdWVzdCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3Jp
cHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0KQoreworICAgIGlmICghbV9wYWdlLT5jb3Jl
UGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93Q29uc29sZSgpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dDb25zb2xlKCksIDApOworICAgIH0pOworfQorCit2
b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291cmNlcygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dSZXNvdXJjZXMoKSwgMCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikKK3sKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICBTdHJpbmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVy
ID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFn
ZW50KCkuZnJhbWVJZChmcmFtZS0+Y29yZUZyYW1lKCkpOworCisgICAgd2hlbkZyb250ZW5kQ29u
bmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGlu
c3BlY3RvckZyYW1lSWRlbnRpZmllciksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3Bl
Y3Rvcjo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2Uo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuc2hvdygpOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlz
aGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U3RhcnRQYWdlUHJvZmlsaW5nKCksIDApOworICAgIH0pOworfQorCit2
b2lkIFdlYkluc3BlY3Rvcjo6c3RvcFBhZ2VQcm9maWxpbmcoKQoreworICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0
aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdG9wUGFnZVByb2ZpbGluZygpLCAwKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCit7Cisg
ICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoZW5G
cm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50
U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAg
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9w
YWdlLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVy
KCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCit7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVk
KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCitib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0
YWNoV2luZG93KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gRG9uJ3QgYWxsb3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5z
cGVjdG9yIC0tIHR3byBpbnNwZWN0b3JzIGluIG9uZSB3aW5kb3cgaXMgdG9vIG11Y2ghCisgICAg
aWYgKG1fcGFnZS0+aXNJbnNwZWN0b3JQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4g
dG8gYWxsb3cgc3dpdGNoaW5nIHNpZGVzLgorICAgIGlmIChtX2F0dGFjaGVkKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRv
dyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9y
IHNpemUuCisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgdW5zaWduZWQg
aW5zcGVjdGVkUGFnZVdpZHRoID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCktPnZpc2libGVXaWR0aCgpOworICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9
IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKKyAgICBy
ZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBt
aW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBpbnNwZWN0ZWRQYWdlV2lkdGg7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKK3sKKyAgICBpZiAobV9hdHRh
Y2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlz
LT5jYW5BdHRhY2hXaW5kb3coKTsKKyAgICBpZiAobV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5B
dHRhY2hXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJldmlvdXNDYW5BdHRhY2gg
PSBjYW5BdHRhY2hXaW5kb3c7CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0
YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZp
ZXIoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjI2Yjg5ZTUyMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaApAQCAtMCwwICsxLDEw
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0
b3IgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVJbnNw
ZWN0b3I+LCBwcml2YXRlIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFdlYkluc3BlY3Rvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKKworICAgIFdlYlBhZ2Uq
IHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KKworICAgIHZvaWQgdXBkYXRlRG9ja2lu
Z0F2YWlsYWJpbGl0eSgpOworCisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYklu
c3BlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92
ZXJyaWRlIHsgY2xvc2UoKTsgfQorICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSkgb3ZlcnJpZGUgeyBjbG9zZSgpOyB9CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGNs
b3NlKCk7CisKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7
CisKKyAgICB2b2lkIGNhbkF0dGFjaFdpbmRvdyhib29sJiByZXN1bHQpOworCisgICAgdm9pZCBz
aG93Q29uc29sZSgpOworICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOworCisgICAgdm9pZCBzaG93
TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyKTsKKworICAgIHZv
aWQgc2V0QXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkgeyBtX2F0dGFjaGVkID0gYXR0YWNoZWQ7IH0K
KworICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0KTsK
KworICAgIHZvaWQgc3RhcnRQYWdlUHJvZmlsaW5nKCk7CisgICAgdm9pZCBzdG9wUGFnZVByb2Zp
bGluZygpOworCisgICAgdm9pZCBzdGFydEVsZW1lbnRTZWxlY3Rpb24oKTsKKyAgICB2b2lkIHN0
b3BFbGVtZW50U2VsZWN0aW9uKCk7CisgICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sKTsKKyAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKTsKKyAgICB2b2lk
IHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPik7CisK
KyAgICB2b2lkIHNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQpOworCisgICAg
dm9pZCBkaXNjb25uZWN0RnJvbVBhZ2UoKSB7IGNsb3NlKCk7IH0KKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50OworCisgICAgZXhwbGljaXQgV2ViSW5zcGVj
dG9yKFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3IoKTsKKworICAgIGJvb2wg
Y2FuQXR0YWNoV2luZG93KCk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3JDbGll
bnQKKyAgICB2b2lkIG9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KTsK
KyAgICB2b2lkIGNsb3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7CisKKyAgICB2b2lkIGJyaW5nVG9G
cm9udCgpOworCisgICAgdm9pZCB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoRnVu
Y3Rpb248dm9pZCgpPiYmKTsKKworICAgIFdlYlBhZ2UqIG1fcGFnZTsKKworICAgIFJlZlB0cjxJ
UEM6OkNvbm5lY3Rpb24+IG1fZnJvbnRlbmRDb25uZWN0aW9uOworICAgIFZlY3RvcjxGdW5jdGlv
bjx2b2lkKCk+PiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnM7CisKKyAgICBib29sIG1fYXR0
YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wcmV2aW91c0NhbkF0dGFjaCB7IGZhbHNlIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhZjc0YjVlNmIwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3Iu
bWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3IgeworICAgIFNob3co
KQorICAgIENsb3NlKCkKKworICAgIFNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpCisKKyAgICBT
aG93Q29uc29sZSgpCisgICAgU2hvd1Jlc291cmNlcygpCisKKyAgICBTaG93TWFpblJlc291cmNl
Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikKKworICAg
IE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQorCisgICAgU3RhcnRQYWdlUHJvZmlsaW5nKCkKKyAg
ICBTdG9wUGFnZVByb2ZpbGluZygpCisKKyAgICBTdGFydEVsZW1lbnRTZWxlY3Rpb24oKQorICAg
IFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKKworICAgIFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6
OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiMDY4MDE5ZWY4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgorCisj
aW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKKyNpbmNs
dWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheS5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2NsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCBmaW5hbCA6IHB1YmxpYyBHcmFw
aGljc0xheWVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQoV2ViSW5zcGVjdG9yQ2xpZW50JiBpbnNw
ZWN0b3JDbGllbnQpCisgICAgICAgIDogbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50
KQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50
KCkgeyB9Citwcml2YXRlOgorICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uRW5kZWQoY29uc3QgR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX2luc3BlY3RvckNsaWVudC5hbmltYXRpb25FbmRlZEZvckxheWVyKGxheWVyKTsKKyAgICB9
CisgICAgCisgICAgV2ViSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKK307CisK
K1dlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqIHBhZ2UpCisg
ICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1faGlnaGxpZ2h0T3ZlcmxheShudWxscHRyKQorewor
fQorCitXZWJJbnNwZWN0b3JDbGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQoKQoreworICAgIGZv
ciAoYXV0byYgbGF5ZXIgOiBtX3BhaW50UmVjdExheWVycykKKyAgICAgICAgbGF5ZXItPnJlbW92
ZUZyb21QYXJlbnQoKTsKKyAgICAKKyAgICBtX3BhaW50UmVjdExheWVycy5jbGVhcigpOworCisg
ICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSAmJiBtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAg
IG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFn
ZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRl
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQo
KQoreworICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IG1fcGFnZS0+aW5zcGVjdG9y
KFdlYlBhZ2U6OkxhenlDcmVhdGlvblBvbGljeTo6VXNlRXhpc3RpbmdPbmx5KSkKKyAgICAgICAg
aW5zcGVjdG9yLT5jbG9zZSgpOworCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50Ojpmcm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCBjb3VudCkKK3sKKyAg
ICBtX3BhZ2UtPmluc3BlY3RvckZyb250ZW5kQ291bnRDaGFuZ2VkKGNvdW50KTsKK30KKworSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIFdlYkluc3BlY3RvckNsaWVudDo6b3BlbkxvY2FsRnJv
bnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBtX3BhZ2UtPmlu
c3BlY3RvcigpLT5vcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChjb250cm9sbGVyLT5pc1VuZGVy
VGVzdCgpKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6YnJpbmdGcm9udGVuZFRvRnJvbnQoKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3Rv
cigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5icmluZ1RvRnJvbnQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFJlc2l6ZU1haW5GcmFtZShGcmFtZSopCit7Cisg
ICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCkt
PnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmhpZ2hsaWdodCgpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsK
KyAgICAgICAgYXV0byBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhp
cyk7CisgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJsYXkucHRyKCk7
CisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5z
dGFsbFBhZ2VPdmVybGF5KFdURk1vdmUoaGlnaGxpZ2h0T3ZlcmxheSksIFBhZ2VPdmVybGF5OjpG
YWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNw
bGF5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFk
ZU91dEFuaW1hdGlvbigpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlz
cGxheSgpOworICAgIH0KKyNlbHNlCisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5nZXRIaWdobGlnaHQoaGlnaGxp
Z2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtOjpEb2N1bWVudCk7CisgICAg
bV9wYWdlLT5zaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CisjZW5kaWYKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCisgICAgICAgIG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJs
YXkoKm1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyNl
bHNlCisgICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7CisjZW5kaWYKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9w
YWludFJlY3RPdmVybGF5KSB7CisgICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVy
bGF5OjpjcmVhdGUoKnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwor
ICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3Rh
bGxQYWdlT3ZlcmxheSgqbV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkRvTm90RmFkZSk7CisgICAgfQorCisgICAgaWYgKCFtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGll
bnQpCisgICAgICAgIG1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCA9IG1ha2VVbmlxdWU8UmVw
YWludEluZGljYXRvckxheWVyQ2xpZW50PigqdGhpcyk7CisKKyAgICBhdXRvIHBhaW50TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xh
eWVyRmFjdG9yeSgpLCAqbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KTsKKyAgICAKKyAgICBw
YWludExheWVyLT5zZXROYW1lKCJwYWludCByZWN0Iik7CisgICAgcGFpbnRMYXllci0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIHBhaW50TGF5ZXItPnNldFBvc2l0aW9uKHJl
Y3QubG9jYXRpb24oKSk7CisgICAgcGFpbnRMYXllci0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Cisg
ICAgcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDEuMGYsIDAuMGYsIDAuMGYs
IDAuMmYpKTsKKworICAgIEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpOworICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8Rmxv
YXRBbmltYXRpb25WYWx1ZT4oMCwgMSkpOworCisgICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFr
ZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLjI1LCAwKSk7CisgICAgCisgICAgYXV0byBv
cGFjaXR5QW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBvcGFjaXR5QW5pbWF0
aW9uLT5zZXREdXJhdGlvbigwLjI1KTsKKworICAgIHBhaW50TGF5ZXItPmFkZEFuaW1hdGlvbihm
YWRlS2V5ZnJhbWVzLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW1hdGlvbi5wdHIoKSwgIm9wYWNp
dHkiX3MsIDApOworICAgIAorICAgIEdyYXBoaWNzTGF5ZXImIHJhd0xheWVyID0gcGFpbnRMYXll
ci5nZXQoKTsKKyAgICBtX3BhaW50UmVjdExheWVycy5hZGQoV1RGTW92ZShwYWludExheWVyKSk7
CisKKyAgICBHcmFwaGljc0xheWVyJiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVy
bGF5LT5sYXllcigpOworICAgIG92ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocmF3TGF5ZXIpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25z
dCBHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyKiBub25Db25zdExh
eWVyID0gY29uc3RfY2FzdDxHcmFwaGljc0xheWVyKj4obGF5ZXIpOworICAgIG5vbkNvbnN0TGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhaW50UmVjdExheWVycy5yZW1vdmUoKm5v
bkNvbnN0TGF5ZXIpOworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpCit7CisgICAgbV9wYWdlLT5z
aG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aGlkZUluc3BlY3RvckluZGljYXRpb24oKQoreworICAgIG1fcGFnZS0+aGlkZUluc3BlY3Rvcklu
ZGljYXRpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGlu
Z0Zvck5vZGUoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChlbmFibGVkKQorICAgICAgICBtX3Bh
Z2UtPmVuYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFn
ZS0+ZGlzYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCit7Cisg
ICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCkt
PmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgaWYg
KG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnRpbWVs
aW5lUmVjb3JkaW5nQ2hhbmdlZChhY3RpdmUpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVu
YWJsZWQpCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+
aW5zcGVjdG9yKCktPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVk
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVy
bGF5JiwgUGFnZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwg
cmVzZXQgaXQuCisgICAgQVNTRVJUKG1faGlnaGxpZ2h0T3ZlcmxheSk7CisgICAgbV9oaWdobGln
aHRPdmVybGF5ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1v
dmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQoreworICAgIG1f
cGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29u
dGV4dCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVy
bGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3YzNlZTE0MmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAt
MCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJs
YXkuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgSW50UmVj
dDsKK2NsYXNzIFBhZ2VPdmVybGF5OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViUGFnZTsKK2NsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKKworY2xhc3MgV2Vi
SW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0
ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK2ZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CitwdWJsaWM6
CisgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5XZWJJbnNw
ZWN0b3JDbGllbnQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JDbGll
bnQKKyAgICB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkKSBvdmVycmlkZTsKKworICAgIEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsKiBvcGVuTG9jYWxGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgpIG92
ZXJyaWRlOworICAgIHZvaWQgZGlkUmVzaXplTWFpbkZyYW1lKFdlYkNvcmU6OkZyYW1lKikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGhpZ2hsaWdodCgpIG92ZXJyaWRlOworICAgIHZvaWQgaGlkZUhp
Z2hsaWdodCgpIG92ZXJyaWRlOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lk
IHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBoaWRlSW5zcGVj
dG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRTZXRTZWFyY2hpbmdGb3JO
b2RlKGJvb2wpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25D
aGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2Vk
KGJvb2wpIG92ZXJyaWRlOworCisgICAgYm9vbCBvdmVycmlkZXNTaG93UGFpbnRSZWN0cygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHNob3dQYWludFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldE1vY2tDYXB0
dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPikgZmluYWw7CisKKyAgICAv
LyBQYWdlT3ZlcmxheTo6Q2xpZW50CisgICAgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZE1vdmVU
b1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICBib29sIG1v
dXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1v
dXNlRXZlbnQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRGb3JMYXllcihj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisKKyAgICBXZWJQYWdlKiBtX3BhZ2U7Cisg
ICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKKyAgICAKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQ7CisgICAgSGFzaFNldDxSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4+IG1f
cGFpbnRSZWN0TGF5ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmMxODllOTgyNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5o
IgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nj
cmlwdFN0YXRlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXI6OldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdl
JiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyOjpyZXNldCgpCit7CisgICAgbV9mcm9udGVuZExvYWRlZCA9IGZh
bHNlOworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CisgICAgbV9xdWV1ZS5jbGVhcigpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZnJvbnRlbmRMb2FkZWQo
KQoreworICAgIG1fZnJvbnRlbmRMb2FkZWQgPSB0cnVlOworCisgICAgZXZhbHVhdGVRdWV1ZWRF
eHByZXNzaW9ucygpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cjo6c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKG1fZnJvbnRlbmRMb2FkZWQpOworICAgIEFTU0VS
VCghbV9zdXNwZW5kZWQpOworICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBt
X3N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyOjp1bnN1c3BlbmQoKQoreworICAgIEFTU0VSVChtX3N1c3BlbmRlZCk7CisKKyAgICBt
X3N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNz
aW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1h
bmQsICJcIl0pIikpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBh
cmd1bWVudCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIklu
c3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgXCIiLCBhcmd1
bWVudCwgIlwiXSkiKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRj
aGVyOjpkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50
KQoreworICAgIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24obWFrZVN0cmluZygiSW5zcGVjdG9y
RnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wiIiwgY29tbWFuZCwgIlwiLCAiLCBhcmd1bWVudCA/ICJ0
cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXI6OmRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZy
b250ZW5kQVBJLmRpc3BhdGNoTWVzc2FnZUFzeW5jKCIsIG1lc3NhZ2UsICIpIikpOworfQorCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVPclF1ZXVlRXhw
cmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCit7CisgICAgaWYgKCFtX2Zyb250ZW5k
TG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7CisgICAgICAgIG1fcXVldWUuYXBwZW5kKGV4cHJlc3Np
b24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fcXVldWUuaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoIW1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQo
KS5pc1BhdXNlZCgpKTsKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0
KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOworfQorCit2b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVRdWV1ZWRFeHByZXNz
aW9ucygpCit7CisgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiA6IG1fcXVldWUpIHsKKyAgICAgICAg
QVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQo
KSk7CisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5leGVj
dXRlU2NyaXB0SWdub3JpbmdFeGNlcHRpb24oZXhwcmVzc2lvbik7CisgICAgfQorCisgICAgbV9x
dWV1ZS5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5mNWM0MjRlMmQ4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgK
QEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0b3JG
cm9udGVuZEFQSURpc3BhdGNoZXIgeworcHVibGljOgorICAgIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcihXZWJQYWdlJik7CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBm
cm9udGVuZExvYWRlZCgpOworCisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCB1bnN1c3Bl
bmQoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCk7
CisgICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBjb25zdCBT
dHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmQsIGJvb2wgYXJndW1lbnQpOworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlQXN5bmMo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGV2YWx1YXRlT3JR
dWV1ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBldmFsdWF0ZVF1ZXVlZEV4
cHJlc3Npb25zKCk7CisKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgRGVxdWU8U3RyaW5nPiBt
X3F1ZXVlOworICAgIGJvb2wgbV9mcm9udGVuZExvYWRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X3N1c3BlbmRlZCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jMDE3ODUxZjY4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlci5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgiCisKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9WTS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KKyNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8V2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyKTsKK30KKworV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
cjo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCisgICAgOiBtX3F1ZXVlKFdvcmtR
dWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIiKSkKK3sKK30KKworV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6fldlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKQoreworfQorCit2b2lkIFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbikKK3sKKyAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9xdWV1ZS5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlcjo6bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQoreworICAgIC8v
IElmIHRoZSB3ZWIgcHJvY2VzcyBoYXMgbm90IGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgeWV0LCB0
aGVuIHRoZXJlCisgICAgLy8gaXMgbm8gVk0gdG8gYmUgbm90aWZpZWQgYW5kIHRodXMgbm8gaW5m
aW5pdGUgbG9vcCB0byBicmVhay4gQmFpbCBvdXQuCisgICAgaWYgKCFXZWJDb3JlOjpjb21tb25W
TU9yTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBKU0M6OlZNJiB2bSA9IFdlYkNvcmU6
OmNvbW1vblZNKCk7CisgICAgdm0ubm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGY2YmQwMjBhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIgOiBwdWJsaWMg
SVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gY3JlYXRlKCk7Cisg
ICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKTsKKyAgICAKKyAgICB2b2lkIGlu
aXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiopOworICAgIAorcHJpdmF0ZToKKyAg
ICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7CisgICAgLy8gSVBDOjpDb25uZWN0
aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2
b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7CisgICAgCisgICAgUmVmPFdvcmtRdWV1ZT4g
bV9xdWV1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ODcwZTUyYjczYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIgeworICAgIE5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCkKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFmYWE2ZjZlZGU1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JVSS5jcHAKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgorCisjaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRl
SW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9E
T01XcmFwcGVyV29ybGQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxXZWJJbnNwZWN0b3JVST4gV2ViSW5zcGVj
dG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFdlYkluc3BlY3RvclVJKHBhZ2UpKTsKK30KKworV2ViSW5zcGVjdG9yVUk6OldlYkluc3BlY3Rv
clVJKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyKHBhZ2UpCisgICAgLCBtX2RlYnVnZ2FibGVJbmZvKERlYnVnZ2FibGVJbmZv
RGF0YTo6ZW1wdHkoKSkKK3sKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQodHJ1ZSk7CisgICAgUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJbWFnZUJpdG1hcEVuYWJsZWQodHJ1
ZSk7CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnNldFdlYkdMMkVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSTo6ZXN0YWJsaXNoQ29ubmVjdGlvbihXZWJQYWdlUHJveHlJZGVudGlmaWVy
IGluc3BlY3RlZFBhZ2VJZGVudGlmaWVyLCBjb25zdCBEZWJ1Z2dhYmxlSW5mb0RhdGEmIGRlYnVn
Z2FibGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQorewor
ICAgIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIgPSBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllcjsK
KyAgICBtX2RlYnVnZ2FibGVJbmZvID0gZGVidWdnYWJsZUluZm87CisgICAgbV91bmRlclRlc3Qg
PSB1bmRlclRlc3Q7CisgICAgbV9pbnNwZWN0aW9uTGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWw7CisK
KyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOworCisgICAgbV9mcm9udGVuZENv
bnRyb2xsZXIgPSAmbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAg
ICBtX2Zyb250ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7
CisKKyAgICB1cGRhdGVDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnVw
ZGF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7CisgICAg
ICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9iYWNrZW5k
Q29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNv
bm5lY3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigpOworICAgIElQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihzb2NrZXRQYWlyLnNlcnZlcik7Cisg
ICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KHNvY2tldFBhaXIuY2xpZW50
KTsKKyNlbGlmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFD
SF9QT1JUX05VTEw7CisgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpICE9IEtFUk5fU1VDQ0VT
UykKKyAgICAgICAgQ1JBU0goKTsKKworICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1h
Y2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZ
UEVfTUFLRV9TRU5EKSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBJ
UEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIobGlzdGVuaW5n
UG9ydCk7CisgICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGxpc3Rlbmlu
Z1BvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAg
ICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5D
bGllbnQ7CisgICAgSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlm
aWVycyhjb25uZWN0aW9uSWRlbnRpZmllciwgY29ubkNsaWVudCk7CisgICAgSVBDOjpBdHRhY2ht
ZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGNvbm5DbGllbnQpOworI2Vsc2UKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybjsKKyNlbmRpZgorCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NP
Q0tFVFMpIHx8IE9TKERBUldJTikgfHwgUExBVEZPUk0oV0lOKQorICAgIG1fYmFja2VuZENvbm5l
Y3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlv
bklkZW50aWZpZXIsICp0aGlzKTsKKyAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5vcGVuKCk7Cisj
ZW5kaWYKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRGcm9udGVuZENvbm5l
Y3Rpb24oY29ubmVjdGlvbkNsaWVudFBvcnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAg
aWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENs
aWVudCgpOworCisgICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNy
ZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7CisgICAgbV9mcm9udGVuZEhvc3QtPmFkZFNl
bGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIC8vIFRlbGwgdGhlIG5ldyBmcm9u
dGVuZCBhYm91dCB0aGUgY3VycmVudCBkb2NrIHN0YXRlLiBJZiB0aGUgd2luZG93IG9iamVjdAor
ICAgIC8vIGNsZWFyZWQgZHVlIHRvIGEgcmVsb2FkLCB0aGUgZG9jayBzdGF0ZSB3b24ndCBiZSBy
ZXNlbnQgZnJvbSBVSVByb2Nlc3MuCisgICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKG1fZG9ja2lu
Z1VuYXZhaWxhYmxlKTsKKyAgICBzZXREb2NrU2lkZShtX2RvY2tTaWRlKTsKKyAgICBzZXRJc1Zp
c2libGUobV9pc1Zpc2libGUpOworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkZy
b250ZW5kTG9hZGVkKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworCisgICAgYnJpbmdU
b0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCit7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6bW92ZVdp
bmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1f
cGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7CisgICAgZnJhbWVSZWN0Lm1v
dmUoeCwgeSk7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3Qo
ZnJhbWVSZWN0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKK3sK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRv
dygpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOworCisgICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsK
KyAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX2Jh
Y2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9mcm9udGVuZENv
bnRyb2xsZXIpIHsKKyAgICAgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50KG51bGxwdHIpOworICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9IG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250
ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
ZmllciA9IHsgfTsKKyAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjpyZW9wZW4oKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZW9w
ZW4oKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6OnJlc2V0U3RhdGUoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZXNl
dFN0YXRlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCitXZWJDb3JlOjpVc2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIFdlYkluc3BlY3RvclVJOjp1c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6
cmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCit7CisgICAgYXV0byYgd2ViUHJvY2Vz
cyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIHN3aXRjaCAoc2lkZSkgeworICAgIGNh
c2UgRG9ja1NpZGU6OlVuZG9ja2VkOgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEZXRhY2goKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9j
a1NpZGU6OlJpZ2h0OgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2NrU2lk
ZTo6TGVmdDoKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2NrU2lkZTo6Qm90
dG9tOgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hCb3R0b20oKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKK3sKKyAgICBBU0NJSUxpdGVyYWwg
c2lkZVN0cmluZyB7IEFTQ0lJTGl0ZXJhbDo6bnVsbCgpIH07CisKKyAgICBzd2l0Y2ggKHNpZGUp
IHsKKyAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKKyAgICAgICAgc2lkZVN0cmluZyA9ICJ1
bmRvY2tlZCJfczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoK
KyAgICAgICAgc2lkZVN0cmluZyA9ICJyaWdodCJfczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIERvY2tTaWRlOjpMZWZ0OgorICAgICAgICBzaWRlU3RyaW5nID0gImxlZnQiX3M7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgorICAgICAgICBzaWRlU3Ry
aW5nID0gImJvdHRvbSJfczsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kb2NrU2lk
ZSA9IHNpZGU7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQo
InNldERvY2tTaWRlIl9zLCBTdHJpbmcoc2lkZVN0cmluZykpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjpzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKK3sKKyAgICBt
X2RvY2tpbmdVbmF2YWlsYWJsZSA9IHVuYXZhaWxhYmxlOworCisgICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHVuYXZh
aWxhYmxlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0SXNWaXNpYmxlKGJvb2wgdmlz
aWJsZSkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7CisKKyAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldElzVmlzaWJsZSJfcywgdmlzaWJsZSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIGhlaWdodCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQg
d2lkdGgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2lu
ZG93V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSTo6Y2hhbmdlU2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6b3Blbklu
TmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9u
KSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6T3BlbkluTmV3VGFiKHVybCksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgV1RG
OjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVB
cyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
OjphcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYg
Y29udGVudCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVu
YW1lLCBjb250ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQo
dXJsU3RyaW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmlj
YXRlKGNlcnRpZmljYXRlSW5mbyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCitib29sIFdlYkluc3BlY3RvclVJOjpzdXBw
b3J0c0RpYWdub3N0aWNMb2dnaW5nKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29u
c3QgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkK
K3sKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dE
aWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZURpY3Rpb25hcnkoZXZlbnROYW1lLCAiV2ViIEluc3Bl
Y3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpO
byk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9n
Z2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcg
aXMgYWxzbyBlbmFibGVkLgorICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25v
c3RpY0xvZ2dpbmcoKSk7CisgICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWls
YWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDb25zb2xlKCkKK3sK
KyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dDb25zb2xl
Il9zKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd1Jlc291cmNlcygpCit7CisgICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93UmVzb3VyY2VzIl9z
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGNv
bnN0IFN0cmluZyYgZnJhbWVJZGVudGlmaWVyKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd01haW5SZXNvdXJjZUZvckZyYW1lIl9zLCBmcmFtZUlk
ZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFBhZ2VQcm9maWxpbmco
KQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGlt
ZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCB0cnVlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6c3RvcFBhZ2VQcm9maWxpbmcoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCBmYWxzZSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCit7CisgICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0
aW9uRW5hYmxlZCJfcywgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BFbGVt
ZW50U2VsZWN0aW9uKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNldEVsZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCBmYWxzZSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUk6OmRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9u
dGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzYXZlZFVSTCJfcywgdXJsKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgiYXBwZW5kZWRUb1VS
TCJfcywgdXJsKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hl
ci5kaXNwYXRjaE1lc3NhZ2VBc3luYyhtZXNzYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6cGFnZVBhdXNlZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuc3VzcGVuZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpwYWdlVW5wYXVzZWQoKQoreworICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLnVuc3VzcGVuZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0
YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZv
LnRhcmdldFBsYXRmb3JtTmFtZTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRC
dWlsZFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdl
dEJ1aWxkVmVyc2lvbjsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0
VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJv
ZHVjdFZlcnNpb247Cit9CisKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oV0lOKQorYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yVUkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjM5
ZjIxYzliNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclVJLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkRl
YnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEluc3BlY3RvckNvbnRy
b2xsZXI7CitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87CitjbGFzcyBGbG9hdFJlY3Q7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0b3JV
SSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkluc3BlY3RvclVJPiwgcHJpdmF0ZSBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYp
OworCisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3RvclVJTWVzc2Fn
ZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNs
aWVudAorICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyAvKiBE
byBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBhZ2UgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkIGFu
ZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4gKi8gfQorICAgIHZvaWQgZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZVdpbmRvdygpOyB9CisKKyAgICAvLyBDYWxs
ZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKKyAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rp
b24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3Qg
RGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25M
ZXZlbCk7CisgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uKCk7CisKKyAgICB2b2lkIHNob3dDb25z
b2xlKCk7CisgICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7CisKKyAgICB2b2lkIHNob3dNYWluUmVz
b3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcik7CisKKyAgICB2b2lk
IHN0YXJ0UGFnZVByb2ZpbGluZygpOworICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKKwor
ICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7CisgICAgdm9pZCBzdG9wRWxlbWVudFNl
bGVjdGlvbigpOworCisgICAgdm9pZCBhdHRhY2hlZEJvdHRvbSgpIHsgc2V0RG9ja1NpZGUoRG9j
a1NpZGU6OkJvdHRvbSk7IH0KKyAgICB2b2lkIGF0dGFjaGVkUmlnaHQoKSB7IHNldERvY2tTaWRl
KERvY2tTaWRlOjpSaWdodCk7IH0KKyAgICB2b2lkIGF0dGFjaGVkTGVmdCgpIHsgc2V0RG9ja1Np
ZGUoRG9ja1NpZGU6OkxlZnQpOyB9CisgICAgdm9pZCBkZXRhY2hlZCgpIHsgc2V0RG9ja1NpZGUo
RG9ja1NpZGU6OlVuZG9ja2VkKTsgfQorCisgICAgdm9pZCBzZXREb2NrU2lkZShEb2NrU2lkZSk7
CisgICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCk7CisKKyAgICB2b2lkIHNldElz
VmlzaWJsZShib29sKTsKKworICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Cisg
ICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOworCisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZh
bGlhYmxlKTsKKyNlbmRpZgorCisgICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQKKyAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGZy
b250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92
ZXJyaWRlOworICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRl
OworCisgICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJp
bmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RyaW5nKCk7IH0K
KyAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsgfQorICAgIFN0
cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFy
Z2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldFByb2R1
Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdW5zaWduZWQgaW5zcGVjdGlvbkxl
dmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbnNwZWN0aW9uTGV2ZWw7IH0KKworICAg
IHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbG9zZVdpbmRvdygpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXNldFN0YXRl
KCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZv
aWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5n
ZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5n
ZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJyaWRlOworCisgICAgdm9pZCBjaGFu
Z2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7CisKKyAgICBib29s
IGNhblNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIHVy
bCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBm
b3JjZVNhdmVBcykgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcm
IHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOworCisgICAgdm9pZCBp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hv
d0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOwor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBzdXBwb3J0c0RpYWdu
b3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7IH0K
KyAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBXVEY6OlN0cmluZyYgZXZlbnROYW1l
LCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5
Jikgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHBhZ2VQYXVzZWQoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1VuZGVyVGVz
dCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOworCisgICAgV2ViUGFnZSYgbV9wYWdlOwor
ICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlzcGF0
Y2hlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250
ZW5kSG9zdDsKKyAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2JhY2tlbmRDb25uZWN0aW9u
OworCisgICAgLy8gS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGZyb250ZW5kJ3MgaW5zcGVjdG9yIGNv
bnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaAorICAgIC8vIGNvcmVQYWdlKCksIHNp
bmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRoZSBmcm9udGVuZCdzIHBhZ2UgaGFzIHN0YXJ0ZWQg
ZGVzdHJ1Y3Rpb24uCisgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogbV9mcm9udGVu
ZENvbnRyb2xsZXIgeyBudWxscHRyIH07CisKKyAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVyIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7CisgICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNlIH07
CisgICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87CisgICAgYm9vbCBtX2Rv
Y2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNl
IH07CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBtX2RpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKKyNlbmRpZgorCisgICAgRG9ja1NpZGUgbV9k
b2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tlZCB9OworICAgIHVuc2lnbmVkIG1faW5zcGVjdGlv
bkxldmVsIHsgMSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTRmMTM4
NWQ0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSW5z
cGVjdG9yVUkgeworICAgIEVzdGFibGlzaENvbm5lY3Rpb24oV2ViS2l0OjpXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIGluc3BlY3RlZFBhZ2VJZGVudGlmaWVyLCBzdHJ1Y3QgV2ViS2l0OjpEZWJ1Z2dh
YmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNw
ZWN0aW9uTGV2ZWwpCisgICAgVXBkYXRlQ29ubmVjdGlvbigpCisKKyAgICBBdHRhY2hlZEJvdHRv
bSgpCisgICAgQXR0YWNoZWRSaWdodCgpCisgICAgQXR0YWNoZWRMZWZ0KCkKKyAgICBEZXRhY2hl
ZCgpCisgICAgU2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wgdW5hdmFpbGFibGUpCisgICAgU2V0
SXNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZ
KQorICAgIFNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQorI2Vu
ZGlmCisKKyAgICBTaG93Q29uc29sZSgpCisgICAgU2hvd1Jlc291cmNlcygpCisKKyAgICBTaG93
TWFpblJlc291cmNlRm9yRnJhbWUoU3RyaW5nIGZyYW1lSWRlbnRpZmllcikKKworICAgIFN0YXJ0
UGFnZVByb2ZpbGluZygpCisgICAgU3RvcFBhZ2VQcm9maWxpbmcoKQorCisgICAgU3RhcnRFbGVt
ZW50U2VsZWN0aW9uKCkKKyAgICBTdG9wRWxlbWVudFNlbGVjdGlvbigpCisKKyAgICBEaWRTYXZl
KFN0cmluZyB1cmwpCisgICAgRGlkQXBwZW5kKFN0cmluZyB1cmwpCisKKyAgICBTZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoU3RyaW5nIG1lc3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTcwZjZmZDUyMDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYgcGFn
ZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCitTdHJpbmcgV2ViUGFnZUluc3BlY3RvclRh
cmdldDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvVGFyZ2V0SUQobV9wYWdl
LmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6Y29ubmVj
dChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5
cGUpCit7CisgICAgaWYgKG1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2hhbm5l
bCA9IG1ha2VVbmlxdWU8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4obV9w
YWdlLCBpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKTsKKyAgICBpZiAobV9wYWdlLmNvcmVQ
YWdlKCkpCisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
Y29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQ6OmRpc2Nvbm5lY3QoKQoreworICAgIGlmICghbV9jaGFubmVsKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsK
KyAgICBtX2NoYW5uZWwucmVzZXQoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsK
K30KKworU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQoV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIgcGFnZUlEKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJwYWdlLSIs
IHBhZ2VJRC50b1VJbnQ2NCgpKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZj
YmQ3ZmFkNWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQpOworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQo
V2ViUGFnZSYpOworICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0OworCisg
ICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KKworICAgIFN0cmlu
ZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
c2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5k
KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElE
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlJiBtX3Bh
Z2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWw+IG1fY2hhbm5lbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZjkwMTdjNGVkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgiCisKKyNpbmNs
dWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6V2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdl
KQorICAgICwgbV9wYWdlVGFyZ2V0KHBhZ2UpCit7CisgICAgLy8gRG8gbm90IHNlbmQgdGhlIHBh
Z2UgdGFyZ2V0IHRvIHRoZSBVSVByb2Nlc3MsIHRoZSBXZWJQYWdlUHJveHkgd2lsbCBtYW5hZ2Vy
IHRoaXMgZm9yIHVzLgorICAgIG1fdGFyZ2V0cy5zZXQobV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIo
KSwgJm1fcGFnZVRhcmdldCk7Cit9CisKK1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
Ojp+V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoKQoreworfQorCit2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjphZGRUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdGFyZ2V0cy5zZXQo
dGFyZ2V0LmlkZW50aWZpZXIoKSwgJnRhcmdldCk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkNyZWF0ZUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpLCB0
YXJnZXQudHlwZSgpKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXI6OnJlbW92ZVRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQorewor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodGFyZ2V0LmlkZW50aWZpZXIoKSAhPSBtX3BhZ2VUYXJn
ZXQuaWRlbnRpZmllcigpLCAiU2hvdWxkIG5ldmVyIHJlbW92ZSB0aGUgbWFpbiB0YXJnZXQuIik7
CisKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZXN0cm95SW5zcGVj
dG9yVGFyZ2V0KHRhcmdldC5pZGVudGlmaWVyKCkpKTsKKworICAgIG1fdGFyZ2V0cy5yZW1vdmUo
dGFyZ2V0LmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENv
bnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQorewor
ICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7CisgICAgaWYgKCF0YXJn
ZXQpCisgICAgICAgIHJldHVybjsKKworICAgIHRhcmdldC0+Y29ubmVjdChjb25uZWN0aW9uVHlw
ZSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmRpc2Nvbm5l
Y3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKK3sKKyAgICBhdXRvIHRhcmdldCA9
IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1
cm47CisKKyAgICB0YXJnZXQtPmRpc2Nvbm5lY3QoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGF1dG8gdGFyZ2V0
ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJl
dHVybjsKKworICAgIHRhcmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43Yzkz
MWRhZDFjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBJbnNwZWN0b3JUYXJn
ZXQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoV2Vi
UGFnZSYpOworICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcigpOworCisgICAg
dm9pZCBhZGRUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKKyAgICB2b2lkIHJl
bW92ZVRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYpOworCisgICAgdm9pZCBjb25u
ZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgdm9pZCBkaXNjb25uZWN0SW5zcGVjdG9yKGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tl
bmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworcHJp
dmF0ZToKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldCBt
X3BhZ2VUYXJnZXQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0Kj4gbV90YXJnZXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTFiNWY3MTM3MzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbC5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
KFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFnZShw
YWdlKQorICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKKyAgICAsIG1fY29ubmVjdGlvblR5cGUo
Y29ubmVjdGlvblR5cGUpCit7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRv
SW5zcGVjdG9yRnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgxODRhYzViZGEy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwpOworcHVibGljOgorICAgIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgdmlydHVh
bCB+V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCgpID0gZGVmYXVsdDsKKwor
cHJpdmF0ZToKKyAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fY29ubmVjdGlvblR5cGU7IH0KKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOworCisgICAgV2ViUGFnZSYg
bV9wYWdlOworICAgIFN0cmluZyBtX3RhcmdldElkOworICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25UeXBlIHsgSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGUgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4yYjRmOTdmZThkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApAQCAt
MCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCisjaW5jbHVkZSAiUmVtb3Rl
V2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvRmls
ZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNw
ZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Cit9CisK
K1N0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3Iv
TG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uOWU1NWYzZDU4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQpA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldlYkluc3BlY3RvclVJLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJ
bnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBT
dHJpbmcgd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICBOU0J1bmRs
ZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
Ykluc3BlY3RvclVJIl07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJsb2Nh
bGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJdOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIAorICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBh
dGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVj
dG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiB3ZWJJbnNw
ZWN0b3JVSUxvY2FsaXplZFN0cmluZ3NVUkwoKTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2ViSW5z
cGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwNjgwMTllZjguLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yQ2xp
ZW50LmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rv
ci5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3Mu
aD4KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0
b3JPdmVybGF5Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50IGZpbmFsIDog
cHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudChXZWJJbnNwZWN0b3JD
bGllbnQmIGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgOiBtX2luc3BlY3RvckNsaWVudChpbnNw
ZWN0b3JDbGllbnQpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5SZXBhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQoKSB7IH0KLXByaXZhdGU6Ci0gICAgdm9pZCBub3RpZnlBbmltYXRpb25FbmRl
ZChjb25zdCBHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIobGF5
ZXIpOwotICAgIH0KLSAgICAKLSAgICBXZWJJbnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xp
ZW50OwotfTsKLQotV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViUGFn
ZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9oaWdobGlnaHRPdmVybGF5KG51
bGxwdHIpCi17Ci19Ci0KLVdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgp
Ci17Ci0gICAgZm9yIChhdXRvJiBsYXllciA6IG1fcGFpbnRSZWN0TGF5ZXJzKQotICAgICAgICBs
YXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIAotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmNs
ZWFyKCk7Ci0KLSAgICBpZiAobV9wYWludFJlY3RPdmVybGF5ICYmIG1fcGFnZS0+Y29yZVBhZ2Uo
KSkKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51
bmluc3RhbGxQYWdlT3ZlcmxheSgqbV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFk
ZU1vZGU6OkZhZGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFn
ZURlc3Ryb3llZCgpCi17Ci0gICAgaWYgKFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gbV9wYWdl
LT5pbnNwZWN0b3IoV2ViUGFnZTo6TGF6eUNyZWF0aW9uUG9saWN5OjpVc2VFeGlzdGluZ09ubHkp
KQotICAgICAgICBpbnNwZWN0b3ItPmNsb3NlKCk7Ci0KLSAgICBkZWxldGUgdGhpczsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkIGNv
dW50KQotewotICAgIG1fcGFnZS0+aW5zcGVjdG9yRnJvbnRlbmRDb3VudENoYW5nZWQoY291bnQp
OwotfQotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogV2ViSW5zcGVjdG9yQ2xpZW50Ojpv
cGVuTG9jYWxGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQotewotICAg
IG1fcGFnZS0+aW5zcGVjdG9yKCktPm9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGNvbnRyb2xs
ZXItPmlzVW5kZXJUZXN0KCkpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpicmluZ0Zyb250ZW5kVG9Gcm9udCgpCi17Ci0gICAgaWYgKG1fcGFn
ZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmJyaW5nVG9Gcm9u
dCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkUmVzaXplTWFpbkZyYW1lKEZy
YW1lKikKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5p
bnNwZWN0b3IoKS0+dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIW1faGlnaGxpZ2h0
T3ZlcmxheSkgewotICAgICAgICBhdXRvIGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6
Y3JlYXRlKCp0aGlzKTsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3Zl
cmxheS5wdHIoKTsKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoV1RGTW92ZShoaWdobGlnaHRPdmVybGF5KSwgUGFn
ZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5z
ZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2hpZ2hsaWdodE92ZXJs
YXktPnN0b3BGYWRlT3V0QW5pbWF0aW9uKCk7Ci0gICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+
c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfQotI2Vsc2UKLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0
OwotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmdldEhpZ2hs
aWdodChoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OkRvY3Vt
ZW50KTsKLSAgICBtX3BhZ2UtPnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCi17Ci0j
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1faGlnaGxpZ2h0T3ZlcmxheSkKLSAg
ICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3Rh
bGxQYWdlT3ZlcmxheSgqbV9oaWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkZhZGUpOwotI2Vsc2UKLSAgICBtX3BhZ2UtPmhpZGVJbnNwZWN0b3JIaWdobGlnaHQoKTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX3BhaW50UmVjdE92ZXJsYXkpIHsKLSAgICAgICAgbV9wYWludFJlY3RPdmVybGF5
ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpE
b2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcGFpbnRJbmRpY2F0
b3JMYXllckNsaWVudCkKLSAgICAgICAgbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50ID0gbWFr
ZVVuaXF1ZTxSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ+KCp0aGlzKTsKLQotICAgIGF1dG8g
cGFpbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3BhZ2UtPmRyYXdpbmdBcmVhKCkt
PmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICptX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpOwot
ICAgIAotICAgIHBhaW50TGF5ZXItPnNldE5hbWUoInBhaW50IHJlY3QiKTsKLSAgICBwYWludExh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0
UG9zaXRpb24ocmVjdC5sb2NhdGlvbigpKTsKLSAgICBwYWludExheWVyLT5zZXRTaXplKHJlY3Qu
c2l6ZSgpKTsKLSAgICBwYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMS4wZiwg
MC4wZiwgMC4wZiwgMC4yZikpOwotCi0gICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmFkZUtleWZyYW1l
cyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFr
ZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCAxKSk7Ci0KLSAgICBmYWRlS2V5ZnJhbWVz
Lmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAuMjUsIDApKTsKLSAgICAK
LSAgICBhdXRvIG9wYWNpdHlBbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIG9w
YWNpdHlBbmltYXRpb24tPnNldER1cmF0aW9uKDAuMjUpOwotCi0gICAgcGFpbnRMYXllci0+YWRk
QW5pbWF0aW9uKGZhZGVLZXlmcmFtZXMsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5QW5pbWF0aW9uLnB0
cigpLCAib3BhY2l0eSJfcywgMCk7Ci0gICAgCi0gICAgR3JhcGhpY3NMYXllciYgcmF3TGF5ZXIg
PSBwYWludExheWVyLmdldCgpOwotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmFkZChXVEZNb3ZlKHBh
aW50TGF5ZXIpKTsKLQotICAgIEdyYXBoaWNzTGF5ZXImIG92ZXJsYXlSb290TGF5ZXIgPSBtX3Bh
aW50UmVjdE92ZXJsYXktPmxheWVyKCk7Ci0gICAgb3ZlcmxheVJvb3RMYXllci5hZGRDaGlsZChy
YXdMYXllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRpb25FbmRlZEZv
ckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIEdyYXBoaWNzTGF5ZXIq
IG5vbkNvbnN0TGF5ZXIgPSBjb25zdF9jYXN0PEdyYXBoaWNzTGF5ZXIqPihsYXllcik7Ci0gICAg
bm9uQ29uc3RMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFpbnRSZWN0TGF5ZXJz
LnJlbW92ZSgqbm9uQ29uc3RMYXllcik7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkKLXsKLSAg
ICBtX3BhZ2UtPnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9wYWdlLT5oaWRl
SW5zcGVjdG9ySW5kaWNhdGlvbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlk
U2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGVuYWJsZWQpCi0g
ICAgICAgIG1fcGFnZS0+ZW5hYmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9wYWdlLT5kaXNhYmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotfQotI2VuZGlmCi0K
LXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFj
dGl2ZSkKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5p
bnNwZWN0b3IoKS0+ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkK
LXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0
b3IoKS0+dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9u
YWw8Ym9vbD4gZW5hYmxlZCkKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAg
ICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJy
aWRlKGVuYWJsZWQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVUb1Bh
Z2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQotewotICAgIGlmIChwYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGlzIG1vdmluZyBhd2F5IGZyb20gdGhl
IHdlYiBwYWdlLCByZXNldCBpdC4KLSAgICBBU1NFUlQobV9oaWdobGlnaHRPdmVybGF5KTsKLSAg
ICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQotewotfQotCi12b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlSZWN0Ki8p
Ci17Ci0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hp
Z2hsaWdodChjb250ZXh0KTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZl
bnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YzNlZTE0MmUxLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFz
cyBHcmFwaGljc0xheWVyOwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFBhZ2VPdmVybGF5OwotfQot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFJlcGFpbnRJbmRp
Y2F0b3JMYXllckNsaWVudDsKLQotY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xp
ZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLWZyaWVuZCBjbGFzcyBSZXBhaW50
SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdl
YlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKLQotcHJpdmF0ZToK
LSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQKLSAgICB2b2lkIGluc3BlY3RlZFBhZ2VE
ZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2ln
bmVkKSBvdmVycmlkZTsKLQotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBvcGVuTG9j
YWxGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVzaXpl
TWFpbkZyYW1lKFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGhpZ2hsaWdo
dCgpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJyaWRlOwotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wpIG92ZXJyaWRlOwotI2VuZGlm
Ci0KLSAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAg
IHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9v
bCBvdmVycmlkZXNTaG93UGFpbnRSZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2b2lkIHNob3dQYWludFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShP
cHRpb25hbDxib29sPikgZmluYWw7Ci0KLSAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAg
dm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2Uq
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkm
LCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgYW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kik7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1f
aGlnaGxpZ2h0T3ZlcmxheTsKLSAgICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+
IG1fcGFpbnRSZWN0T3ZlcmxheTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwYWludEluZGljYXRv
ckxheWVyQ2xpZW50PiBtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0gICAgSGFzaFNldDxS
ZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4+IG1fcGFpbnRSZWN0TGF5ZXJzOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDU1OGQ4ZjBjMjQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgotCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVm
PFJlbW90ZVdlYkluc3BlY3RvclVJPiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBh
Z2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9y
VUkocGFnZSkpOwotfQotCi1SZW1vdGVXZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2ViSW5zcGVjdG9y
VUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIocGFnZSkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5p
dGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5n
JiBiYWNrZW5kQ29tbWFuZHNVUkwpCi17Ci0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUo
ZGVidWdnYWJsZUluZm8pOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1h
bmRzVVJMOwotCi0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5z
ZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlzKTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLnJlc2V0KCk7Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21t
YW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHRydWUpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkK
LXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVk
VG9VUkwiX3MsIHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3Nh
Z2VUb0JhY2tlbmQobWVzc2FnZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBpZiAobV9m
cm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7
Ci0KLSAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRo
aXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xv
YmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHRydWUpOwotCi0gICAgYnJpbmdU
b0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2Uu
aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFn
ZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUo
eCwgeSk7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJh
bWVSZWN0KTsKLX0KLQotV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCi17
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y2xv
c2VXaW5kb3coKQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7Ci0KLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRp
ZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKLXsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5pZGVu
dGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkK
LXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6b3Bl
bkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpPcGVuSW5OZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VT
YXZlQXMpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmls
ZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50
aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1fcGFn
ZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNwZWN0
ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIC8vIERvIG5vdGhp
bmcuIFRoZSByZW1vdGUgc2lkZSBjYW4ga25vdyBpZiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2Vk
LgotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3Qg
Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX3Bh
Z2UuaWRlbnRpZmllcigpKTsKLX0KLQotSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6ZGVidWdnYWJsZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rl
YnVnZ2FibGVJbmZvLmRlYnVnZ2FibGVUeXBlOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdn
YWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdn
YWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1
Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKLX0KLQotYm9vbCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6dGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVn
Z2FibGVJbmZvLnRhcmdldElzU2ltdWxhdG9yOwotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9U
RUxFTUVUUlkpCi1ib29sIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNM
b2dnaW5nKCkKLXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlh
Z25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNvbnN0IERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCi17Ci0gICAg
bV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBXZWIgSW5zcGVj
dG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5v
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3Rp
YyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0
dGluZyBpcyBhbHNvIGVuYWJsZWQuCi0gICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNE
aWFnbm9zdGljTG9nZ2luZygpKTsKLSAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0g
YXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSk7Ci19Ci0jZW5kaWYKLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2Fs
aXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0
b3JVSS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhZTFjMWRhYTEuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYklu
c3BlY3RvclVJLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0jaW5jbHVkZSA8
d3RmL0RlcXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRpZmljYXRlSW5m
bzsKLWNsYXNzIEZsb2F0UmVjdDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YlBhZ2U7Ci0KLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJIGZpbmFsIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVtb3RlV2ViSW5zcGVjdG9yVUk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIs
IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKLQotICAg
IC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VS
ZWNlaXZlci5jcHAKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gQ2FsbGVkIGJ5IFJlbW90ZVdlYklu
c3BlY3RvclVJIG1lc3NhZ2VzCi0gICAgdm9pZCBpbml0aWFsaXplKERlYnVnZ2FibGVJbmZvRGF0
YSYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7Ci0gICAgdm9pZCBkaWRTYXZl
KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIGRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVy
bCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKGJvb2wpOwotI2VuZGlmCi0KLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudAotICAgIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5nZVNoZWV0
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0
V2luZG93RHJhZygpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZs
b2F0IHkpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KLSAgICBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQotICAgIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUg
ZGVidWdnYWJsZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0UGxhdGZv
cm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0
IG92ZXJyaWRlOwotICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBicmluZ1RvRnJv
bnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsb3NlV2luZG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW9wZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNhdmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKSBvdmVycmlkZTsKLSAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKLSAg
ICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgc3VwcG9y
dHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOwotICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dp
bmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlOyB9Ci0gICAgdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5h
bWUsIGNvbnN0IFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25h
cnkmKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIDE7IH0KLSAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJp
ZGUgeyB9Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBv
dmVycmlkZSB7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdGVXZWJJbnNwZWN0b3JV
SShXZWJQYWdlJik7Ci0KLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OwotICAgIERlYnVn
Z2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOwotICAgIFN0cmluZyBtX2JhY2tlbmRDb21t
YW5kc1VSTDsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgbV9k
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJmN2U0Yzg3OGQuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3Nh
Z2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0j
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3Rv
clVJIHsKLSAgICBJbml0aWFsaXplKHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJbmZvRGF0YSBk
ZWJ1Z2dhYmxlSW5mbywgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCkKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIFNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJv
b2wgYXZhaWxhYmxlKQotI2VuZGlmCi0KLSAgICBEaWRTYXZlKFN0cmluZyB1cmwpCi0gICAgRGlk
QXBwZW5kKFN0cmluZyB1cmwpCi0KLSAgICBTZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nIG1l
c3NhZ2UpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMjVkMTNkZDMuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgot
Ci0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldl
YlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENs
aWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9OYXZpZ2F0aW9uQWN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
U2NyaXB0Q29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4K
LQotc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLXN0YXRp
YyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7Ci1zdGF0aWMg
Y29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0b3I+IFdlYklu
c3BlY3Rvcjo6Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViSW5zcGVjdG9yKHBhZ2UpKTsKLX0KLQotV2ViSW5zcGVjdG9yOjpXZWJJbnNwZWN0b3Io
V2ViUGFnZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotewotfQotCi1XZWJJbnNwZWN0b3I6
On5XZWJJbnNwZWN0b3IoKQotewotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAg
ICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3I6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KQotewotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChj
YW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQot
Ci12b2lkIFdlYkluc3BlY3Rvcjo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVu
dCBlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCi17Ci0gICAgLy8gV2UgbWlnaHQgcmVjZWl2
ZSBtdWx0aXBsZSB1cGRhdGVzIGlmIHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBwZWQgaW50byBh
IFdlYlBhZ2VQcm94eQotICAgIC8vIHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGVzdGFi
bGlzaGVkIHRoZSBjb25uZWN0aW9uLgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewot
ICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVu
dGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURlc2NyaXB0b3Io
KSk7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNv
bm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOwot
I2VsaWYgT1MoV0lORE9XUykKLSAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVj
dGlvbklkZW50aWZpZXIoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpKTsKLSNl
bHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIGlm
ICghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRlbnRpZmll
cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uID0gSVBDOjpD
b25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAq
dGhpcyk7Ci0gICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKLQotICAgIGZvciAoYXV0
byYgY2FsbGJhY2sgOiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCi0gICAgICAgIGNhbGxi
YWNrKCk7Ci0gICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yOjpjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpCi17Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsK
LQotICAgIC8vIElmIHdlIHRyaWVkIHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZvcmUgaXQgd2Fz
IGNyZWF0ZWQsIHRoZW4gbm8gY29ubmVjdGlvbiBleGlzdHMgeWV0LgotICAgIGlmIChtX2Zyb250
ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0
ZSgpOwotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci0KLSAgICBtX2F0dGFjaGVk
ID0gZmFsc2U7Ci0gICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGZhbHNlOwotfQotCi12b2lkIFdl
Ykluc3BlY3Rvcjo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3I6OndoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2
b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0aW9uKSB7Ci0g
ICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Zyb250
ZW5kQ29ubmVjdGlvbkFjdGlvbnMuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotLy8g
Q2FsbGVkIGJ5IFdlYkluc3BlY3RvciBtZXNzYWdlcwotdm9pZCBXZWJJbnNwZWN0b3I6OnNob3co
KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENsb3NlIGNvdWxkIGJlIGNhbGxlZCBtdWx0
aXBsZSB0aW1lcyBkdXJpbmcgdGVhcmRvd24uCi0gICAgaWYgKCFtX2Zyb250ZW5kQ29ubmVjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNzaW5nVXNl
ckdlc3R1cmUgfTsKLQotICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdl
KCk7Ci0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFt
ZSYgaW5zcGVjdGVkTWFpbkZyYW1lID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAg
RnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1haW5GcmFtZS5k
b2N1bWVudCgpLCBpbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExvY2tIaXN0b3J5
OjpObywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05h
dmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBT
aG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5pdGlhdGVkQnlN
YWluRnJhbWU6OlVua25vd24gfTsKLQotICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uIHsgKmlu
c3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLCBmcmFtZUxvYWRSZXF1ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCksIE5hdmlnYXRp
b25UeXBlOjpMaW5rQ2xpY2tlZCB9OwotICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNwZWN0ZWRQYWdl
LT5jaHJvbWUoKS5jcmVhdGVXaW5kb3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFtZUxvYWRSZXF1
ZXN0LCB7IH0sIGFjdGlvbik7Ci0gICAgaWYgKCFuZXdQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBuZXdQYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2Fk
UmVxdWVzdCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3JpcHRGb3JUZXN0
KGNvbnN0IFN0cmluZyYgc2NyaXB0KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yOjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hl
ZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OlNob3dDb25zb2xlKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYklu
c3BlY3Rvcjo6c2hvd1Jlc291cmNlcygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hl
ZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OlNob3dSZXNvdXJjZXMoKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyIGZyYW1lSWRlbnRpZmllcikKLXsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5zaG93KCk7Ci0KLSAgICBTdHJpbmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVyID0gbV9wYWdl
LT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFnZW50KCkuZnJh
bWVJZChmcmFtZS0+Y29yZUZyYW1lKCkpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVz
dGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSTo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGluc3BlY3RvckZy
YW1lSWRlbnRpZmllciksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3Rh
cnRQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuc2hvdygpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7
Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6U3RhcnRQYWdlUHJvZmlsaW5nKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYklu
c3BlY3Rvcjo6c3RvcFBhZ2VQcm9maWxpbmcoKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFn
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJs
aXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpTdG9wUGFnZVByb2ZpbGluZygpLCAwKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFt
X3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENv
bm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCAw
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50U2VsZWN0aW9u
KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJv
bnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcEVsZW1l
bnRTZWxlY3Rpb24oKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjplbGVt
ZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6RWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVu
dGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNvcmRpbmdDaGFu
Z2VkKGJvb2wgYWN0aXZlKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpUaW1l
bGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQot
Ci12b2lkIFdlYkluc3BlY3Rvcjo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRl
KE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OlNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKSwgbV9wYWdl
LT5pZGVudGlmaWVyKCkpOwotfQotCi1ib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0YWNoV2luZG93
KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5zcGVjdG9yIC0t
IHR3byBpbnNwZWN0b3JzIGluIG9uZSB3aW5kb3cgaXMgdG9vIG11Y2ghCi0gICAgaWYgKG1fcGFn
ZS0+aXNJbnNwZWN0b3JQYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElm
IHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4gdG8gYWxsb3cg
c3dpdGNoaW5nIHNpZGVzLgotICAgIGlmIChtX2F0dGFjaGVkKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBi
ZSB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIHNpemUuCi0g
ICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkudmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgaW5zcGVjdGVk
UGFnZVdpZHRoID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2li
bGVXaWR0aCgpOwotICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IGluc3BlY3Rl
ZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICByZXR1cm4gbWlu
aW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0
YWNoZWRXaWR0aCA8PSBpbnNwZWN0ZWRQYWdlV2lkdGg7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
Ojp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKLXsKLSAgICBpZiAobV9hdHRhY2hlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlzLT5jYW5BdHRh
Y2hXaW5kb3coKTsKLSAgICBpZiAobV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5BdHRhY2hXaW5k
b3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRh
Y2hXaW5kb3c7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxh
YmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZi
ODllNTIyNzcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkluc3BlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5o
IgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yIDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlSW5zcGVjdG9yPiwgcHJp
dmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxX
ZWJJbnNwZWN0b3I+IGNyZWF0ZShXZWJQYWdlKik7Ci0KLSAgICBXZWJQYWdlKiBwYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9wYWdlOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZURvY2tpbmdBdmFpbGFiaWxp
dHkoKTsKLQotICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JNZXNz
YWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6
Q2xpZW50Ci0gICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZSB7IGNs
b3NlKCk7IH0KLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRl
IHsgY2xvc2UoKTsgfQotCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0g
ICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotCi0gICAgdm9p
ZCBjYW5BdHRhY2hXaW5kb3coYm9vbCYgcmVzdWx0KTsKLQotICAgIHZvaWQgc2hvd0NvbnNvbGUo
KTsKLSAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKLQotICAgIHZvaWQgc2hvd01haW5SZXNvdXJj
ZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIHNldEF0dGFj
aGVkKGJvb2wgYXR0YWNoZWQpIHsgbV9hdHRhY2hlZCA9IGF0dGFjaGVkOyB9Ci0KLSAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCk7Ci0KLSAgICB2b2lk
IHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKLQot
ICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRWxlbWVudFNl
bGVjdGlvbigpOwotICAgIHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0gICAg
dm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrQ2Fw
dHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBz
ZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50KTsKLQotICAgIHZvaWQgZGlzY29u
bmVjdEZyb21QYWdlKCkgeyBjbG9zZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IFdlYkluc3BlY3RvckNsaWVudDsKLQotICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvcihXZWJQYWdl
Kik7Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yKCk7Ci0KLSAgICBib29sIGNhbkF0dGFjaFdp
bmRvdygpOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50Ci0gICAgdm9p
ZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCk7Ci0gICAgdm9pZCBj
bG9zZUZyb250ZW5kQ29ubmVjdGlvbigpOwotCi0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLQot
ICAgIHZvaWQgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZvaWQo
KT4mJik7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0KLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0
aW9uPiBtX2Zyb250ZW5kQ29ubmVjdGlvbjsKLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4g
bV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zOwotCi0gICAgYm9vbCBtX2F0dGFjaGVkIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fcHJldmlvdXNDYW5BdHRhY2ggeyBmYWxzZSB9OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRhZjc0YjVlNmIwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApA
QCAtMSw0MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0j
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLW1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvciB7Ci0gICAgU2hvdygpCi0gICAgQ2xvc2Uo
KQotCi0gICAgU2V0QXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkKLQotICAgIFNob3dDb25zb2xlKCkK
LSAgICBTaG93UmVzb3VyY2VzKCkKLQotICAgIFNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJZGVudGlmaWVyKQotCi0gICAgT3BlbkluTmV3VGFi
KFN0cmluZyB1cmwpCi0KLSAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdlUHJv
ZmlsaW5nKCkKLQotICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1lbnRT
ZWxlY3Rpb24oKQotCi0gICAgU2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBj
b25uZWN0aW9uSWRlbnRpZmllcikKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg5ZTk4MjVhZC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENv
bnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBh
Z2UpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpyZXNl
dCgpCi17Ci0gICAgbV9mcm9udGVuZExvYWRlZCA9IGZhbHNlOwotICAgIG1fc3VzcGVuZGVkID0g
ZmFsc2U7Ci0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6ZnJvbnRlbmRMb2FkZWQoKQotewotICAgIG1fZnJvbnRlbmRMb2Fk
ZWQgPSB0cnVlOwotCi0gICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCi17Ci0gICAgQVNT
RVJUKG1fZnJvbnRlbmRMb2FkZWQpOwotICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwotICAgIEFT
U0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IHRydWU7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQotewot
ICAgIEFTU0VSVChtX3N1c3BlbmRlZCk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0g
ICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZCkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3Rv
ckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBldmFsdWF0
ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3Bh
dGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KQotewotICAgIGV2YWx1YXRlT3JRdWV1
ZUV4cHJlc3Npb24obWFrZVN0cmluZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wi
IiwgY29tbWFuZCwgIlwiLCAiLCBhcmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoTWVz
c2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVF
eHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVzc2Fn
ZUFzeW5jKCIsIG1lc3NhZ2UsICIpIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24pCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7
Ci0gICAgICAgIG1fcXVldWUuYXBwZW5kKGV4cHJlc3Npb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKG1fcXVldWUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcGFn
ZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKLSAgICBtX3Bh
Z2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5n
RXhjZXB0aW9uKGV4cHJlc3Npb24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlcjo6ZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpCi17Ci0gICAgaWYgKG1fcXVl
dWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiA6IG1fcXVldWUpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2Uo
KS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7Ci0gICAgICAgIG1fcGFnZS5jb3Jl
UGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNlcHRp
b24oZXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzQyNGUyZDg3Li4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKLXB1
YmxpYzoKLSAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOwot
Ci0gICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLQotICAgIHZv
aWQgc3VzcGVuZCgpOwotICAgIHZvaWQgdW5zdXNwZW5kKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNo
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpOwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7Ci0gICAgdm9p
ZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsK
LSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZvaWQgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotCi0gICAgV2ViUGFn
ZSYgbV9wYWdlOwotICAgIERlcXVlPFN0cmluZz4gbV9xdWV1ZTsKLSAgICBib29sIG1fZnJvbnRl
bmRMb2FkZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDE3ODUxZjY4Ny4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIuaCIKLQotI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlZjxXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
PiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIpOwotfQotCi1X
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyKCkKLSAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJL
aXQuV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlciIpKQotewotfQotCi1XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjp+V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigp
Ci17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6aW5pdGlhbGl6
ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rp
b24tPmFkZFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0
aGlzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpub3RpZnlO
ZWVkRGVidWdnZXJCcmVhaygpCi17Ci0gICAgLy8gSWYgdGhlIHdlYiBwcm9jZXNzIGhhcyBub3Qg
YmVlbiBmdWxseSBpbml0aWFsaXplZCB5ZXQsIHRoZW4gdGhlcmUKLSAgICAvLyBpcyBubyBWTSB0
byBiZSBub3RpZmllZCBhbmQgdGh1cyBubyBpbmZpbml0ZSBsb29wIHRvIGJyZWFrLiBCYWlsIG91
dC4KLSAgICBpZiAoIVdlYkNvcmU6OmNvbW1vblZNT3JOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEpTQzo6Vk0mIHZtID0gV2ViQ29yZTo6Y29tbW9uVk0oKTsKLSAgICB2bS5ub3RpZnlO
ZWVkRGVidWdnZXJCcmVhaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDhmNmJkMDIwYTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcj4gY3JlYXRlKCk7Ci0gICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIoKTsKLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiopOwotICAgIAotcHJpdmF0ZToKLSAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyKCk7Ci0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIu
Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7
Ci0gICAgCi0gICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2Fn
ZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzBlNTJiNzNiLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAs
MCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0j
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAt
PiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIHsKLSAgICBOb3RpZnlOZWVkRGVidWdn
ZXJCcmVhaygpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3JVSS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYWE2ZjZl
ZGU1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJ
LmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMu
aCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPFdl
Ykluc3BlY3RvclVJPiBXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1XZWJJ
bnNwZWN0b3JVSTo6V2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShw
YWdlKQotICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKLSAgICAsIG1fZGVidWdn
YWJsZUluZm8oRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKQotewotICAgIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxl
ZCh0cnVlKTsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNl
dEltYWdlQml0bWFwRW5hYmxlZCh0cnVlKTsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViR0wyRW5hYmxlZCh0cnVl
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjplc3RhYmxpc2hDb25uZWN0aW9u
KFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERl
YnVnZ2FibGVJbmZvRGF0YSYgZGVidWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25l
ZCBpbnNwZWN0aW9uTGV2ZWwpCi17Ci0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllciA9IGlu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyOwotICAgIG1fZGVidWdnYWJsZUluZm8gPSBkZWJ1Z2dhYmxl
SW5mbzsKLSAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsKLSAgICBtX2luc3BlY3Rpb25MZXZl
bCA9IGluc3BlY3Rpb25MZXZlbDsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0
KCk7Ci0KLSAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9ICZtX3BhZ2UuY29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpOwotICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJbnNwZWN0
b3JGcm9udGVuZENsaWVudCh0aGlzKTsKLQotICAgIHVwZGF0ZUNvbm5lY3Rpb24oKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JVSTo6dXBkYXRlQ29ubmVjdGlvbigpCi17Ci0gICAgaWYgKG1fYmFj
a2VuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0
ZSgpOwotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSNp
ZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKLSAgICBJUEM6OkNvbm5lY3Rpb246OlNvY2tldFBh
aXIgc29ja2V0UGFpciA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9u
KCk7Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
KHNvY2tldFBhaXIuc2VydmVyKTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVu
dFBvcnQoc29ja2V0UGFpci5jbGllbnQpOwotI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9y
dF90IGxpc3RlbmluZ1BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICBpZiAobWFjaF9wb3J0X2Fs
bG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmbGlzdGVu
aW5nUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgaWYgKG1h
Y2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlz
dGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpICE9IEtFUk5fU1VDQ0VTUykKLSAg
ICAgICAgQ1JBU0goKTsKLQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0
aW9uSWRlbnRpZmllcihsaXN0ZW5pbmdQb3J0KTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVj
dGlvbkNsaWVudFBvcnQobGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpOwot
I2VsaWYgUExBVEZPUk0oV0lOKQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25u
ZWN0aW9uSWRlbnRpZmllciwgY29ubkNsaWVudDsKLSAgICBJUEM6OkNvbm5lY3Rpb246OmNyZWF0
ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25uQ2xp
ZW50KTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQoY29ubkNsaWVu
dCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0K
LSNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoREFSV0lOKSB8fCBQTEFURk9STShX
SU4pCi0gICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2Vy
dmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAgIG1fYmFja2Vu
ZENvbm5lY3Rpb24tPm9wZW4oKTsKLSNlbmRpZgotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uQ2xpZW50UG9ydCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjp3aW5kb3dP
YmplY3RDbGVhcmVkKCkKLXsKLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJv
bnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5kSG9zdCA9IElu
c3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKLSAg
ICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVk
KCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOwotCi0g
ICAgLy8gVGVsbCB0aGUgbmV3IGZyb250ZW5kIGFib3V0IHRoZSBjdXJyZW50IGRvY2sgc3RhdGUu
IElmIHRoZSB3aW5kb3cgb2JqZWN0Ci0gICAgLy8gY2xlYXJlZCBkdWUgdG8gYSByZWxvYWQsIHRo
ZSBkb2NrIHN0YXRlIHdvbid0IGJlIHJlc2VudCBmcm9tIFVJUHJvY2Vzcy4KLSAgICBzZXREb2Nr
aW5nVW5hdmFpbGFibGUobV9kb2NraW5nVW5hdmFpbGFibGUpOwotICAgIHNldERvY2tTaWRlKG1f
ZG9ja1NpZGUpOwotICAgIHNldElzVmlzaWJsZShtX2lzVmlzaWJsZSk7Ci0KLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7Ci0KLSAgICBicmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JV
STo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
U3RhcnRXaW5kb3dEcmFnKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclVJOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBG
bG9hdFJlY3QgZnJhbWVSZWN0ID0gbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLndpbmRvd1Jl
Y3QoKTsKLSAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+
Y2hyb21lKCkuc2V0V2luZG93UmVjdChmcmFtZVJlY3QpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpicmluZ1RvRnJvbnQoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpC
cmluZ1RvRnJvbnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6RGlkQ2xvc2UoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0KLSAgICBpZiAo
bV9iYWNrZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZh
bGlkYXRlKCk7Ci0gICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0K
LQotICAgIGlmIChtX2Zyb250ZW5kQ29udHJvbGxlcikgewotICAgICAgICBtX2Zyb250ZW5kQ29u
dHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIG1f
ZnJvbnRlbmRDb250cm9sbGVyID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9mcm9udGVu
ZEhvc3QpCi0gICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAg
ICBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyID0geyB9OwotICAgIG1fdW5kZXJUZXN0ID0gZmFs
c2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCi17Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlJlb3BlbigpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gV2ViSW5zcGVj
dG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkK
LXsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAg
c3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0gICAgICAgIHdl
YlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6Ci0gICAgICAgIHdlYlByb2Nlc3Mu
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIERvY2tTaWRlOjpMZWZ0OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpB
dHRhY2hMZWZ0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIERvY2tTaWRlOjpCb3R0b206Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFj
aEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2NrU2lkZSBzaWRl
KQotewotICAgIEFTQ0lJTGl0ZXJhbCBzaWRlU3RyaW5nIHsgQVNDSUlMaXRlcmFsOjpudWxsKCkg
fTsKLQotICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2VkOgot
ICAgICAgICBzaWRlU3RyaW5nID0gInVuZG9ja2VkIl9zOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgotICAgICAgICBzaWRlU3RyaW5nID0gInJpZ2h0Il9zOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6Ci0gICAgICAgIHNpZGVT
dHJpbmcgPSAibGVmdCJfczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpC
b3R0b206Ci0gICAgICAgIHNpZGVTdHJpbmcgPSAiYm90dG9tIl9zOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBtX2RvY2tTaWRlID0gc2lkZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja1NpZGUiX3MsIFN0cmluZyhzaWRlU3RyaW5n
KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tpbmdVbmF2YWlsYWJsZShib29s
IHVuYXZhaWxhYmxlKQotewotICAgIG1fZG9ja2luZ1VuYXZhaWxhYmxlID0gdW5hdmFpbGFibGU7
Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERvY2tp
bmdVbmF2YWlsYWJsZSJfcywgdW5hdmFpbGFibGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJ
OjpzZXRJc1Zpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIG1faXNWaXNpYmxlID0gdmlzaWJs
ZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNW
aXNpYmxlIl9zLCB2aXNpYmxlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNo
ZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpT
ZXRTaGVldFJlY3QocmVjdCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclVJOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAg
aWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpPcGVuSW5OZXdUYWIodXJsKSwgMCk7Ci0gICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c2F2ZShjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi17Ci0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJh
c2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6SW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENl
cnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7Ci19Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLWJv
b2wgV2ViSW5zcGVjdG9yVUk6OnN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKQotewotICAgIHJl
dHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5kaWFnbm9zdGljTG9nZ2luZ0VuYWJs
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6bG9nRGlhZ25vc3RpY0V2ZW50KGNvbnN0
IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVE
aWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFy
eShldmVudE5hbWUsICJXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0
aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgLy8gSW5z
cGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1
bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCi0gICAgQVNTRVJUKCFhdmFp
bGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKLSAgICBtX2RpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9k
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJJbnNwZWN0
b3JVSTo6c2hvd0NvbnNvbGUoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3Bh
dGNoQ29tbWFuZCgic2hvd0NvbnNvbGUiX3MpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpz
aG93UmVzb3VyY2VzKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNob3dSZXNvdXJjZXMiX3MpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzaG93
TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpCi17Ci0g
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93TWFpblJlc291
cmNlRm9yRnJhbWUiX3MsIGZyYW1lSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6OnN0YXJ0UGFnZVByb2ZpbGluZygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3MsIHRydWUpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzdG9wUGFnZVByb2ZpbGluZygpCi17Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVByb2ZpbGlu
Z0VuYWJsZWQiX3MsIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRFbGVt
ZW50U2VsZWN0aW9uKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNldEVsZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCB0cnVlKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6c3RvcEVsZW1lbnRTZWxlY3Rpb24oKQotewotICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVuYWJsZWQi
X3MsIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQo
InNhdmVkVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQo
Y29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3NhZ2UpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpwYWdlUGF1c2VkKCkKLXsKLSAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5zdXNwZW5kKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VV
bnBhdXNlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIudW5zdXNwZW5kKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3Nh
Z2VUb0JhY2tlbmQobWVzc2FnZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi1T
dHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOwotfQotCi1TdHJpbmcg
V2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOwotfQotCi1TdHJpbmcgV2ViSW5z
cGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9k
ZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKLX0KLQotI2lmICFQTEFURk9STShN
QUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi1ib29sIFdlYkluc3BlY3Rv
clVJOjpjYW5TYXZlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29u
c3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
fQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9S
TShXSU4pCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDYzOWYyMWM5YjYyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlk
ZW50aWZpZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFz
cyBGbG9hdFJlY3Q7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwot
Ci1jbGFzcyBXZWJJbnNwZWN0b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkluc3BlY3RvclVJ
PiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3Rv
clVJPiBjcmVhdGUoV2ViUGFnZSYpOwotCi0gICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVk
IFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2ZU1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAv
LyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikgb3ZlcnJpZGUgeyAvKiBEbyBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBhZ2UgcHJvY2Vz
cyBtYXkgaGF2ZSBjcmFzaGVkIGFuZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4gKi8gfQotICAg
IHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZVdpbmRv
dygpOyB9Ci0KLSAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKLSAgICB2
b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1bmRlclRlc3Qs
IHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7Ci0gICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uKCk7
Ci0KLSAgICB2b2lkIHNob3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0K
LSAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRl
bnRpZmllcik7Ci0KLSAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAgIHZvaWQgc3Rv
cFBhZ2VQcm9maWxpbmcoKTsKLQotICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Ci0g
ICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOwotCi0gICAgdm9pZCBhdHRhY2hlZEJvdHRv
bSgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkJvdHRvbSk7IH0KLSAgICB2b2lkIGF0dGFjaGVk
UmlnaHQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpSaWdodCk7IH0KLSAgICB2b2lkIGF0dGFj
aGVkTGVmdCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9Ci0gICAgdm9pZCBkZXRh
Y2hlZCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsgfQotCi0gICAgdm9pZCBz
ZXREb2NrU2lkZShEb2NrU2lkZSk7Ci0gICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUoYm9v
bCk7Ci0KLSAgICB2b2lkIHNldElzVmlzaWJsZShib29sKTsKLQotICAgIHZvaWQgZGlkU2F2ZShj
b25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwp
OwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKGJvb2wgYXZhbGlhYmxlKTsKLSNlbmRpZgotCi0gICAgLy8gV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKLSAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0
IHgsIGZsb2F0IHkpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVn
Z2FibGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlw
ZTo6V2ViUGFnZTsgfQotICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgU3RyaW5nIHRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9v
bCB0YXJnZXRJc1NpbXVsYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbnNw
ZWN0aW9uTGV2ZWw7IH0KLQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbG9zZVdpbmRvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZXNldFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkg
b3ZlcnJpZGU7Ci0KLSAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNhdmUo
Y29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBl
bmQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYpIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0g
ICAgYm9vbCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBk
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGU7IH0KLSAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBX
VEY6OlN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBh
Z2VQYXVzZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92ZXJyaWRlOwot
Ci0gICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9
Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0g
ICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
ciBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsKLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9u
PiBtX2JhY2tlbmRDb25uZWN0aW9uOwotCi0gICAgLy8gS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGZy
b250ZW5kJ3MgaW5zcGVjdG9yIGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaAot
ICAgIC8vIGNvcmVQYWdlKCksIHNpbmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRoZSBmcm9udGVu
ZCdzIHBhZ2UgaGFzIHN0YXJ0ZWQgZGVzdHJ1Y3Rpb24uCi0gICAgV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlciogbV9mcm9udGVuZENvbnRyb2xsZXIgeyBudWxscHRyIH07Ci0KLSAgICBXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7Ci0gICAgYm9vbCBt
X3VuZGVyVGVzdCB7IGZhbHNlIH07Ci0gICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJs
ZUluZm87Ci0gICAgYm9vbCBtX2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkp
Ci0gICAgYm9vbCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKLSNlbmRp
ZgotCi0gICAgRG9ja1NpZGUgbV9kb2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tlZCB9OwotICAg
IHVuc2lnbmVkIG1faW5zcGVjdGlvbkxldmVsIHsgMSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5NGYxMzg1ZDQ4OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1
MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LW1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJIHsKLSAgICBFc3RhYmxpc2hDb25uZWN0aW9uKFdl
YktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgc3Ry
dWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVy
VGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotICAgIFVwZGF0ZUNvbm5lY3Rpb24oKQot
Ci0gICAgQXR0YWNoZWRCb3R0b20oKQotICAgIEF0dGFjaGVkUmlnaHQoKQotICAgIEF0dGFjaGVk
TGVmdCgpCi0gICAgRGV0YWNoZWQoKQotICAgIFNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVu
YXZhaWxhYmxlKQotICAgIFNldElzVmlzaWJsZShib29sIHZpc2libGUpCi0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShi
b29sIGF2YWlsYWJsZSkKLSNlbmRpZgotCi0gICAgU2hvd0NvbnNvbGUoKQotICAgIFNob3dSZXNv
dXJjZXMoKQotCi0gICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmluZyBmcmFtZUlkZW50
aWZpZXIpCi0KLSAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdlUHJvZmlsaW5n
KCkKLQotICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1lbnRTZWxlY3Rp
b24oKQotCi0gICAgRGlkU2F2ZShTdHJpbmcgdXJsKQotICAgIERpZEFwcGVuZChTdHJpbmcgdXJs
KQotCi0gICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwZjZmZDUyMDku
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0KLSNpbmNsdWRlICJX
ZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldDo6V2ViUGFnZUluc3BlY3RvclRh
cmdldChXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLVN0cmluZyBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
dG9UYXJnZXRJRChtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAgICBpZiAobV9jaGFubmVsKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9jaGFubmVsID0gbWFrZVVuaXF1ZTxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsPihtX3BhZ2UsIGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpOwotICAg
IGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7Ci19Ci0KLXZvaWQg
V2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCgpCi17Ci0gICAgaWYgKCFtX2NoYW5u
ZWwpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAg
IG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250
ZW5kKCptX2NoYW5uZWwpOwotICAgIG1fY2hhbm5lbC5yZXNldCgpOwotfQotCi12b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFn
ZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZy
b250ZW5kKG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9U
YXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQpCi17Ci0gICAgcmV0dXJuIG1h
a2VTdHJpbmcoInBhZ2UtIiwgcGFnZUlELnRvVUludDY0KCkpOwotfQotCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2Y2JkN2ZhZDVmZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNz
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7Ci0KLWNsYXNzIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQpOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYpOwotICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkg
PSBkZWZhdWx0OwotCi0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7
IH0KLQotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgc3RhdGljIFN0
cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKLQotcHJpdmF0ZToKLSAg
ICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmOTAxN2M0ZWRhZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXI6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBhZ2UpCi0gICAg
OiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fcGFnZVRhcmdldChwYWdlKQotewotICAgIC8vIERvIG5v
dCBzZW5kIHRoZSBwYWdlIHRhcmdldCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2ViUGFnZVByb3h5
IHdpbGwgbWFuYWdlciB0aGlzIGZvciB1cy4KLSAgICBtX3RhcmdldHMuc2V0KG1fcGFnZVRhcmdl
dC5pZGVudGlmaWVyKCksICZtX3BhZ2VUYXJnZXQpOwotfQotCi1XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlcjo6fldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCkKLXsKLX0K
LQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFyZ2V0KEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBt
X3RhcmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyKCksICZ0YXJnZXQpOwotICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBtX3BhZ2Uuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQodGFyZ2V0Lmlk
ZW50aWZpZXIoKSwgdGFyZ2V0LnR5cGUoKSkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQm
IHRhcmdldCkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVudGlmaWVyKCkg
IT0gbV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1vdmUgdGhlIG1h
aW4gdGFyZ2V0LiIpOwotCi0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGVzdHJveUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpKSk7Ci0KLSAgICBtX3Rh
cmdldHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0
aW9uVHlwZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwot
ICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQtPmNvbm5lY3Qo
Y29ubmVjdGlvblR5cGUpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCi17Ci0gICAg
YXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQg
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKG1lc3NhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzkz
MWRhZDFjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIElu
c3BlY3RvclRhcmdldDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7
Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29u
dHJvbGxlcihXZWJQYWdlJik7Ci0gICAgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
KCk7Ci0KLSAgICB2b2lkIGFkZFRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYpOwot
ICAgIHZvaWQgcmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Jik7Ci0KLSAg
ICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RJ
bnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRv
VGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwotCi1wcml2YXRlOgotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0IG1fcGFnZVRhcmdldDsKLSAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXQqPiBtX3RhcmdldHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjVmNzEzNzMzLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKLSAgICAsIG1fY29ubmVj
dGlvblR5cGUoY29ubmVjdGlvblR5cGUpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKLXsKLSAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5k
TWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE4NGFjNWJkYTIuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKLXB1YmxpYzoKLSAgICBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRh
cmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotICAg
IHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRlZmF1
bHQ7Ci0KLXByaXZhdGU6Ci0gICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9Ci0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLQotICAgIFdl
YlBhZ2UmIG1fcGFnZTsKLSAgICBTdHJpbmcgbV90YXJnZXRJZDsKLSAgICBJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyYjRmOTdmZThkMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKLSNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0
Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1ib29sIFdlYkluc3BlY3RvclVJOjpjYW5TYXZlKCkKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0
L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsK
LX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3Bl
Y3Rvci9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDllNTVmM2Q1OGExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KKysrIC9kZXYvbnVs
bApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIldlYkluc3BlY3RvclVJLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JV
SS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBX
ZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBTdHJpbmcgd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBOU0J1
bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxl
LldlYkluc3BlY3RvclVJIl07Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJs
b2NhbGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJdOwotICAgIGlmICghcGF0aCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5z
cGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIHJldHVybiB3ZWJJ
bnNwZWN0b3JVSUxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd2Vi
SW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388636</attachid>
            <date>2020-01-23 18:42:10 -0800</date>
            <delta_ts>2020-01-23 18:43:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>749193</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLjFmOGY0ODFhNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg0IEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJn
ZXRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRh
cmdldFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAuCisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0
b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5o
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmguCisgICAgICAgICogVUlQcm9jZXNz
L0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbTogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JX
S1dlYlZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmguCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdp
bi5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJv
eHlXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYklu
c3BlY3RvclByb3h5V2luLmNwcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4uCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3Bl
Y3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW46
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3Bl
Y3RvclVJR3RrLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5z
cGVjdG9yVUlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUF0dGFjaG1lbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1Rlc3RpbmcubW06CisgICAgICAgIEFkZCBzb21lIG1pc3NpbmcgaW5jbHVkZXMuCisKIDIwMjAt
MDEtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgIFtp
T1NdIFJlbW92ZSB0aGUgSU9ISURFdmVudFNlcnZpY2VGYXN0UGF0aFVzZXJDbGllbnQgSU9LaXQg
Y2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDUzMjY3OGYzNzYwLi5lNTg3ZjdkMDljOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L0NNYWtlTGlzdHMudHh0CkBAIC01Niw2ICs1Niw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2FkcyIKICAgICIke1dF
QktJVF9ESVJ9L1VJUHJvY2Vzcy9HYW1lcGFkIgogICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L0dQVSIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yIgogICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgogICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L05ldHdvcmsiCiAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMiCkBAIC0xNDgsMTIgKzE0OSwxMCBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVT
CiAgICBTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdlcy5pbgoK
ICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCi0gICAgVUlQcm9jZXNz
L1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAgICBVSVByb2Nlc3MvVmlzaXRl
ZExpbmtTdG9yZS5tZXNzYWdlcy5pbgogICAgVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbgogICAgVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4KICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbgotICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogICAgVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgogICAgVUlQcm9jZXNzL1dlYlBhc3RlYm9h
cmRQcm94eS5tZXNzYWdlcy5pbgogICAgVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLm1lc3NhZ2Vz
LmluCkBAIC0xNjMsNiArMTYyLDkgQEAgc2V0KFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwoKICAg
IFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbgoKKyAgICBVSVBy
b2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisgICAg
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorCiAgICBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCgogICAgVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggOTgwODFhYTZiMmMu
LjZkY2JiMjM3NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlu
cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CkBAIC03OSwxMSArNzksMTIgQEAgJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0Nv
Y29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvVUlQcm9jZXNzL0dQVS9HUFVQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2Fn
ZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJv
eHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIp
L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9s
bGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9y
ZS5tZXNzYWdlcy5pbgpAQCAtOTEsNyArOTIsNiBAQCAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubWVzcwog
JChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2Fn
ZXMuaW4KQEAgLTExMiw2ICsxMTIsMTAgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9s
b2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIu
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclVJLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLm1lc3NhZ2VzLmluCkBAIC0xMzMs
MTMgKzEzNyw5IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXIubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCi0kKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGMzNGFmNWNkM2ExLi44MTBlMGUxODMzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNTQsNiArNTQsNyBAQCBWUEFUSCA9IFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nl
c3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBc
CisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0luc3BlY3RvciBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL01lZGlhQ2FjaGUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYVN0
cmVhbSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL05ldHdvcmsgXApAQCAtNzksNiArODAs
NyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9EYXRhYmFzZXMgXAogICAg
ICQoV2ViS2l0MikvVUlQcm9jZXNzL0Rvd25sb2FkcyBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nl
c3MvR1BVIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IgXAogICAgICQoV2Vi
S2l0MikvVUlQcm9jZXNzL01lZGlhU3RyZWFtIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9O
ZXR3b3JrIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dAppbmRleCAzZGEyODAwYzljNS4uZDdiZDE3YWZiN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dApAQCAtMjY3LDEzICsyNjcsMTEgQEAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCiBV
SVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwCi1VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCiBV
SVByb2Nlc3MvTGVnYWN5R2xvYmFsU2V0dGluZ3MuY3BwCiBVSVByb2Nlc3MvUGFnZUxvYWRTdGF0
ZS5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzQXNzZXJ0aW9uLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NU
aHJvdHRsZXIuY3BwCiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCi1VSVByb2Nl
c3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCiBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NU
aW1lci5jcHAKIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKIFVJUHJvY2Vzcy9TdXNw
ZW5kZWRQYWdlUHJveHkuY3BwCkBAIC0zMDYsMTUgKzMwNCwxMSBAQCBVSVByb2Nlc3MvV2ViRnJh
bWVQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmNwcAogVUlQ
cm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL1dlYkdlb2xv
Y2F0aW9uUHJvdmlkZXIuY3BwCi1VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCi1VSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25T
dGF0ZS5jcHAKIFVJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcAot
VUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCiBVSVByb2Nl
c3MvV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNwcAotVUlQcm9jZXNzL1dlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKIFVJUHJvY2Vz
cy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwCkBA
IC00MjYsNiArNDIwLDEzIEBAIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwCiAKIFVJUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5LmNwcAogCitVSVByb2Nlc3MvSW5z
cGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
UHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAK
K1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwCitVSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorCiBVSVByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJ
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbi5jcHAKIFVJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKQEAgLTUxNyw2ICs1MTgs
MTYgQEAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVDU1NTdHls
ZURlY2xhcmF0aW9uSGFuZGxlLmNwcAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIEBuby11bmlmeQogCitXZWJQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKK1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckNsaWVudC5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHAK
K1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwCitXZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKK1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3Bw
CisKIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5zaW9ucy5j
cHAKIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmNwcAogCkBAIC01OTMsNyArNjA0LDYgQEAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAKLVdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcAogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwCkBAIC02MTAs
MjMgKzYyMCwxNSBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi1XZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
Y3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29va2llSmFyLmNwcAogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkRvY3VtZW50TG9hZGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBAbm8tdW5pZnkK
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKLVdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZU92ZXJsYXkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxl
clByb3h5LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRhc2tQcm94eS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAppbmRleCA2YThlMmU2OTA1Yy4uYzQxNzQ0YTMyOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQKQEAgLTIyOSw3ICsyMjksNiBAQCBVSVByb2Nlc3MvV2ViTWVkaWFT
ZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL1dlYk1lZGlhU2Vzc2lvbkZvY3VzTWFu
YWdlckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCiBV
SVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQotVUlQcm9jZXNzL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQogCiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhUmVj
b3JkLmNwcAogCkBAIC00MDIsNiArNDAxLDE0IEBAIFVJUHJvY2Vzcy9HYW1lcGFkL2NvY29hL1VJ
R2FtZXBhZFByb3ZpZGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9HYW1lcGFkL2lvcy9VSUdhbWVwYWRQ
cm92aWRlcklPUy5tbQogVUlQcm9jZXNzL0dhbWVwYWQvbWFjL1VJR2FtZXBhZFByb3ZpZGVyTWFj
Lm1tCiAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5t
bQorVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJl
Y29nbml6ZXIubW0KKworVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFj
Lm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
CitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQorCiBVSVBy
b2Nlc3MvaW9zL2Zvcm1zL1dLQWlyUGxheVJvdXRlUGlja2VyLm1tCiBVSVByb2Nlc3MvaW9zL2Zv
cm1zL1dLRGF0ZVBpY2tlclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dL
RmlsZVVwbG9hZFBhbmVsLm1tCkBAIC00NTEsNyArNDU4LDYgQEAgVUlQcm9jZXNzL2lvcy9XS0Ry
YXdpbmdWaWV3Lm1tCiBVSVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbQog
VUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4u
bW0KIFVJUHJvY2Vzcy9pb3MvV0tIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5t
bQotVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5t
bQogVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0KIFVJUHJvY2Vz
cy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLm1tCiBVSVByb2Nlc3MvaW9zL1dLUGFzc3dv
cmRWaWV3Lm1tCkBAIC00NzEsNyArNDc3LDYgQEAgVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5j
cHAKIFVJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAKIFVJUHJvY2Vz
cy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAogVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbE1hYy5tbQotVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5t
bQogVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmNwcAogVUlQcm9jZXNzL21hYy9TZXJ2
aWNlc0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KQEAgLTQ4
MiwxNSArNDg3LDEyIEBAIFVJUHJvY2Vzcy9tYWMvV2ViQ29sb3JQaWNrZXJNYWMubW0KIFVJUHJv
Y2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJDb29r
aWVNYW5hZ2VyUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9u
c0Ryb3Bkb3duTWFjLm1tCi1VSVByb2Nlc3MvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCiBV
SVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1l
bnVQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlNYWMubW0KIFVJUHJv
Y2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbQogVUlQcm9jZXNzL21hYy9XS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlci5tbQotVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
Ci1VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCiBVSVByb2Nlc3MvbWFjL1dL
UHJpbnRpbmdWaWV3Lm1tCiBVSVByb2Nlc3MvbWFjL1dLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxl
Z2F0ZS5tbQogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KQEAgLTU3Nyw2ICs1
NzksOCBAQCBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1
Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCiAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
ZWJJbnNwZWN0b3JVSU1hYy5tbQorCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlT
dG9yYWdlTWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRz
Y2FwZVBsdWdpbk1hYy5tbQpAQCAtNjE4LDcgKzYyMiw2IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9EcmF3aW5nQXJlYU1hYy5j
cHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGFnZUJhbm5lck1hYy5tbQogV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQotV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBh
Z2VPYmplY3RCYXNlLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3RNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDFlZjczYmMyMTRjLi44NWFi
MGEzZTJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yMTUsNiArMjE1LDEyIEBAIFVJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAogCiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2VvbG9jYXRpb25Qcm92aWRlci5jcHAK
IAorVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKwor
VUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCitV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKK1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKKwogVUlQcm9jZXNzL0xh
dW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
TGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwIEBuby11bmlmeQogCkBAIC0yMzAs
NyArMjM2LDYgQEAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3VuaXgvV2Vic2l0ZURhdGFTdG9yZVVu
aXguY3BwCiAKIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgQG5vLXVuaWZ5
CiAKLVVJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9n
bGliL1dlYlByb2Nlc3NQb29sR0xpYi5jcHAKIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94
eUdMaWIuY3BwCiBVSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHAgQG5vLXVu
aWZ5CkBAIC0yNDgsNyArMjUzLDYgQEAgVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRv
ci5jcHAKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBVSVBy
b2Nlc3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAgQG5vLXVuaWZ5Ci1VSVByb2Nlc3Mv
Z3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcAogVUlQcm9jZXNzL2d0ay9UZXh0Q2hl
Y2tlckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdTbmFwc2hvdFN0b3JlR3RrLmNw
cApAQCAtMjU2LDggKzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3Bw
IEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5jcHAKIFVJUHJvY2Vz
cy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViRGF0YUxp
c3RTdWdnZXN0aW9uc0Ryb3Bkb3duR3RrLmNwcAotVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHAKLVVJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcAogVUlQ
cm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9X
ZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5
R3RrLmNwcApAQCAtMzkyLDYgKzM5NCw4IEBAIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuY3BwCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvZ2xpYi9JbmplY3RlZEJ1bmRsZUdsaWIuY3BwCiAKK1dlYlByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKKwogV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1l
ZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS91
bml4L05ldHNjYXBlUGx1Z2luVW5peC5jcHAgQG5vLXVuaWZ5CkBAIC00MjMsNyArNDI3LDYgQEAg
V2ViUHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVyLmNwcAogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VXYXlsYW5kLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VYMTEuY3BwIEBuby11bmlmeQogV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VH
dGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaAppbmRleCA0M2E0
N2RkN2QwYS4uMmUwNjQ5YThkZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElBdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQ
SUF0dGFjaG1lbnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBPQkpDX0NMQVNTIE5TRmlsZVdyYXBwZXI7CitPQkpDX0NMQVNTIE5TU3RyaW5n
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCmlu
ZGV4IGZjNGQ4NTZmMDJlLi5lZDU5ODgxYzViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KQEAgLTM1LDYgKzM1LDcg
QEAKICNpbXBvcnQgIldlYlZpZXdJbXBsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVy
bmFsLmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlv
bkJ1YmJsZS5oPgogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi42OTI4Y2EyZmJmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKQEAgLTAs
MCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIK
KworI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQ
cm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQoreworICAg
IHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5PihwYWdlLCB0YXJnZXRJZCwg
dHlwZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVj
dG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQ
YWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGUgdHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVh
dGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5cGUpOworICAgIHRhcmdldC0+
bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNpb25hbFBhZ2UpOworICAgIHJl
dHVybiB0YXJnZXQ7Cit9CisKK0luc3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0b3JUYXJnZXRQ
cm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBt
X2lkZW50aWZpZXIodGFyZ2V0SWQpCisgICAgLCBtX3R5cGUodHlwZSkKK3sKK30KKwordm9pZCBJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQ
YWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkK
KyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3Io
aWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdl
dFByb3h5OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoaXNQYXVzZWQoKSkKKyAgICAgICAgcmVz
dW1lKCk7CisKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNp
b25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRl
bnRpZmllcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wYWdlLmhh
c1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOworfQorCit2b2lkIEluc3BlY3Rv
clRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlz
aW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFj
a2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIo
KSwgbWVzc2FnZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaWRDb21taXRQ
cm92aXNpb25hbFRhcmdldCgpCit7CisgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRyOwor
fQorCitib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5zcGVj
dG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNw
ZWN0b3JUYXJnZXRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5hMjIzOWNlYzhlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBQcm92aXNpb25hbFBhZ2VQcm94eTsKK2NsYXNzIFdlYlBhZ2VQcm94
eTsKKworLy8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJbnNwZWN0b3JUYXJnZXQgZG9lc24n
dCBjYXJlIGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBzaW5jZQorLy8gYW55IHRhcmdldCAt
PiBmcm9udGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUgV2ViUGFnZVByb3h5IHdp
dGggYSB0YXJnZXRJZC4KKworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdldFByb3h5KTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBj
cmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
clRhcmdldFByb3h5PiBjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOworICAgIEluc3BlY3Rv
clRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgfkluc3BlY3RvclRhcmdldFByb3h5KCkg
PSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgdm9pZCBkaWRDb21taXRQ
cm92aXNpb25hbFRhcmdldCgpOworICAgIGJvb2wgaXNQcm92aXNpb25hbCgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25u
ZWN0aW9uVHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICBTdHJpbmcgbV9p
ZGVudGlmaWVyOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSBtX3R5cGU7Cisg
ICAgV2Vha1B0cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9wcm92aXNpb25hbFBhZ2U7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTkyYzI5ZjQxOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2luY2x1ZGUg
IkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1
ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVX
ZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIK
KyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
KCkKKyAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERl
YnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCit7Cit9CisKK1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQoreworICAgIEFTU0VSVCghbV9pbnNwZWN0
b3JQYWdlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgp
Cit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFp
bGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNl
dERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+
d2ViUGFnZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKKyNlbmRp
ZgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKFJlZjxBUEk6OkRlYnVn
Z2FibGVJbmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5k
c1VSTCkKK3sKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIG1fZGVi
dWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRDb21t
YW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+c2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUobV9kZWJ1Z2dhYmxl
SW5mby0+ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tlbmRDb21tYW5kc1VSTCkpOworICAgIG1f
aW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OmNsb3NlRnJvbUJhY2tlbmQoKQoreworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUNyYXNoKCkKK3sK
KyAgICAvLyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1c3QgY2xvc2VkLCBzbyBjbGllbnRz
IGFyZSBpbmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4KKyAgICBmcm9udGVuZERpZENsb3Nl
KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQoreworICAgIGJy
aW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9G
cm9udGVuZChtZXNzYWdlKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmZy
b250ZW5kRGlkQ2xvc2UoKQoreworICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jbG9z
ZUZyb21Gcm9udGVuZCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30K
Kwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKK3sKKyAgICBBU1NFUlQo
IW1fYmFja2VuZENvbW1hbmRzVVJMLmlzRW1wdHkoKSk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpOworICAgIGxvYWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5UmVmKCksIG1fYmFj
a2VuZENvbW1hbmRzVVJMKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVz
ZXRTdGF0ZSgpCit7CisgICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgcGxhdGZvcm1CcmluZ1Rv
RnJvbnQoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVu
Y29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIHBsYXRmb3JtU2F2ZShzdWdnZXN0
ZWRVUkwsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxvZyk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dl
c3RlZFVSTCwgY29udGVudCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNl
dFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcGxhdGZvcm1TZXRTaGVl
dFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2lu
ZG93RHJhZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQor
eworICAgIHBsYXRmb3JtT3BlbkluTmV3VGFiKHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUlu
Zm8pOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFj
a2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7Cisg
ICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0
b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIHRy
YWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOworCisgICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2Ut
PndlYlBhZ2VJRCgpLCAqdGhpcyk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNz
dW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICghbV9pbnNwZWN0b3JQ
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworCisg
ICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKKworICAgIG1faW5zcGVj
dG9yUGFnZSA9IG51bGxwdHI7CisKKyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCk7Cit9CisKKyNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKK1dlYlBhZ2VQcm94eSog
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
dGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikg
eyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCkgeyB9CisjZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8
fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmFiNThmOGNlMDYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorT0JKQ19DTEFTUyBO
U1VSTDsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRl
cjsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBEZWJ1
Z2dhYmxlSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94
eTsKK2NsYXNzIFdlYlZpZXc7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSA9IDA7
Cit9OworCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVk
PFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkoKSk7CisgICAgfQorCisgICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAg
ICB2b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50KSB7
IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUo
Ym9vbCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgbG9hZChSZWY8QVBJ
OjpEZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOwor
ICAgIHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOworICAgIHZvaWQgc2hvdygpOworCisgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5k
b3cuZ2V0KCk7IH0KKyAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKKworICAgIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJl
Y3Q7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgdXBkYXRlV2luZG93
VGl0bGUoY29uc3QgQ1N0cmluZyYpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8p
CisgICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJFU1VMVCBvbkNsb3NlKCk7CisKKyAg
ICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKKyNlbmRpZgorCisgICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOworCitwcml2YXRlOgor
ICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBtZXNz
YWdlcy4KKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICB2b2lkIHJlb3BlbigpOwor
ICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9p
ZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIGFwcGVuZChjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQgc2V0
U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgc3RhcnRXaW5k
b3dEcmFnKCk7CisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKwor
ICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgdm9pZCBjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRpb25z
LgorICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICB2
b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQo
KTsKKyAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Cisg
ICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworICAg
IHZvaWQgcGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQg
cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7
CisKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxscHRy
IH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisKKyAg
ICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKKyAgICBTdHJpbmcg
bV9iYWNrZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRy
PFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKKyAgICBSZXRhaW5Q
dHI8TlNXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJl
dGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7CisgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0
a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV93aW5kb3cg
eyBudWxscHRyIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgSFdORCBt
X2Zyb250ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZTA5
MWI3OGZiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQwIEBA
CisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFJl
bW90ZVdlYkluc3BlY3RvclByb3h5IHsKKyAgICBGcm9udGVuZERpZENsb3NlKCkKKyAgICBSZW9w
ZW4oKQorICAgIFJlc2V0U3RhdGUoKQorICAgIEJyaW5nVG9Gcm9udCgpCisKKyAgICBTYXZlKFN0
cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBm
b3JjZVNhdmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkK
KworICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKworICAgIFN0YXJ0
V2luZG93RHJhZygpCisKKyAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkKKyAgICBTaG93Q2Vy
dGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKKworICAg
IFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIzZDcwNWU4M2U3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clByb3h5LmNwcApAQCAtMCwwICsxLDc4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclBy
b3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29kaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAi
V2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQ
cm94eTo6bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOworY29uc3QgdW5zaWduZWQgV2ViSW5zcGVj
dG9yUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7CisKK2NvbnN0IHVuc2lnbmVkIFdl
Ykluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAxMDAwOworY29uc3QgdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2NTA7CisKK1dlYklu
c3BlY3RvclByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBh
Z2UpCisjaWYgUExBVEZPUk0oTUFDKQorICAgIDogbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2
aXR5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViSW5zcGVjdG9yUHJveHk6OmNsb3Nl
RnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQorI2VuZGlmCit7CisgICAgaWYgKGlu
c3BlY3RlZFBhZ2UgJiYgaW5zcGVjdGVkUGFnZS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkgeworICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOworICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlE
KCksICp0aGlzKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3RvclByb3h5Ojp+V2ViSW5zcGVjdG9y
UHJveHkoKQoreworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGlvbkxl
dmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3Rl
ZFBhZ2UoKSk7Cit9CisKK1dlYlByZWZlcmVuY2VzJiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdl
KTsKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAo
bV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworCisgICAgY2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKworICAg
IG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlKSk7Cit9CisKKy8vIFB1YmxpYyBBUElzCitib29sIFdlYkluc3BlY3RvclByb3h5Ojpp
c0Zyb250KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5Ojpjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvd01lc3NhZ2VTZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7CisgICAgbV9pZ25vcmVGaXJzdEJyaW5n
VG9Gcm9udCA9IHRydWU7CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
cjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnNob3coKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaXNDb25uZWN0ZWQoKSkgeworICAgICAgICBicmluZ1RvRnJvbnQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbm5lY3QoKTsKKworICAgIC8vIERv
bid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNvIGl0IG9wZW5zIHRoZSBJbnNwZWN0
b3IuCisgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpoaWRlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIHBsYXRmb3Jt
SGlkZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZSgpCit7CisgICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKKworICAgIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3Nl
Rm9yQ3Jhc2goKQoreworICAgIGNsb3NlKCk7CisKKyAgICBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jh
c2goKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xvc2UoKTsKKyAgICBz
aG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3RhdGUoKQoreworICAg
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkSGVpZ2h0
KCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNo
ZWRXaWR0aCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3Rv
ckF0dGFjaG1lbnRTaWRlKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRl
SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworCisgICAgcGxhdGZvcm1SZXNldFN0YXRl
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0ZWRQYWdlKSB7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5z
cGVjdGVkUGFnZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCit7
CisgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdl
KTsKKworICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisgICAgbV9pbnNwZWN0
ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJ
RCgpLCAqdGhpcyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9u
KCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24o
SVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25J
ZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDb25zb2xlKCkK
K3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3Jl
YXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNob3dSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVk
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3VyY2VzKCkpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViRnJh
bWVQcm94eSogZnJhbWUpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShm
cmFtZS0+ZnJhbWVJRCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEJv
dHRvbSgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1l
bnRTaWRlOjpSaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaExlZnQo
KQoreworICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVmdCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBzaWRlKQoreworICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlIHx8ICFjYW5BdHRhY2goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9p
c0F0dGFjaGVkID0gdHJ1ZTsKKyAgICBtX2F0dGFjaG1lbnRTaWRlID0gc2lkZTsKKworICAgIGlu
c3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaG1lbnRTaWRlKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihzaWRlKSk7CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisgICAgICAg
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRy
dWUpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlNldEF0dGFjaGVkKHRydWUpKTsKKworICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewor
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6CisgICAgICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmln
aHQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoK
KyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUF0
dGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpkZXRhY2goKQoreworICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNoZWQg
PSBmYWxzZTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5zcGVjdG9yUGFnZVBy
ZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOworCisgICAgbV9p
bnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKGZh
bHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6RGV0YWNoZWQoKSk7CisKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7
CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWln
aHQoaGVpZ2h0KTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQgd2lkdGgpCit7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVj
dG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7CisgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dp
ZHRoKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0
b2dnbGVQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1faXNQcm9maWxpbmdQYWdlKQorICAgICAgICBtX2luc3Bl
Y3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmco
KSk7CisgICAgZWxzZQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2
ZSkgeworICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOworICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcEVs
ZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29ubmVjdCgpOworICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRF
bGVtZW50U2VsZWN0aW9uKCkpOworICAgIH0KK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6
aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmIHVybCkKK3sKKyAgICAvLyBVc2Ug
VVJMIHNvIHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQgcHJvdG9jb2xzLgorICAgIFVSTCBt
YWluUGFnZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSk7
CisgICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdlVVJMLnByb3RvY29sKCkgJiYgZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCisgICAg
U3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRl
c3RQYWdlVVJMKCk7CisgICAgaWYgKHRlc3RQYWdlVVJMU3RyaW5nLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBVUkwgdGVzdFBhZ2VVUkwoVVJMKCksIHRlc3RQYWdlVVJM
U3RyaW5nKTsKKyAgICByZXR1cm4gdXJsLnByb3RvY29sKCkgPT0gdGVzdFBhZ2VVUkwucHJvdG9j
b2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJM
RXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yUGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVh
dGVGcm9udGVuZFBhZ2UoKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAo
IW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhY2tJbnNwZWN0b3JQ
YWdlKG1faW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdlKTsKKworICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVy
KCksICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hc3N1bWVSZWFkQWNj
ZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JCYXNlVVJMKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuTG9jYWxJbnNw
ZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCit7CisgICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2luc3BlY3Rl
ZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCkpIHsKKyAgICAg
ICAgc2hvdygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV91bmRlclRlc3QgPSB1
bmRlclRlc3Q7CisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBBU1NFUlQobV9pbnNw
ZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0
YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgaW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVsKCkpKTsKKworICAg
IEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKKyAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSB0
cnVlOworICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RG
cm9udGVuZCgqdGhpcyk7CisKKyAgICBpZiAoIW1fdW5kZXJUZXN0KSB7CisgICAgICAgIG1fY2Fu
QXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKTsKKyAgICAgICAgbV9pc0F0dGFj
aGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7CisgICAgICAgIG1fYXR0YWNobWVudFNpZGUgPSBz
dGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5z
cGVjdG9yQXR0YWNobWVudFNpZGUoKSk7CisKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKG1faXNBdHRhY2hlZCkpOworCisg
ICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9hdHRhY2ht
ZW50U2lkZSkgeworICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAg
ICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OkF0dGFjaGVkQm90dG9tKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpMZWZ0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKKworICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRE
b2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7CisgICAgfQorCisgICAgLy8gTm90aWZ5
IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBhdHRhY2hlcyBzbyB0aGF0IGl0
IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUgX1dLSW5zcGVjdG9yIGxvYWRpbmcg
aXRzIGZyb250ZW5kLgorICAgIG1faW5zcGVjdGVkUGFnZS0+dWlDbGllbnQoKS5kaWRBdHRhY2hJ
bnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOworCisgICAgLy8gQmFpbCBvdXQgaWYg
dGhlIGNsaWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBmcm9tIHRoZSBkZWxlZ2F0ZSBtZXRob2Qu
CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5z
cGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBtX3VuZGVyVGVzdCA/IFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDogV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvclBhZ2VVUkwoKSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuKCkK
K3sKKyAgICBpZiAobV91bmRlclRlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXRGb3JTY29wZTxib29sPiBp
c09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zp
c2libGUobV9pc1Zpc2libGUpKTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIHBs
YXRmb3JtQXR0YWNoKCk7CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
V2luZG93KCk7CisKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpkaWRDbG9zZSgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKQoreworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworICAgIG1faXNQcm9maWxpbmdQYWdlID0gZmFsc2U7
CisgICAgbV9zaG93TWVzc2FnZVNlbnQgPSBmYWxzZTsKKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdU
b0Zyb250ID0gZmFsc2U7CisKKyAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBh
Z2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSk7CisK
KyAgICBpZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7CisgICAgICAgIG1faXNBY3RpdmVGcm9udGVu
ZCA9IGZhbHNlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5kaXNjb25uZWN0RnJvbnRlbmQoKnRoaXMpOworICAgIH0KKworICAgIGlmIChtX2lzQXR0YWNo
ZWQpCisgICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7CisKKyAgICAvLyBOdWxsIG91dCBtX2luc3Bl
Y3RvclBhZ2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28gdGhlIHZpZXdzIGNhbiBiZSBjbGVh
bmVkIHVwIGNvcnJlY3RseS4KKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOworCisgICAg
bV9pc0F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9jYW5BdHRhY2ggPSBmYWxzZTsKKyAgICBtX3Vu
ZGVyVGVzdCA9IGZhbHNlOworCisgICAgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogYXV0b21hdGlvblNlc3Npb24gPSBt
X2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmF1dG9tYXRpb25TZXNzaW9u
KCkpCisgICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5pbnNwZWN0b3JGcm9udGVuZExvYWRlZCgq
bV9pbnNwZWN0ZWRQYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zy
b250KCkKK3sKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHRl
bGxzIHVzIHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0bworICAgIC8vIGlnbm9yZSBpdCBv
bmNlIGlmIHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRoaXMgYWxsb3dzIHRoZSBJbnNwZWN0
b3IgdG8gbGF0ZXIKKyAgICAvLyByZXF1ZXN0IHRvIGJlIGJyb3VnaHQgdG8gdGhlIGZyb250IHdo
ZW4gYSBicmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVyIGFjdGlvbi4KKyAgICBpZiAobV9p
Z25vcmVGaXJzdEJyaW5nVG9Gcm9udCkgeworICAgICAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zy
b250ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1Zpc2li
bGUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7CisgICAgZWxzZQorICAgICAgICBv
cGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nSW5zcGVjdGVkUGFnZVRv
RnJvbnQoKQoreworICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wg
YXZhaWxhYmxlKQoreworICAgIGJvb2wgcHJldmlvdXNDYW5BdHRhY2ggPSBtX2NhbkF0dGFjaDsK
KworICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxhYmxlKTsKKworICAg
IGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFjaCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCisgICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2
YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKworICAgIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChtX2NhbkF0dGFjaCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgcGxhdGZvcm1J
bnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFj
dGl2ZSkKK3sKKyAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgPSBhY3RpdmU7CisKKyAgICBp
ZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7CisgICAgICAgIG1faWdub3JlRWxl
bWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAoIW1faXNWaXNpYmxlKQor
ICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChh
Y3RpdmUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworICAg
IGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCisgICAgICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3Rp
dmUpCit7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3RpdmU7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25h
bDxib29sPiBlbmFibGVkKQoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+
c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKGVuYWJsZWQpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5n
QXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIHBs
YXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3JtQXBwZW5kKGZpbGVu
YW1lLCBjb250ZW50KTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdWxkT3BlbkF0
dGFjaGVkKCkKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsKK30KKworLy8gVW5zdXBwb3J0ZWQg
Y29uZmlndXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJvdmlkZWQgaGVyZS4KKworI2lmICFQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK1dlYlBh
Z2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRl
SW5mbyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29u
dGVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0
dGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0
V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFz
ZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVi
dWdnYWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRGVidWdnYWJs
ZUluZm9EYXRhOjplbXB0eSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmIC8v
ICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMmIxZmRmY2ExZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApAQCAtMCwwICsxLDMwMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQXR0YWNobWVudC5oIgor
I2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShN
QUMpCisjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgTlNVUkw7CitPQkpDX0NMQVNT
IE5TVmlldzsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLV2ViSW5zcGVjdG9y
UHJveHlPYmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsK
KyNlbGlmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWVQcm94eTsKK2NsYXNzIFdlYkluc3BlY3RvclByb3h5
Q2xpZW50OworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJlZmVyZW5jZXM7CisKK2Vu
dW0gY2xhc3MgQXR0YWNobWVudFNpZGUgeworICAgIEJvdHRvbSwKKyAgICBSaWdodCwKKyAgICBM
ZWZ0LAorfTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKKyAgICA6IHB1YmxpYyBBUEk6Ok9i
amVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KKyAgICAsIHB1YmxpYyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
CisjaWYgUExBVEZPUk0oV0lOKQorICAgICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VM
aXN0ZW5lcgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JQ
cm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3BlY3RlZFBhZ2UpKTsK
KyAgICB9CisKKyAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0
ZSgpOworCisgICAgLy8gUHVibGljIEFQSXMKKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKyAgICBXZWJQYWdlUHJveHkq
IGluc3BlY3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2U7IH0KKworICAg
IGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVjdG9yUGFnZTsgfQor
ICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0KKyAgICBi
b29sIGlzRnJvbnQoKTsKKworICAgIHZvaWQgY29ubmVjdCgpOworCisgICAgdm9pZCBzaG93KCk7
CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2VGb3JD
cmFzaCgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisKKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdl
UHJveHkqKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBlbnVtIGNsYXNzIEluc3BlY3Rpb25U
YXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNXaW5k
b3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0
aW9uVGFyZ2V0VHlwZSk7CisKKyAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkg
Y29uc3Q7CisgICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCA9IDAp
OworICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB2b2lkIHdpbmRvd0Z1bGxT
Y3JlZW5EaWRDaGFuZ2UoKTsKKyAgICBOU1dpbmRvdyogaW5zcGVjdG9yV2luZG93KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KKworICAgIHZvaWQgY2xvc2VGcm9u
dGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZp
cmVkKCk7CisKKyAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmll
dywgTlNWaWV3ICpuZXdWaWV3KTsKKyAgICB2b2lkIGF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5k
b3coTlNXaW5kb3cgKm9sZFdpbmRvdyk7CisgICAgdm9pZCBhdHRhY2htZW50RGlkTW92ZVRvV2lu
ZG93KE5TV2luZG93ICpuZXdXaW5kb3cpOworCisgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JWaWV3OyB9OworICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7CisjZW5kaWYKKworICAgIHZvaWQgc2hv
d0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNob3dNYWlu
UmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CisKKyAgICBBdHRhY2htZW50U2lkZSBh
dHRhY2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0KKyAgICBi
b29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KKyAgICB2b2lk
IGF0dGFjaFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hMZWZ0KCk7CisgICAgdm9pZCBhdHRhY2hC
b3R0b20oKTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRl
OjpCb3R0b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQpOworCisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOworCisgICAgYm9vbCBpc1Byb2ZpbGlu
Z1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQorICAgIHZvaWQgdG9n
Z2xlUGFnZVByb2ZpbGluZygpOworCisgICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUo
KSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KKyAgICB2b2lkIHRv
Z2dsZUVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7
IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZShib29sKTsKKworICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYkluc3BlY3Rv
clByb3h5IGltcGxlbWVudGF0aW9ucy4KKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclBhZ2VV
UkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJMKCk7CisgICAgc3Rh
dGljIFN0cmluZyBpbnNwZWN0b3JCYXNlVVJMKCk7CisgICAgc3RhdGljIGJvb2wgaXNNYWluT3JU
ZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgRGVidWdnYWJsZUluZm9E
YXRhIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtaW5pbXVtV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1X
aW5kb3dIZWlnaHQ7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd1dp
ZHRoOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0OworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSopOwor
CisgICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7CisKKyAgICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAorICAgIHZvaWQgc2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgQ29u
bmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb25u
ZWN0aW9uVHlwZTo6TG9jYWw7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVG
cm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsK
KyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIHZv
aWQgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7CisgICAgdm9pZCBwbGF0Zm9ybUludmFsaWRh
dGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1C
cmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9u
dCgpOworICAgIHZvaWQgcGxhdGZvcm1IaWRlKCk7CisgICAgYm9vbCBwbGF0Zm9ybUlzRnJvbnQo
KTsKKyAgICB2b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKKyAg
ICB2b2lkIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpOworICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCk7CisgICAg
dW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOworICAgIHZvaWQgcGxhdGZv
cm1BdHRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7CisgICAgdm9pZCBwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VT
YXZlQXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIHBs
YXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7CisjZWxzZQorICAgIGJv
b2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKSB7IHJldHVybiB3
ZWJQcm9jZXNzQ2FuQXR0YWNoOyB9CisjZW5kaWYKKworICAgIC8vIENhbGxlZCBieSBXZWJJbnNw
ZWN0b3JQcm94eSBtZXNzYWdlcworICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQo
Ym9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKKyAgICB2b2lkIHNldEZyb250ZW5kQ29u
bmVjdGlvbihJUEM6OkF0dGFjaG1lbnQpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2Vu
ZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisgICAgdm9pZCBk
aWRDbG9zZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBicmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCk7CisgICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJv
b2wpOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2
b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKyAg
ICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgdGltZWxpbmVS
ZWNvcmRpbmdDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5h
YmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKKworICAgIHZvaWQgc2F2ZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Ym9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworICAgIGJvb2wgY2FuQXR0YWNoKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNob3VsZE9wZW5BdHRhY2hlZCgpOwor
CisgICAgdm9pZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25z
dDsKKworICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25z
dDsKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIHZvaWQgdXBkYXRl
SW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lO
KQorICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOworICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIHZvaWQgd2lu
ZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKSBvdmVycmlkZTsK
KyNlbmRpZgorCisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2UgeyBudWxscHRyIH07
CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisKKyAgICBi
b29sIG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWaXNpYmxlIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NhbkF0dGFj
aCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUZpcnN0
QnJpbmdUb0Zyb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2
ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0Fj
dGl2ZUZyb250ZW5kIHsgZmFsc2UgfTsKKworICAgIEF0dGFjaG1lbnRTaWRlIG1fYXR0YWNobWVu
dFNpZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OworCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXdDb250
cm9sbGVyOworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JXaW5kb3c7CisgICAg
UmV0YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsK
KyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVh
bFVSTE1hcDsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94eT4gbV9jbG9zZUZy
b250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5nOworICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKKyAgICBib29sIG1faXNPYnNlcnZpbmdD
b250ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07CisjZWxpZiBQTEFURk9STShHVEspCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVudDsKKyAgICBHdGtX
aWRnZXQqIG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKKyAgICBHdGtXaWRnZXQqIG1faW5z
cGVjdG9yV2luZG93IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9oZWFkZXJCYXIgeyBu
dWxscHRyIH07CisgICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOworI2VsaWYgUExBVEZP
Uk0oV0lOKQorICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVsbHB0ciB9OworICAg
IEhXTkQgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQg
bV9pbnNwZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3cgeyBudWxscHRyIH07CisgICAgUmVmUHRyPFdlYlZpZXc+IG1faW5zcGVjdG9y
VmlldzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJv
eHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVi
Yjc3NTUzYzZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNTggQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4g
V2ViSW5zcGVjdG9yUHJveHkgeworICAgIE9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wg
Y2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKKyAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBD
OjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorCisgICAgU2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoU3RyaW5nIG1lc3NhZ2UpCisKKyAgICBGcm9udGVuZExvYWRlZCgpCisgICAgRGlkQ2xv
c2UoKQorICAgIEJyaW5nVG9Gcm9udCgpCisgICAgQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgp
CisgICAgUmVvcGVuKCkKKyAgICBSZXNldFN0YXRlKCkKKworICAgIEluc3BlY3RlZFVSTENoYW5n
ZWQoU3RyaW5nIHVybFN0cmluZykKKyAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKKyAgICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sIGFjdGl2ZSkKKyAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCisg
ICAgU2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVu
YWJsZWQpCisKKyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVu
YW1lLCBTdHJpbmcgY29udGVudCkKKworICAgIEF0dGFjaEJvdHRvbSgpCisgICAgQXR0YWNoUmln
aHQoKQorICAgIEF0dGFjaExlZnQoKQorICAgIERldGFjaCgpCisKKyAgICBBdHRhY2hBdmFpbGFi
aWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQorCisgICAgU2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KQorICAgIFNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQg
d2lkdGgpCisKKyAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKKyAg
ICBTdGFydFdpbmRvd0RyYWcoKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZlYTE1ZWU2NTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVz
LmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIkFQSVByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVkZWYgSGFzaE1hcDxX
ZWJQYWdlUHJveHkqLCB1bnNpZ25lZD4gUGFnZUxldmVsTWFwOworCitzdGF0aWMgUGFnZUxldmVs
TWFwJiBwYWdlTGV2ZWxNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQYWdlTGV2
ZWxNYXA+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit1bnNpZ25lZCBpbnNwZWN0b3JMZXZl
bEZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIGlmIChwYWdlKSB7CisgICAgICAg
IGF1dG8gZmluZFJlc3VsdCA9IHBhZ2VMZXZlbE1hcCgpLmZpbmQocGFnZSk7CisgICAgICAgIGlm
IChmaW5kUmVzdWx0ICE9IHBhZ2VMZXZlbE1hcCgpLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworU3Ry
aW5nIGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFn
ZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiX19XZWJJbnNwZWN0b3JQYWdlR3JvdXBMZXZl
bCIsIGluc3BlY3RvckxldmVsRm9yUGFnZShwYWdlKSwgIl9fIik7Cit9CisKK3ZvaWQgdHJhY2tJ
bnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBp
bnNwZWN0ZWRQYWdlKQoreworICAgIHBhZ2VMZXZlbE1hcCgpLnNldChpbnNwZWN0b3JQYWdlLCBp
bnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSkpOworfQorCit2b2lkIHVudHJhY2tJ
bnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSkKK3sKKyAgICBwYWdlTGV2
ZWxNYXAoKS5yZW1vdmUoaW5zcGVjdG9yUGFnZSk7Cit9CisKK3N0YXRpYyBXZWJQcm9jZXNzUG9v
bCogc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CitzdGF0aWMgV2ViUHJvY2Vzc1Bvb2wqIHNf
bmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CisKK1dlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQ
cm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCit7CisgICAgLy8gSGF2aW5nIG91
ciBvd24gcHJvY2VzcyBwb29sIHJlbW92ZXMgdXMgZnJvbSB0aGUgbWFpbiBwcm9jZXNzIHBvb2wg
YW5kCisgICAgLy8gZ3VhcmFudGVlcyBubyBwcm9jZXNzIHNoYXJpbmcgZm9yIG91ciB1c2VyIGlu
dGVyZmFjZS4KKyAgICBXZWJQcm9jZXNzUG9vbComIHBvb2wgPSAoaW5zcGVjdGlvbkxldmVsID09
IDEpID8gc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgOiBzX25lc3RlZEluc3BlY3RvclByb2Nl
c3NQb29sOworICAgIGlmICghcG9vbCkgeworICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBB
UEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIHBvb2wgPSAm
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uLmdldCgpKS5sZWFrUmVmKCk7Cisg
ICAgICAgIC8vIERvIG5vdCBkZWxheSBwcm9jZXNzIGxhdW5jaCBmb3IgaW5zcGVjdG9yIHBhZ2Vz
IGFzIGluc3BlY3RvciBwYWdlcyBkbyBub3Qga25vdyBob3cgdG8gdHJhbnNpdGlvbiBmcm9tIGEg
dGVybWluYXRlZCBwcm9jZXNzLgorICAgICAgICBwb29sLT5kaXNhYmxlRGVsYXllZFdlYlByb2Nl
c3NMYXVuY2goKTsKKyAgICB9CisgICAgcmV0dXJuICpwb29sOworfQorCitib29sIGlzSW5zcGVj
dG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQoreworICAgIHJldHVy
biAoc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bv
b2wgPT0gJnByb2Nlc3NQb29sKQorICAgICAgICB8fCAoc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNz
UG9vbCAmJiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9jZXNzUG9vbCk7Cit9
CisKK2Jvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKK3sKKyAgICBy
ZXR1cm4gcGFnZUxldmVsTWFwKCkuY29udGFpbnMoJndlYlBhZ2UpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uYzE5ZWE3NTg4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7Citj
bGFzcyBXZWJQcm9jZXNzUG9vbDsKKworLy8gVGhlIGluc3BlY3RvciBwYWdlIGdyb3VwcyBhcmUg
dXNlZCB0byBnaXZlIGRpZmZlcmVudCBwcmVmZXJlbmNlcyB0byBlYWNoCisvLyBpbnNwZWN0b3Ig
bGV2ZWwgYnkgc2V0dGluZyBhIHBlci1sZXZlbCBwYWdlIGdyb3VwIGlkZW50aWZpZXIuCit1bnNp
Z25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVByb3h5Kik7CitTdHJpbmcgaW5zcGVj
dG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5Kik7Cit2b2lkIHRyYWNr
SW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSog
aW5zcGVjdGVkUGFnZSk7Cit2b2lkIHVudHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSog
aW5zcGVjdG9yUGFnZSk7CisKK1dlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9jZXNzUG9vbCh1
bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOworYm9vbCBpc0luc3BlY3RvclByb2Nlc3NQb29sKFdl
YlByb2Nlc3NQb29sJik7Citib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmKTsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VE
ZWJ1Z2dhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdl
RGVidWdnYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJl
YmJkZjg3YWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCisKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK1dlYlBhZ2VEZWJ1
Z2dhYmxlOjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBtX3Bh
Z2UocGFnZSkKK3sKK30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpuYW1lKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9u
YW1lT3ZlcnJpZGU7CisKKyAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUoKS0+dGl0bGUoKTsK
K30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwoKSBjb25zdAoreworICAgIGlmICgh
bV9wYWdlLm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gV1RGOjpibGFua1VSTCgpLnN0cmlu
ZygpOworCisgICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWluRnJhbWUoKS0+dXJsKCkuc3RyaW5n
KCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJM
KCkuc3RyaW5nKCk7CisKKyAgICByZXR1cm4gdXJsOworfQorCitib29sIFdlYlBhZ2VEZWJ1Z2dh
YmxlOjpoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7Cit9CisKK3ZvaWQgV2ViUGFnZURl
YnVnZ2FibGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsLCBib29sIGlzQXV0b21h
dGljQ29ubmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNlKQoreworICAgIG1fcGFnZS5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5uZWwsIGlzQXV0b21hdGljQ29u
bmVjdGlvbiwgaW1tZWRpYXRlbHlQYXVzZSk7Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2FibGU6
OmRpc2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQoreworICAgIG1fcGFnZS5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOworfQorCit2b2lk
IFdlYlBhZ2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNo
TWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJs
ZTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7CisgICAgbV9wYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOworfQorCit2b2lkIFdlYlBh
Z2VEZWJ1Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IG1fbmFtZU92ZXJyaWRlID0gbmFtZTsKKyAgICB1cGRhdGUoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhmODQ4ZGUxMTZhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VE
ZWJ1Z2dhYmxlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0aW9uVGFyZ2V0
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYlBhZ2VEZWJ1Z2dhYmxlIGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdGlvblRhcmdldCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZURlYnVnZ2Fi
bGUpOworcHVibGljOgorICAgIFdlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYpOworICAg
IH5XZWJQYWdlRGVidWdnYWJsZSgpID0gZGVmYXVsdDsKKworICAgIEluc3BlY3Rvcjo6UmVtb3Rl
Q29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNw
ZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6VHlwZTo6V2ViUGFnZTsgfQorCisgICAg
U3RyaW5nIG5hbWUoKSBjb25zdCBmaW5hbDsKKyAgICBTdHJpbmcgdXJsKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVj
dGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSkgZmluYWw7CisgICAg
dm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikgZmluYWw7CisgICAg
dm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmlu
YWw7CisgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpIGZpbmFsOworCisgICAgY29uc3QgU3Ry
aW5nJiBuYW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX25hbWVPdmVycmlkZTsgfQorICAg
IHZvaWQgc2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIFdl
YlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX25hbWVPdmVycmlkZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NPTlRST0xMQUJM
RV9UQVJHRVQoV2ViS2l0OjpXZWJQYWdlRGVidWdnYWJsZSwgV2ViUGFnZSk7CisKKyNlbmRpZiAv
LyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZWUyOGJmNzE2MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlByb3Zpc2lv
bmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJhc2UuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworc3Rh
dGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlz
aW9uYWxQYWdlKQoreworICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rhcmdl
dElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKK1dlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2Up
CisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRSb3V0ZXIoRnJvbnRlbmRSb3V0
ZXI6OmNyZWF0ZSgpKQorICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigpKSkKK3sKKyAgICBhdXRvIHRhcmdl
dEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9mcm9udGVuZFJvdXRl
ci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CisKKyAgICBtX3RhcmdldEFnZW50
ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7CisKKyAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92ZSh0YXJn
ZXRBZ2VudCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjppbml0KCkK
K3sKKyAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9U
YXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNyZWF0ZUluc3BlY3RvclRhcmdldChw
YWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSk7Cit9CisK
K3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQoKQoreworICAgIGRp
c2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIG1fYWdlbnRzLmRpc2NhcmRWYWx1ZXMoKTsK
K30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzTG9jYWxGcm9udGVuZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0ZXItPmhhc0xvY2FsRnJvbnRlbmQo
KTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwsIGJvb2wsIGJvb2wp
Cit7CisgICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91dGVy
LT5oYXNGcm9udGVuZHMoKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXItPmNvbm5lY3RGcm9udGVu
ZChmcm9udGVuZENoYW5uZWwpOworCisgICAgaWYgKGNvbm5lY3RpbmdGaXJzdEZyb250ZW5kKQor
ICAgICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoJm1fZnJvbnRlbmRS
b3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKworICAgIG1fcGFnZS5k
aWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5k
Q291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBpZiAoaGFzTG9j
YWxGcm9udGVuZCgpKQorICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25E
aWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpkaXNjb25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwpCit7
CisgICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZyb250ZW5kKGZyb250ZW5kQ2hhbm5l
bCk7CisKKyAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQgPSAhbV9mcm9udGVuZFJv
dXRlci0+aGFzRnJvbnRlbmRzKCk7CisgICAgaWYgKGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQp
CisgICAgICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5l
Y3RSZWFzb246Okluc3BlY3RvckRlc3Ryb3llZCk7CisKKyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5z
cGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOwor
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgaWYgKGRpc2Nvbm5lY3RpbmdMYXN0
RnJvbnRlbmQpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENo
YW5nZSgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRp
c2Nvbm5lY3RBbGxGcm9udGVuZHMoKQoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgYSBsb2NhbCBp
bnNwZWN0b3IgY2xpZW50LgorCisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVu
ZHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90aWZ5IGFnZW50cyBmaXJzdCwgc2lu
Y2UgdGhleSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xpZW50LgorICAgIG1fYWdlbnRzLndp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRh
cmdldERlc3Ryb3llZCk7CisKKyAgICAvLyBEaXNjb25uZWN0IGFueSByZW1haW5pbmcgcmVtb3Rl
IGZyb250ZW5kcy4KKyAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0QWxsRnJvbnRlbmRz
KCk7CisKKyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250
ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNU
T1IpCisgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKworI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5kaWNhdGluZyhi
b29sIGluZGljYXRpbmcpCit7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgbV9wYWdl
LnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7CisjZWxzZQorICAgIGlmIChpbmRpY2F0aW5nKQor
ICAgICAgICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOworI2VuZGlmCit9CisjZW5kaWYK
Kwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0
eXBlKQoreworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKG1fcGFn
ZSwgdGFyZ2V0SWQsIHR5cGUpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkKQoreworICAg
IGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7CisgICAgaWYgKGl0ID09IG1fdGFy
Z2V0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERl
c3Ryb3llZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMucmVtb3ZlKGl0KTsKK30KKwordm9p
ZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250
ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250ZW5kKHRhcmdldElk
LCBtZXNzYWdlKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdWxk
UGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2Up
IGNvbnN0Cit7CisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldChn
ZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKKyAgICBBU1NFUlQodGFyZ2V0KTsKKyAgICBy
ZXR1cm4gdGFyZ2V0LT5pc1BhdXNlZCgpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92aXNpb25hbFBhZ2VQ
cm94eSYgcHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdldElEKHByb3Zpc2lv
bmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHRhcmdldC0+c2V0UmVzdW1lQ2Fs
bGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHBy
b3Zpc2lvbmFsUGFnZSkKK3sKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNy
ZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSksIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNp
b25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIGRlc3Ryb3lJbnNwZWN0b3JU
YXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBh
Z2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rh
cmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5ld0lEID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOworICAgIGF1dG8gbmV3VGFyZ2V0ID0g
bV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChuZXdUYXJnZXQpOworICAgIG5ld1Rh
cmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBtX3RhcmdldEFnZW50LT5k
aWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOworCisgICAgLy8gV2UndmUg
ZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCByZWNlaXZlIGFueSBt
ZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJveSBldmVyeXRoaW5nIGJ1dCB0aGUg
bmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAy
OTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRoZSBjb21taXR0ZWQg
cGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkKKyAgICAg
ICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOworICAgIG1fdGFyZ2V0
cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVudGlmaWVyKCksIFdU
Rk1vdmUobmV3VGFyZ2V0KSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYgdGFyZ2V0
KQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQoKnRhcmdldCk7CisgICAgbV90
YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZSh0YXJnZXQpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OGNhZWRmMGMwYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkluc3BlY3RvclRh
cmdldFByb3h5LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRSZWdp
c3RyeS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3MgQmFja2VuZERpc3Bh
dGNoZXI7CitjbGFzcyBGcm9udGVuZENoYW5uZWw7CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcik7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CisKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2
b2lkIHBhZ2VDbG9zZWQoKTsKKworICAgIGJvb2wgaGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0Owor
CisgICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBi
b29sIGlzQXV0b21hdGljSW5zcGVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2Ug
PSBmYWxzZSk7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwmKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIHZv
aWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisK
KyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICB2b2lkIHNldEluZGljYXRpbmcoYm9v
bCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgdm9pZCBk
ZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOworICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICBib29sIHNob3VsZFBhdXNlTG9hZGluZyhjb25z
dCBQcm92aXNpb25hbFBhZ2VQcm94eSYpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGludWVMb2Fk
aW5nQ2FsbGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoKT4mJik7CisKKyAgICB2b2lkIGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25h
bFBhZ2VQcm94eSYpOworICAgIHZvaWQgd2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3Qg
UHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFn
ZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIG5ld1dlYlBhZ2VJRCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRUYXJnZXQoc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmKTsKKworICAgIFdlYlBhZ2VQcm94
eSYgbV9wYWdlOworICAgIFJlZjxJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5k
Um91dGVyOworICAgIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworICAgIEluc3BlY3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKKyAgICBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KiBtX3RhcmdldEFnZW50OworICAgIEhhc2hN
YXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3Rhcmdl
dHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOWQ1MGRjMjg2
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
bGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAi
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1v
dGVJbnNwZWN0b3JVdGlscy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVidWdnYWJs
ZVR5cGUuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVj
dG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVj
dG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIHVpbnQ2NF90
IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCisgICAgICAgIDogbV9wcm94eShSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9pbnNwZWN0b3JDbGll
bnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5lY3Rpb25J
RCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQorICAgIHsKKyAgICAgICAgbV9wcm94
eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94eSgp
CisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIG1f
cHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQoKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hvdWxk
IGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICAgICAg
UmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJOjpEZWJ1Z2dhYmxl
SW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7CisgICAgICAgIGRlYnVn
Z2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpX
ZWJQYWdlKTsKKyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKSwg
bV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOworICAgIH0KKworICAgIHZv
aWQgc2hvdygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisgICAg
dm9pZCBzZXRUYXJnZXROYW1lKGNvbnN0IENTdHJpbmcmIG5hbWUpCisgICAgeworI2lmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgbV9wcm94eS0+dXBkYXRlV2luZG93VGl0bGUobmFtZSk7CisjZW5k
aWYKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
bWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVu
dC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCwgbWVzc2Fn
ZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVuZChtX2Nvbm5lY3Rp
b25JRCwgbV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZjxSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQmIG1faW5z
cGVjdG9yQ2xpZW50OworICAgIHVpbnQ2NF90IG1fY29ubmVjdGlvbklEOworICAgIHVpbnQ2NF90
IG1fdGFyZ2V0SUQ7Cit9OworCitjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxl
cnMmIFJlbW90ZUluc3BlY3RvckNsaWVudDo6bWVzc2FnZUhhbmRsZXJzKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJz
PiBtZXNzYWdlSGFuZGxlcnMgPSBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMoewor
ICAgIHsgIkRpZENsb3NlIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1l
c3NhZ2VDYWxsYmFjaz4geyB7IH0sCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFy
aWFudCosIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAq
c3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOworICAgICAgICAg
ICAgY2xpZW50LmNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAgICAgICB9fQorICAgIH0sCisgICAg
eyAiRGlkU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29u
bmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIoYXkpIiwKKyAgICAgICAgW10oU29ja2V0Q29u
bmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVu
dCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGJhY2tlbmRDb21t
YW5kc1ZhcmlhbnQ7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoQGF5
KSIsICZiYWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigpKTsKKyAgICAgICAgICAgIGNsaWVu
dC5zZXRCYWNrZW5kQ29tbWFuZHMoZ192YXJpYW50X2dldF9ieXRlc3RyaW5nKGJhY2tlbmRDb21t
YW5kc1ZhcmlhbnQuZ2V0KCkpKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNldFRhcmdl
dExpc3QiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxi
YWNrPiB7ICIodGEodHNzc2IpKSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFy
aWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8m
IGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7
CisgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsKKyAgICAgICAgICAgIEdVbmlxdWVP
dXRQdHI8R1ZhcmlhbnRJdGVyPiBpdGVyOworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJh
bWV0ZXJzLCAiKHRhKHRzc3NiKSkiLCAmY29ubmVjdGlvbklELCAmaXRlci5vdXRQdHIoKSk7Cisg
ICAgICAgICAgICBzaXplX3QgdGFyZ2V0Q291bnQgPSBnX3ZhcmlhbnRfaXRlcl9uX2NoaWxkcmVu
KGl0ZXIuZ2V0KCkpOworICAgICAgICAgICAgVmVjdG9yPFJlbW90ZUluc3BlY3RvckNsaWVudDo6
VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgICAgICAgICAgdGFyZ2V0TGlzdC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHRhcmdldENvdW50KTsKKyAgICAgICAgICAgIGd1aW50NjQgdGFyZ2V0SUQ7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiB0eXBlOworICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICAgICAgICAgIGdib29sZWFuIGhh
c0xvY2FsRGVidWdnZXI7CisgICAgICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcChp
dGVyLmdldCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwgJnR5cGUsICZuYW1lLCAmdXJsLCAm
aGFzTG9jYWxEZWJ1Z2dlcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdfc3RyY21wMCh0eXBl
LCAiV2ViIikgfHwgIWdfc3RyY21wMCh0eXBlLCAiSmF2YVNjcmlwdCIpKQorICAgICAgICAgICAg
ICAgICAgICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFwcGVuZCh7IHRhcmdldElELCB0eXBlLCBuYW1l
LCB1cmwgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGllbnQuc2V0VGFyZ2V0TGlz
dChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOworICAgICAgICB9fQorICAgIH0s
CisgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tl
dENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0cykiLAorICAgICAgICBbXShTb2Nr
ZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7
CisgICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9y
Q2xpZW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQsIHRh
cmdldElEOworICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyAgICAgICAgICAgIGdf
dmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCZzKSIsICZjb25uZWN0aW9uSUQsICZ0YXJnZXRJ
RCwgJm1lc3NhZ2UpOworICAgICAgICAgICAgY2xpZW50LnNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKKyAgICAgICAgfX0KKyAgICB9CisgICAg
fSk7CisgICAgcmV0dXJuIG1lc3NhZ2VIYW5kbGVyczsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQg
cG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQorICAgIDogbV9ob3N0QW5k
UG9ydChTdHJpbmc6OmZyb21VVEY4KGFkZHJlc3MpICsgJzonICsgU3RyaW5nOjpudW1iZXIocG9y
dCkpCisgICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9w
dEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCit7CisgICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50
PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsKKyAgICBn
X3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENsaWVudC5nZXQoKSwg
bV9ob3N0QW5kUG9ydC51dGY4KCkuZGF0YSgpLCAwLCBtX2NhbmNlbGxhYmxlLmdldCgpLAorICAg
ICAgICBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1
c2VyRGF0YSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAg
ICAgICAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0R1Jl
ZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChHX1NPQ0tFVF9DTElFTlQo
b2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnX2Vy
cm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvKiBjbGllbnQgPSBz
dGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAg
ICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICBjbGllbnQtPnNldHVwQ29ubmVjdGlv
bihTb2NrZXRDb25uZWN0aW9uOjpjcmVhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhh
bmRsZXJzKCksIGNsaWVudCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8g
aW5zcGVjdG9yIHNlcnZlcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICAgICAg
Y2xpZW50LT5tX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKmNsaWVudCk7CisgICAgICAgICAg
ICB9CisgICAgfSwgdGhpcyk7Cit9CisKK1JlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUlu
c3BlY3RvckNsaWVudCgpCit7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJs
ZS5nZXQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXR1cENvbm5lY3Rp
b24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICBtX3NvY2tldENv
bm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+
c2VuZE1lc3NhZ2UoIlNldHVwSW5zcGVjdG9yQ2xpZW50IiwgZ192YXJpYW50X25ldygiKEBheSki
LCBnX3ZhcmlhbnRfbmV3X2J5dGVzdHJpbmcoSW5zcGVjdG9yOjpiYWNrZW5kQ29tbWFuZHNIYXNo
KCkuZGF0YSgpKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2Vu
ZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKK3sKKyAgICBpZiAoIWJhY2tl
bmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7CisgICAgICAgIG1fYmFja2VuZENv
bW1hbmRzVVJMID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0
b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoYmFja2VuZENvbW1hbmRzLCBz
dHJsZW4oYmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7CisgICAgbV9iYWNrZW5kQ29tbWFu
ZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQor
Cit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkRpZENsb3NlKCkKK3sKKyAg
ICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLmNsZWFyKCk7Cisg
ICAgbV9zb2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX29ic2VydmVyLmNvbm5lY3Rp
b25DbG9zZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVj
dCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQoreworICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtlX3BhaXIoY29u
bmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElEXSB7Cisg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclByb3h5PigqdGhpcywgY29u
bmVjdGlvbklELCB0YXJnZXRJRCk7CisgICAgfSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdl
KCJTZXR1cCIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7
CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOworfQorCit2b2lkIFJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3QgY29ubmVjdGlv
bklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1f
c29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNzYWdlVG9CYWNrZW5kIiwgZ192
YXJpYW50X25ldygiKHR0cykiLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlLnV0Zjgo
KS5kYXRhKCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNsb3NlRnJvbUZy
b250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCit7CisgICAg
QVNTRVJUKG1faW5zcGVjdG9yUHJveHlNYXAuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoY29ubmVj
dGlvbklELCB0YXJnZXRJRCkpKTsKKyAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdl
KCJGcm9udGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rpb25JRCwg
dGFyZ2V0SUQpKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFp
cihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZXRUYXJnZXRMaXN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4m
JiB0YXJnZXRMaXN0KQoreworICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRo
ZW0uCisgICAgVmVjdG9yPHVpbnQ2NF90LCA0PiB0YXJnZXRzVG9SZW1vdmU7CisgICAgZm9yIChh
dXRvJiBjb25uZWN0aW9uVGFyZ2V0UGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5cygpKSB7
CisgICAgICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0UGFpci5maXJzdCAhPSBjb25uZWN0aW9uSUQp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAgICAg
IGlmICh0YXJnZXQuaWQgPT0gY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKSB7CisgICAgICAg
ICAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoY29ubmVjdGlvblRhcmdldFBhaXIpLT5z
ZXRUYXJnZXROYW1lKHRhcmdldC5uYW1lKTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5hcHBlbmQoY29ubmVj
dGlvblRhcmdldFBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChhdXRvIHRhcmdldElEIDog
dGFyZ2V0c1RvUmVtb3ZlKQorICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6
Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisKKyAgICBtX3RhcmdldHMuc2V0
KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAgbV9vYnNlcnZlci50YXJn
ZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJn
ZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0
b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwor
ICAgIEFTU0VSVChwcm94eSk7CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuOworICAg
IHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5hZGVlMDJjZTVkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5o
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1NvY2tldENvbm5lY3Rp
b24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3Qg
X0dDYW5jZWxsYWJsZSBHQ2FuY2VsbGFibGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsKK2Ns
YXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNl
cnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3Bl
Y3RvckNsaWVudCYpID0gMDsKK307CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0
b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVj
dG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7CisKKyAgICBzdHJ1
Y3QgVGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ2NF90IGlkOworICAgICAgICBD
U3RyaW5nIHR5cGU7CisgICAgICAgIENTdHJpbmcgbmFtZTsKKyAgICAgICAgQ1N0cmluZyB1cmw7
CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiYg
dGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorICAgIGNvbnN0IFN0cmluZyYg
aG9zdEFuZFBvcnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RBbmRQb3J0OyB9CisgICAgY29uc3Qg
U3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRDb21t
YW5kc1VSTDsgfQorCisgICAgdm9pZCBpbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWlu
dDY0X3QgdGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3Qg
Y29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdl
dElEKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVz
c2FnZUhhbmRsZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKKyAgICB2b2lkIHNldHVwQ29ubmVjdGlv
bihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAgdm9pZCBjb25uZWN0aW9uRGlkQ2xvc2Uo
KTsKKworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqKTsKKyAgICB2b2lk
IHNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmKTsK
KyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVp
bnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKik7CisKKyAgICBTdHJpbmcgbV9ob3N0QW5kUG9y
dDsKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisgICAgUmVtb3RlSW5zcGVjdG9y
T2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7CisgICAgUmVmUHRyPFNvY2tldENvbm5lY3Rpb24+IG1fc29j
a2V0Q29ubmVjdGlvbjsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOworICAgIEhh
c2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJ
bnNwZWN0b3JQcm94eUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi41OTljNDQ2NTc2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKKworY2xhc3MgV2ViSW5zcGVj
dG9yUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclByb3h5
Q2xpZW50KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBvcGVuV2luZG93KFdlYkluc3Bl
Y3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JQ
cm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclBy
b3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3Bl
Y3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYXR0
YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goV2Vi
SW5zcGVjdG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVk
SGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNp
Z25lZCB3aWR0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFpbGFi
aWxpdHkoV2ViSW5zcGVjdG9yUHJveHkmLCBib29sIGF2YWlsYWJsZSkgPSAwOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmRlMzQ5YmI3MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEd1c3Rh
dm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVkZSAiQVBJ
TmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKKyNpbmNsdWRl
ICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tDb250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJX
S011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgor
I2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VH
cm91cC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkIGluc3Bl
Y3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAg
V2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVj
dG9yUHJveHkqPih1c2VyRGF0YSk7CisKKyAgICAvLyBJbmZvcm0gV2ViUHJvY2VzcyBhYm91dCB3
ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAorICAgIC8vIHJlc3VsdHMgaW4gZmFp
bHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9yLgorICAgIGluc3Bl
Y3RvclByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRDbGll
bnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmIGNsaWVudCkKK3sK
KyAgICBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIEFTU0VSVCht
X2luc3BlY3RvcldpbmRvdyk7CisgICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUo
V0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCAhbV9pbnNwZWN0ZWRV
UkxTdHJpbmcuaXNFbXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSA6
IG51bGxwdHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VlZGVkRGF0YWJh
c2VRdW90YShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdLU3Ry
aW5nUmVmLCBXS1N0cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxv
bmcsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9u
ZyBsb25nIGV4cGVjdGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBzdGQ6Om1h
eDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnREYXRhYmFzZVVzYWdl
ICogMS4yNSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYklu
c3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKKyAg
ICB3ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCitzdGF0aWMgdm9pZCBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmln
YXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVy
UmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIEFQ
STo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+
c291cmNlRnJhbWUoKTsKKyAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01h
aW5GcmFtZSgpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYklu
c3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGll
bnRJbmZvKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworCisgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJl
cXVlc3QoKTsKKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZp
bGUuCisgICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdl
KHJlcXVlc3QudXJsKCkpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVs
c2UgZnJvbSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgorICAgIHRvSW1wbChsaXN0
ZW5lclJlZiktPmlnbm9yZSgpOworCisgICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUg
aW5zcGVjdGVkIHBhZ2UuCisgICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+
bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldENvbnRl
eHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tBcnJheVJlZiBwcm9w
b3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVzdFJlc3VsdFJlZiwg
V0tUeXBlUmVmLCBjb25zdCB2b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJheVJlZiBtZW51SXRl
bXMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJh
eUdldFNpemUocHJvcG9zZWRNZW51UmVmKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgY29udGV4dE1lbnVJdGVt
ID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRl
eChwcm9wb3NlZE1lbnVSZWYsIGkpKTsKKyAgICAgICAgc3dpdGNoIChXS0NvbnRleHRNZW51SXRl
bUdldFRhZyhjb250ZXh0TWVudUl0ZW0pKSB7CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0ZW1zLCBjb250ZXh0TWVu
dUl0ZW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbmV3
TWVudVJlZiA9IG1lbnVJdGVtczsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0ZWRQ
YWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3KTsKKworICAgIGF1dG8gcHJlZmVy
ZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2Vi
S2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxv
cGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0
IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0
ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIHByZWZlcmVuY2VzLT5zZXRKYXZh
U2NyaXB0UnVudGltZUZsYWdzKHsKKyAgICB9KTsKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBh
Z2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3Bl
Y3RlZFBhZ2UoKSkpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNz
UG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpKTsKKyAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOworICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKKyAgICBtX2lu
c3BlY3RvclZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29u
ZmlndXJhdGlvbi5wdHIoKSkpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV9pbnNwZWN0b3JWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3Rv
clZpZXcpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yVmlldywgImRlc3Ryb3ki
LCBHX0NBTExCQUNLKGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKworICAgIFdLUGFn
ZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7CisgICAgICAgIHsgMiwgdGhpcyB9LAorICAgICAgICBu
dWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAg
bnVsbHB0ciwgLy8gc2hvd1BhZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdlCisgICAg
ICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cworICAgICAgICBudWxscHRyLCAvLyBmb2N1cworICAg
ICAgICBudWxscHRyLCAvLyB1bmZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3Jp
cHRBbGVydAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQorICAgICAg
ICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0CisgICAgICAgIG51bGxwdHIsIC8vIHNl
dFN0YXR1c1RleHQKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRf
ZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2lu
QnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZE5vdEhhbmRsZUtleUV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdo
ZWVsRXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCisgICAgICAg
IG51bGxwdHIsIC8vIHNldFRvb2xiYXJzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBpc01l
bnVCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxlCisgICAg
ICAgIG51bGxwdHIsIC8vIGlzU3RhdHVzQmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBz
ZXRTdGF0dXNCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCisgICAg
ICAgIG51bGxwdHIsIC8vIHNldFJlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5k
b3dGcmFtZSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUsCisgICAgICAgIG51
bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAorICAgICAgICBudWxscHRyLCAv
LyBkaWREcmF3CisgICAgICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwKKyAgICAgICAgZXhj
ZWVkZWREYXRhYmFzZVF1b3RhLAorICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwsCisg
ICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0CisgICAgICAgIG51bGxwdHIs
IC8vIGZvb3RlckhlaWdodAorICAgICAgICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCisgICAgICAg
IG51bGxwdHIsIC8vIGRyYXdGb290ZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRGcmFtZQor
ICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAorICAgICAgICBudWxscHRyLCAvLyB1bnVzZWQK
KyAgICAgICAgbnVsbHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgorICAg
ICAgICBudWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0CisgICAgICAgIG51bGxw
dHIsIC8vIGNyZWF0ZVBhZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0
b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hv
d0NvbG9yUGlja2VyCisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgorICAgICAg
ICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICB9OworCisg
ICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQgPSB7CisgICAgICAg
IHsgMCwgdGhpcyB9LAorICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAor
ICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAorICAgICAgICBudWxs
cHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAv
LyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxs
cHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlz
aE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24KKyAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKKyAgICAgICAg
bnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJv
Z3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UKKyAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAorICAgICAgICBudWxs
cHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5CisKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
QmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdh
dGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUK
KyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAor
ICAgIH07CisKKyAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51Q2xpZW50
ID0geworICAgICAgICB7IDMsIHRoaXMgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gZ2V0Q29udGV4
dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVs
bHB0ciwgLy8gY3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQKKyAgICAgICAgbnVsbHB0ciwg
Ly8gY29udGV4dE1lbnVEaXNtaXNzZWQKKyAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9z
ZWRNZW51LAorICAgICAgICBudWxscHRyLCAvLyBzaG93Q29udGV4dE1lbnUKKyAgICAgICAgbnVs
bHB0ciwgLy8gaGlkZUNvbnRleHRNZW51CisgICAgfTsKKworICAgIFdlYlBhZ2VQcm94eSogaW5z
cGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFT
RShtX2luc3BlY3RvclZpZXcpKTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7CisKKyAgICBX
S1BhZ2VTZXRQYWdlVUlDbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVudC5iYXNl
KTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdl
KSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisgICAgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51
Q2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7CisK
KyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAgaWYgKG1fY2xpZW50ICYmIG1f
Y2xpZW50LT5vcGVuV2luZG93KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrV2lk
Z2V0KiBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoaW5zcGVj
dGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOworICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNj
cmVlblRvcGxldmVsV2luZG93KGluc3BlY3RlZFZpZXdQYXJlbnQpKQorICAgICAgICBpbnNwZWN0
ZWRWaWV3UGFyZW50ID0gbnVsbHB0cjsKKworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cp
OworICAgIG1faW5zcGVjdG9yV2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KGluc3Bl
Y3RlZFZpZXdQYXJlbnQgPyBHVEtfV0lORE9XKGluc3BlY3RlZFZpZXdQYXJlbnQpIDogbnVsbHB0
cik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRv
dyksIG1faW5zcGVjdG9yVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmll
dyk7CisKKyAgICBpZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAg
dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3Bv
aW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJm1faW5zcGVjdG9yV2luZG93KSk7CisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5E
T1cobV9pbnNwZWN0b3JXaW5kb3cpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9y
VmlldykgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9p
bnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJv
eWVkKSwgdGhpcyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2xvc2UoKnRoaXMpOwor
CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJv
eShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VG
b3JDcmFzaCgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1SZXNldFN0YXRlKCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1CcmluZ1RvRnJvbnQoKQoreworICAgIGlmIChtX2lzT3BlbmluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5icmluZ1RvRnJvbnQoKnRoaXMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25z
Y3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQorICAgICAgICBndGtfd2luZG93X3ByZXNlbnQo
R1RLX1dJTkRPVyhwYXJlbnQpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIEd0
a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3
KTsKKyAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVu
dCkpCisgICAgICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBndGtfd2luZG93X2lzX2FjdGl2ZShH
VEtfV0lORE9XKHBhcmVudCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJs
KQoreworICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJsOworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMsIHVybCk7CisKKyAg
ICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1Rp
dGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmlj
YXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9V
c2VySW50ZXJmYWNlL01haW4uaHRtbCIpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTov
Ly9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbCIpOworfQorCitT
dHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQoreworICAgIHJldHVy
biBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2Uv
Iik7Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpCit7CisgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIw
NTUzNj46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVn
IHRhcmdldC4KKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQo
KQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KGluc3BlY3Rl
ZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0
X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgR1JlZlB0
cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7CisgICAgaWYgKG1f
aW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05U
QUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOworICAgICAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBtX2luc3BlY3Rvcldp
bmRvdyA9IDA7CisgICAgfQorCisgICAgLy8gU2V0IGEgZGVmYXVsdCBzaXplcyBiYXNlZCBvbiBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBk
ZWZhdWx0QXR0YWNoZWRTaXplID0gMzAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5p
bXVtQXR0YWNoZWRXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11
bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOworCisgICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0
YWNobWVudFNpZGU6OkJvdHRvbSkgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRI
ZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7CisgICAgICAg
IHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVk
SGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWln
aHQpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lk
dGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKKyAgICAgICAgcGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRo
LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsK
KyAgICB9CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0dGFjaCgqdGhpcykpCisg
ICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdF
QktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgbV9pbnNw
ZWN0b3JWaWV3LCBtX2F0dGFjaG1lbnRTaWRlKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNw
ZWN0b3JWaWV3KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2go
KQoreworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1f
aW5zcGVjdG9yVmlldzsKKyAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVudC0+ZGV0YWNoKCp0
aGlzKSkgeworICAgICAgICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9pc0F0dGFjaGVkIGlz
IHRydWUsIGJ1dCBpdCBjb3VsZCBjYWxsZWQgYmVmb3JlCisgICAgICAgIC8vIHRoZSBpbnNwZWN0
b3IgaXMgb3BlbmVkIGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2VkIHF1aWNrbHkuIFNv
LAorICAgICAgICAvLyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQuCisgICAgICAgIGlm
IChHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtX2luc3BlY3RvclZp
ZXcpKQorICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJl
bnQpLCBtX2luc3BlY3RvclZpZXcpOworICAgIH0KKworICAgIC8vIFJldHVybiBlYXJseSBpZiB3
ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdo
aWxlIGF0dGFjaGVkCisgICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRo
ZSBpbnNwZWN0b3Igd2luZG93LgorICAgIGlmICghbV9pc1Zpc2libGUpIHsKKyAgICAgICAgLy8g
VGhlIGluc3BlY3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2UgZG9uJ3QgbmVlZCB0
byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRoZQorICAgICAgICAvLyBpbnNwZWN0
b3IgaW4gdGhpcyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgorICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisgICAgICAg
IG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKKyAgICB3ZWJraXRXZWJW
aWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3Rl
ZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQorewor
ICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKCp0aGlzLCB3aWR0
aCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VC
X1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdpZHRoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworc3RhdGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdP
YmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJE
YXRhKQoreworICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7CisgICAgaWYg
KCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBu
dWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0
PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19m
aWxlX2dldF9wYXRoKGZpbGUpKTsKKyAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSksIHBhZ2UtPndlYlBhZ2VJRCgpKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Ym9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxv
Zyk7CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1f
aW5zcGVjdG9yVmlldyk7CisgICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2
ZWxXaW5kb3cocGFyZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHdGtGaWxl
Q2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfbmF0aXZl
X25ldygiU2F2ZSBGaWxlIiwKKyAgICAgICAgR1RLX1dJTkRPVyhwYXJlbnQpLCBHVEtfRklMRV9D
SE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7CisKKyAgICBHdGtGaWxlQ2hv
b3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKKyAgICBndGtf
ZmlsZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUp
OworCisgICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVz
ZSBhIGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCisgICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28g
d2UgY2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCisgICAg
Ly8gdW5mb3J0dW5hdGVseS4KKyAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOworICAg
IC8vIFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRf
Y3VycmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhk
aWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQorICAgICAgICByZXR1cm47CisK
KyAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRhdGFTdHJpbmc7Cisg
ICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVu
dCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIH0gZWxzZQorICAgICAg
ICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0g
IWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0
YSgpOworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRh
U3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CisgICAgR1JlZlB0cjxHRmlsZT4g
ZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKKyAg
ICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVu
Z3RoLCBudWxscHRyLCBmYWxzZSwKKyAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJ
TkFUSU9OLCBudWxscHRyLCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9y
UGFnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KGJvb2wgYXZhaWxhYmxlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywgYXZhaWxhYmxlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE0OTBmMGU2ZjMwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0
b3JXaW5kb3cuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRJbnNwZWN0b3JXaW5kb3cuaCIKKworI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisj
aW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0cnVjdCBfV2ViS2l0SW5zcGVjdG9y
V2luZG93IHsKKyAgICBHdGtXaW5kb3cgcGFyZW50OworCisgICAgR3RrV2lkZ2V0KiBoZWFkZXJC
YXI7Cit9OworCitzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzIHsKKyAgICBHdGtX
aW5kb3dDbGFzcyBwYXJlbnQ7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdEluc3BlY3Rvcldp
bmRvdywgd2Via2l0X2luc3BlY3Rvcl93aW5kb3csIEdUS19UWVBFX1dJTkRPVykKKworc3RhdGlj
IHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfY2xhc3NfaW5pdChXZWJLaXRJbnNwZWN0b3JX
aW5kb3dDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93
X2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3cpCit7CisgICAgd2luZG93LT5oZWFk
ZXJCYXIgPSBndGtfaGVhZGVyX2Jhcl9uZXcoKTsKKyAgICBndGtfaGVhZGVyX2Jhcl9zZXRfdGl0
bGUoR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBfKCJXZWIgSW5zcGVjdG9yIikp
OworICAgIGd0a19oZWFkZXJfYmFyX3NldF9zaG93X2Nsb3NlX2J1dHRvbihHVEtfSEVBREVSX0JB
Uih3aW5kb3ctPmhlYWRlckJhciksIFRSVUUpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlYmFy
KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT5oZWFkZXJCYXIpOworICAgIGd0a193aWRnZXRf
c2hvdyh3aW5kb3ctPmhlYWRlckJhcik7Cit9CisKK0d0a1dpZGdldCogd2Via2l0SW5zcGVjdG9y
V2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KQoreworICAgIHJldHVybiBHVEtfV0lER0VUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCAidHlwZSIsIEdUS19XSU5E
T1dfVE9QTEVWRUwsICJ0cmFuc2llbnQtZm9yIiwgcGFyZW50LAorICAgICAgICAiZGVmYXVsdC13
aWR0aCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgsICJkZWZhdWx0LWhl
aWdodCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0LCBudWxscHRyKSk7
Cit9CisKK3ZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVj
dG9yV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIHN1YnRpdGxlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1cod2luZG93KSk7CisKKyAgICBndGtf
aGVhZGVyX2Jhcl9zZXRfc3VidGl0bGUoR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIp
LCBzdWJ0aXRsZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJkYzI4ZDEwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRv
dy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVyAgICAgICAg
ICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
SU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JX
aW5kb3cpKQorI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1Jf
V0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9S
X1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNf
SU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lO
U1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2lu
ZG93Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IFdlYktp
dEluc3BlY3RvcldpbmRvdzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dD
bGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzczsKKworR1R5cGUgd2Via2l0X2luc3BlY3Rv
cl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7CisKK0d0a1dpZGdldCogd2Via2l0SW5zcGVjdG9yV2lu
ZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKK3ZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0
U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiwgY29uc3QgY2hhciogc3VidGl0bGUpOwor
CitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE5ODM5MWM0MjBjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisKKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK3N0cnVjdCBIaWdobGlnaHQ7Cit9CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JIaWdobGln
aHRWaWV3IDogVUlWaWV3IHsKKyAgICBOU011dGFibGVBcnJheSAqX2xheWVyczsgLy8gQ0FTaGFw
ZUxheWVycy4KK30KKy0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhp
Z2hsaWdodDsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNjVmMGMwM2UzMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJ
bnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCIK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFk
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKworQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9ySGln
aGxpZ2h0VmlldworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1l
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgX2xheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc2Vs
ZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICBbX2xheWVycyByZWxlYXNlXTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKy0gKHZvaWQpX3JlbW92ZUFsbExheWVycworeworICAgIGZvciAoQ0FT
aGFwZUxheWVyICpsYXllciBpbiBfbGF5ZXJzKQorICAgICAgICBbbGF5ZXIgcmVtb3ZlRnJvbVN1
cGVybGF5ZXJdOworICAgIFtfbGF5ZXJzIHJlbW92ZUFsbE9iamVjdHNdOworfQorCistICh2b2lk
KV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIpbnVtTGF5ZXJzCit7CisgICAgaWYgKFtfbGF5ZXJz
IGNvdW50XSA9PSBudW1MYXllcnMpCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIF9yZW1v
dmVBbGxMYXllcnNdOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJz
OyArK2kpIHsKKyAgICAgICAgQ0FTaGFwZUxheWVyICpsYXllciA9IFtbQ0FTaGFwZUxheWVyIGFs
bG9jXSBpbml0XTsKKyAgICAgICAgW19sYXllcnMgYWRkT2JqZWN0OmxheWVyXTsKKyAgICAgICAg
W3NlbGYubGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOworICAgICAgICBbbGF5ZXIgcmVsZWFzZV07
CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBv
aW50cyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgcDIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGQxLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBkMiwgV2ViQ29yZTo6RmxvYXRQb2ludCYgaW50ZXJzZWN0aW9uKSAKK3sKKyAg
ICAvLyBEbyB0aGUgbGluZXMgaW50ZXJzZWN0PworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVt
cG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgaWYgKCFmaW5kSW50ZXJzZWN0aW9uKHAxLCBw
MiwgZDEsIGQyLCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIElzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50
cyBvbiB0aGUgbGluZT8KKyAgICBpZiAocDEueCgpID49IHAyLngoKSkgeworICAgICAgICBpZiAo
dGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDEueCgpIHx8IHRlbXBvcmFyeUludGVy
c2VjdGlvblBvaW50LngoKSA8IHAyLngoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4g
cDIueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAxLngoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLnkoKSA+PSBwMi55KCkpIHsK
KyAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAxLnkoKSB8fCB0
ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMi55KCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlv
blBvaW50LnkoKSA+IHAyLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBw
MS55KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50ZXJzZWN0
aW9uID0gdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIFRoaXMgcXVhZCBpbnRlcnNlY3Rpb24gd29ya3MgYmVjYXVzZSB0aGUgdHdvIHF1YWRzIGFy
ZSBrbm93biB0byBiZSBhdCB0aGUgc2FtZQorLy8gcm90YXRpb24gYW5kIGNsb2Nrd2lzZS1uZXNz
Lgorc3RhdGljIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkSW50ZXJzZWN0aW9uKFdlYkNvcmU6OkZs
b2F0UXVhZCBib3VuZHMsIFdlYkNvcmU6OkZsb2F0UXVhZCB0b0NsYW1wKQoreworICAgIC8vIFJl
c3VsdGluZyBwb2ludHMuCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwMSwgcDIsIHAzLCBwNDsK
KyAgICBib29sIGNvbnRhaW5zUG9pbnQxID0gZmFsc2U7CisgICAgYm9vbCBjb250YWluc1BvaW50
MiA9IGZhbHNlOworICAgIGJvb2wgY29udGFpbnNQb2ludDMgPSBmYWxzZTsKKyAgICBib29sIGNv
bnRhaW5zUG9pbnQ0ID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDEgPSBmYWxz
ZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50MiA9IGZhbHNlOworICAgIGJvb2wgaW50ZXJz
ZWN0Rm9yUG9pbnQzID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDQgPSBmYWxz
ZTsKKworICAgIC8vIFRvcCAvIGJvdHRvbSB2ZXJ0aWNhbCBjbGFtcGluZy4KKyAgICBpZiAoYm91
bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMSgpKSkgeworICAgICAgICBjb250YWluc1BvaW50
MSA9IHRydWU7CisgICAgICAgIHAxID0gdG9DbGFtcC5wMSgpOworICAgIH0gZWxzZSBpZiAoIShp
bnRlcnNlY3RGb3JQb2ludDEgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhi
b3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwMSkp
KQorICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsKKworICAgIGlmIChib3VuZHMuY29udGFpbnNQ
b2ludCh0b0NsYW1wLnAyKCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKKyAg
ICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7CisgICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBv
aW50MiA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBi
b3VuZHMucDIoKSwgdG9DbGFtcC5wMigpLCB0b0NsYW1wLnAzKCksIHAyKSkpCisgICAgICAgIHAy
ID0gdG9DbGFtcC5wMigpOworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAu
cDMoKSkpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDMgPSB0cnVlOworICAgICAgICBwMyA9IHRv
Q2xhbXAucDMoKTsKKyAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmluZElu
dGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0
b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwgcDMpKSkKKyAgICAgICAgcDMgPSB0b0NsYW1wLnAz
KCk7CisKKyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wNCgpKSkgeworICAg
ICAgICBjb250YWluc1BvaW50NCA9IHRydWU7CisgICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOwor
ICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDQgPSBmaW5kSW50ZXJzZWN0aW9uT25M
aW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDEoKSwg
dG9DbGFtcC5wNCgpLCBwNCkpKQorICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsKKworICAgIC8v
IElmIG9ubHkgb25lIG9mIHRoZSBwb2ludHMgaW50ZXJzZWN0ZWQgb24gZWl0aGVyIHRoZSB0b3Ag
b3IgYm90dG9tIGxpbmUgdGhlbiB3ZQorICAgIC8vIGNhbiBjbGFtcCB0aGUgb3RoZXIgcG9pbnQg
b24gdGhhdCBsaW5lIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGJvdW5kcy4KKyAgICBpZiAoIWNvbnRh
aW5zUG9pbnQxICYmIGludGVyc2VjdEZvclBvaW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKSB7
CisgICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1ZTsKKyAgICAgICAgcDEgPSBib3VuZHMucDEo
KTsKKyAgICB9IGVsc2UgaWYgKCFjb250YWluc1BvaW50MiAmJiBpbnRlcnNlY3RGb3JQb2ludDEg
JiYgIWludGVyc2VjdEZvclBvaW50MikgeworICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7
CisgICAgICAgIHAyID0gYm91bmRzLnAyKCk7CisgICAgfQorICAgIGlmICghY29udGFpbnNQb2lu
dDQgJiYgaW50ZXJzZWN0Rm9yUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQb2ludDQpIHsKKyAgICAg
ICAgY29udGFpbnNQb2ludDQgPSB0cnVlOworICAgICAgICBwNCA9IGJvdW5kcy5wNCgpOworICAg
IH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQzICYmIGludGVyc2VjdEZvclBvaW50NCAmJiAhaW50
ZXJzZWN0Rm9yUG9pbnQzKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKKyAgICAg
ICAgcDMgPSBib3VuZHMucDMoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2Ugb25seSBuZWVkIHRv
IHBlcmZvcm0gaG9yaXpvbnRhbCBjbGFtcGluZyBmb3IgdW5hZGp1c3RlZCBwb2ludHMuCisgICAg
aWYgKCFjb250YWluc1BvaW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQyKQorICAgICAgICBmaW5k
SW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCks
IHAxLCBwMiwgcDIpOworICAgIGlmICghY29udGFpbnNQb2ludDMgJiYgIWludGVyc2VjdEZvclBv
aW50MykKKyAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRz
LnAyKCksIGJvdW5kcy5wMygpLCBwNCwgcDMsIHAzKTsKKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQx
ICYmICFpbnRlcnNlY3RGb3JQb2ludDEpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVC
ZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwgcDEsIHAyLCBwMSk7CisgICAg
aWYgKCFjb250YWluc1BvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KQorICAgICAgICBmaW5k
SW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCks
IHA0LCBwMywgcDQpOworCisgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UXVhZChwMSwgcDIsIHAz
LCBwNCk7Cit9CisKK3N0YXRpYyB2b2lkIGxheWVyUGF0aFdpdGhIb2xlKENBU2hhcGVMYXllciAq
bGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFF1YWQmIGhvbGVRdWFkKQoreworICAgIC8vIE5vdGhpbmcgdG8gc2hvdy4KKyAgICBp
ZiAob3V0ZXJRdWFkID09IGhvbGVRdWFkIHx8IGhvbGVRdWFkLmNvbnRhaW5zUXVhZChvdXRlclF1
YWQpKSB7CisgICAgICAgIGxheWVyLnBhdGggPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gSWYgdGhlcmUgaXMgYSBuZWdhdGl2ZSBtYXJnaW4gLyBwYWRkaW5nIHRoZW4g
dGhlIG91dGVyIGJveCBtaWdodCBub3QKKyAgICAvLyBmdWxseSBjb250YWluIHRoZSBob2xlIGJv
eC4gSW4gc3VjaCBjYXNlcyB3ZSByZWNhbGN1bGF0ZSB0aGUgaG9sZSB0bworICAgIC8vIGJlIHRo
ZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBxdWFkcy4KKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQg
aW5uZXJIb2xlOworICAgIGlmIChvdXRlclF1YWQuY29udGFpbnNRdWFkKGhvbGVRdWFkKSkKKyAg
ICAgICAgaW5uZXJIb2xlID0gaG9sZVF1YWQ7CisgICAgZWxzZQorICAgICAgICBpbm5lckhvbGUg
PSBxdWFkSW50ZXJzZWN0aW9uKG91dGVyUXVhZCwgaG9sZVF1YWQpOworCisgICAgLy8gQ2xvY2t3
aXNlIGluc2lkZSByZWN0IChob2xlKSwgQ291bnRlci1DbG9ja3dpc2Ugb3V0c2lkZSByZWN0IChm
aWxsKS4KKyAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7
CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAxKCkueCgpLCBpbm5l
ckhvbGUucDEoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVy
SG9sZS5wMigpLngoKSwgaW5uZXJIb2xlLnAyKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Q
b2ludChwYXRoLCAwLCBpbm5lckhvbGUucDMoKS54KCksIGlubmVySG9sZS5wMygpLnkoKSk7Cisg
ICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnA0KCkueCgpLCBpbm5l
ckhvbGUucDQoKS55KCkpOworICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVh
ZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2lu
dChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7CisgICAg
Q0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1
YWQucDMoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVh
ZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAgICBsYXllci5wYXRoID0gcGF0aDsK
KyAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBsYXllclBhdGgoQ0FT
aGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQpCit7
CisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAg
IENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFk
LnAxKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQu
cDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
cGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOworICAgIENH
UGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFk
LnAyKCkueSgpKTsKKyAgICBsYXllci5wYXRoID0gcGF0aDsKKyAgICBDR1BhdGhSZWxlYXNlKHBh
dGgpOworfQorCistICh2b2lkKV9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3Jl
OjpIaWdobGlnaHQmKWhpZ2hsaWdodCBvZmZzZXQ6KHVuc2lnbmVkKW9mZnNldAoreworICAgIEFT
U0VSVChbX2xheWVycyBjb3VudF0gPj0gb2Zmc2V0ICsgNCk7CisgICAgQVNTRVJUKGhpZ2hsaWdo
dC5xdWFkcy5zaXplKCkgPj0gb2Zmc2V0ICsgNCk7CisgICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA8
IG9mZnNldCArIDQgfHwgaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSA8IG9mZnNldCArIDQpCisgICAg
ICAgIHJldHVybjsKKworICAgIENBU2hhcGVMYXllciAqbWFyZ2luTGF5ZXIgPSBbX2xheWVycyBv
YmplY3RBdEluZGV4Om9mZnNldF07CisgICAgQ0FTaGFwZUxheWVyICpib3JkZXJMYXllciA9IFtf
bGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgMV07CisgICAgQ0FTaGFwZUxheWVyICpwYWRk
aW5nTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDJdOworICAgIENBU2hh
cGVMYXllciAqY29udGVudExheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAz
XTsKKworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBtYXJnaW5RdWFkID0gaGlnaGxpZ2h0LnF1YWRz
W29mZnNldF07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIGJvcmRlclF1YWQgPSBoaWdobGlnaHQu
cXVhZHNbb2Zmc2V0ICsgMV07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIHBhZGRpbmdRdWFkID0g
aGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDJdOworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBjb250
ZW50UXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAzXTsKKworICAgIG1hcmdpbkxheWVy
LmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0Lm1hcmdpbkNvbG9yKTsKKyAgICBi
b3JkZXJMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5ib3JkZXJDb2xv
cik7CisgICAgcGFkZGluZ0xheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0
LnBhZGRpbmdDb2xvcik7CisgICAgY29udGVudExheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29s
b3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7CisKKyAgICBsYXllclBhdGhXaXRoSG9sZShtYXJn
aW5MYXllciwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCk7CisgICAgbGF5ZXJQYXRoV2l0aEhvbGUo
Ym9yZGVyTGF5ZXIsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkKTsKKyAgICBsYXllclBhdGhXaXRo
SG9sZShwYWRkaW5nTGF5ZXIsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCk7CisgICAgbGF5ZXJQ
YXRoKGNvbnRlbnRMYXllciwgY29udGVudFF1YWQpOworfQorCistICh2b2lkKV9sYXlvdXRGb3JO
b2RlTGlzdEhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKK3sK
KyAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5zaXplKCkpIHsKKyAgICAgICAgW3NlbGYgX3JlbW92
ZUFsbExheWVyc107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBub2Rl
Q291bnQgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgpIC8gNDsKKyAgICBbc2VsZiBfY3JlYXRlTGF5
ZXJzOm5vZGVDb3VudCAqIDRdOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVD
b3VudDsgKytpKQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDpoaWdobGln
aHQgb2Zmc2V0OmkgKiA0XTsKK30KKworLSAodm9pZClfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6
KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Cit7CisgICAgTlNVSW50ZWdlciBu
dW1MYXllcnMgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgpOworICAgIGlmICghbnVtTGF5ZXJzKSB7
CisgICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgW3NlbGYgX2NyZWF0ZUxheWVyczpudW1MYXllcnNdOworCisgICAgQ0dDb2xvclJl
ZiBjb250ZW50Q29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOwor
ICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7CisgICAgICAg
IENBU2hhcGVMYXllciAqbGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4OmldOworICAgICAg
ICBsYXllci5maWxsQ29sb3IgPSBjb250ZW50Q29sb3I7CisgICAgICAgIGxheWVyUGF0aChsYXll
ciwgaGlnaGxpZ2h0LnF1YWRzW2ldKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdXBkYXRlOihjb25z
dCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAoreworICAgIGlmIChoaWdobGlnaHQudHlw
ZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpOb2RlIHx8IGhpZ2hsaWdodC50eXBlID09IFdl
YkNvcmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGVMaXN0KQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9y
Tm9kZUxpc3RIaWdobGlnaHQ6aGlnaGxpZ2h0XTsKKyAgICBlbHNlIGlmIChoaWdobGlnaHQudHlw
ZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpSZWN0cykKKyAgICAgICAgW3NlbGYgX2xheW91
dEZvclJlY3RzSGlnaGxpZ2h0OmhpZ2hsaWdodF07Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9y
Tm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmYmE2OTVlNmJhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8VUlLaXQvVUlHZXN0
dXJlUmVjb2duaXplci5oPgorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1
cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2duaXplcgorLSAoQ0dQb2ludClsb2NhdGlvbklu
VmlldzooVUlWaWV3ICopdmlldzsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1
cmVSZWNvZ25pemVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9X
S0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDY3ZmU3YmNjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLm1tCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0IDxVSUtpdC9V
SUdlc3R1cmVSZWNvZ25pemVyU3ViY2xhc3MuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KworQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
IHsKKyAgICBSZXRhaW5QdHI8VUlUb3VjaD4gX3RvdWNoOworfQorCistIChDR1BvaW50KWxvY2F0
aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Cit7CisgICAgcmV0dXJuIFtfdG91Y2ggbG9jYXRpb25J
blZpZXc6dmlld107Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NUb3VjaGVzOihOU1NldCAqKXRvdWNo
ZXMgc3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSluZXdTdGF0ZQoreworICAgIEFTU0VS
VChfdG91Y2gpOworICAgIGlmIChbdG91Y2hlcyBjb250YWluc09iamVjdDpfdG91Y2guZ2V0KCld
KQorICAgICAgICBzZWxmLnN0YXRlID0gbmV3U3RhdGU7Cit9CisKKy0gKHZvaWQpdG91Y2hlc0Jl
Z2FuOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBp
ZiAoc2VsZi5zdGF0ZSAhPSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFfdG91Y2gpOworICAgIF90b3VjaCA9IFt0b3VjaGVz
IGFueU9iamVjdF07CisKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbl07Cit9CisKKy0gKHZvaWQpdG91Y2hlc01vdmVk
OihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBbc2Vs
ZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVD
aGFuZ2VkXTsKK30KKworLSAodm9pZCl0b3VjaGVzRW5kZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRo
RXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3Vj
aGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkXTsKK30KKworLSAodm9pZCl0
b3VjaGVzQ2FuY2VsbGVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZl
bnQKK3sKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVS
ZWNvZ25pemVyU3RhdGVDYW5jZWxsZWRdOworfQorCistICh2b2lkKXJlc2V0Cit7CisgICAgX3Rv
dWNoID0gbmlsOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRhYmRl
YjVmNmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpAQCAtMCwwICsxLDI2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKKworI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgor
I2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV0tGcmFt
ZUluZm8uaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQg
IldLTmF2aWdhdGlvbkFjdGlvbi5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIK
KyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94
eS5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIK
KyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgorI2ltcG9y
dCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKworQGlu
dGVyZmFjZSBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8
TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7Cisg
ICAgV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OworfQor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyCisKKy0gKE5TUmVj
dCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAq
KXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5
KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVj
dCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwor
ICAgIHJldHVybiByZWN0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9y
UHJveHkKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JE
aWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9s
bGVyCit7CisgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOworfQorCistIChC
T09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVy
biBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0tXZWJWaWV3ICpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6d2ViVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVj
dG9yVmlldy5nZXQoKS53ZWJWaWV3OworfQorCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAg
bV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0Fk
YXB0ZXIgYWxsb2NdIGluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOworCisg
ICAgbV9pbnNwZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTpudWxscHRyXSk7CisgICAgW21faW5zcGVjdG9y
Vmlldy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIG1fd2lu
ZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TWmVyb1JlY3Qs
IFdlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlKTsKKyAgICBb
bV93aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07CisgICAgW21fd2luZG93
IHNldEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JXaW5kb3dGcmFtZSJd
OworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgpLmNvbnRlbnRWaWV3
OworICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRzXTsKKyAgICBbY29u
dGVudFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOworCisgICAgcmV0dXJuIHdlYlZpZXcoKS0+
X3BhZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX3dpbmRvdykgeworICAg
ICAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21fd2luZG93IGNsb3Nl
XTsKKyAgICAgICAgbV93aW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgaWYgKG1faW5zcGVjdG9y
VmlldykgeworICAgICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm5pbF07
CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAobV9vYmpD
QWRhcHRlcikKKyAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBbTlNXaW5kb3cg
cmVtb3ZlRnJhbWVVc2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3NhdmVOYW1lXV07Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sK
KyAgICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKKyAgICBbbV93aW5kb3cg
bWFrZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9n
KQoreworICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFjLgorCisg
ICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxh
dGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdl
dCgpOworICAgIGlmICghcGxhdGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0
IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAg
ICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRm
b3JtVVJMKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJM
Q29weSA9IHN1Z2dlc3RlZFVSTDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50Owor
CisgICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNT
RVJUKGFjdHVhbFVSTCk7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQo
c3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2Rl
ZCkgeworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNv
bnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkg
bGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJM
OmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
W2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRT
YXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdl
SUQoKSk7CisgICAgfTsKKworICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNh
dmVUb1VSTChwbGF0Zm9ybVVSTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1Nh
dmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1l
RmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisgICAg
Ly8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRv
IGEgcGF0aCBhbmQKKyAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cu
IE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9y
IHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBs
YXRmb3JtVVJMLmlzRmlsZVVSTCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRm
b3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBs
ZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQg
PT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBB
U1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBh
bmVsLlVSTCk7CisgICAgfTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1f
d2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAgICAg
ICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRs
ZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQpCit7CisgICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlN
YWMuCisKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIFJl
dGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQo
c3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMg
YWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisgICAgaWYgKCFhY3R1
YWxVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05T
RmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJv
cjpOVUxMXTsKKyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAgW2hhbmRsZSB3cml0
ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsK
KyAgICBbaGFuZGxlIGNsb3NlRmlsZV07CisKKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBh
Z2UgPSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOworICAgIGluc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxV
UkwgYWJzb2x1dGVTdHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJlY3QgPSByZWN0OworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAg
d2ViVmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQor
eworICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOnVybF1dOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5m
bykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOworCisgICAgUmV0
YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tT
RkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKworICAgIEFTU0VSVChtX3dpbmRvdyk7
CisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5l
bCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRp
ZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUlu
Zm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKKyNlbHNlCisgICAgW2NlcnRpZmljYXRlUGFuZWwg
YmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRF
bmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5
ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKKyNl
bmRpZgorCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwg
aGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBl
eGlzdCBiZWZvcmVoYW5kLgorICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcg
PSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOworICAgIFtjZXJ0aWZpY2F0ZVZp
ZXcgc2V0RGlzcGxheVRydXN0OllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJs
ZVRydXN0Ok5PXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107
CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9s
bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA4YmQwOGZmOWQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisjaW1w
b3J0IDx3dGYvTmFrZWRQdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKworT0JKQ19DTEFTUyBX
S1dlYlZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQor
CitAcHJvdG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlOworCitOU19BU1NV
TUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
OiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAq
d2ViVmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBh
Z2U7CisKKysgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmlldzooTlNWaWV3ICopdmlldzsKKwor
QGVuZAorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIDxOU09i
amVjdD4KK0BvcHRpb25hbAorLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
ckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXI7CistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRl
c3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsK
Ky0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAq
KW5ld1dpbmRvdzsKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5k
b3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsK
K0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmQ5MjYzZTBmZDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVy
Lm1tCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCisKKyNpZiBQTEFURk9STShNQUMp
CisKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKKyNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIK
KyNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmlldy5o
IgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW1wb3J0ICJXS05hdmlnYXRpb25E
ZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJX
S1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tQcm9jZXNzUG9vbEludGVybmFsLmgi
CisjaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdDb25m
aWd1cmF0aW9uUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9y
dCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclV0aWxpdGllcy5o
IgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4K
KworQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICgpIDxXS1VJRGVsZWdhdGUs
IFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPgorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB7CisgICAgTmFr
ZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9pbnNwZWN0ZWRQYWdlOworICAgIFJldGFpblB0
cjxXS0luc3BlY3RvcldLV2ViVmlldz4gX3dlYlZpZXc7CisgICAgV2Vha09iakNQdHI8aWQgPFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdl
UHJveHk+KWluc3BlY3RlZFBhZ2UKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIFRoZSAobG9jYWwpIGluc3BlY3RlZCBwYWdl
IGlzIG5pbCBpZiB0aGUgY29udHJvbGxlciBpcyBob3N0aW5nIGEgUmVtb3RlIFdlYiBJbnNwZWN0
b3Igdmlldy4KKyAgICBfaW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKF93ZWJWaWV3KSB7Cisg
ICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5pbF07CisgICAgICAgIFtfd2ViVmlldyBz
ZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW193ZWJWaWV3IHNldEluc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlOm5pbF07CisgICAgICAgIF93ZWJWaWV3ID0gbmlsOworICAgIH0K
KworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlLmdldEF1dG9y
ZWxlYXNlZCgpOworfQorCistIChXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgLy8gQ29uc3Ry
dWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIGRlbGVnYXRlIGJlZm9yZSB0aGUg
V2ViVmlldyBpcyBjcmVhdGVkLgorICAgIGlmICghX3dlYlZpZXcpIHsKKyAgICAgICAgTlNSZWN0
IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0aWFs
V2luZG93SGVpZ2h0KTsKKyAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1lIGNvbmZpZ3VyYXRpb246
W3NlbGYgY29uZmlndXJhdGlvbl1dKTsKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6
c2VsZl07CisgICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6c2VsZl07Cisg
ICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTpzZWxmXTsKKyAg
ICAgICAgW193ZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6Tk9d
OworICAgICAgICBbX3dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6WUVTXTsKKyAgICAg
ICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNW
aWV3SGVpZ2h0U2l6YWJsZV07CisgICAgfQorCisgICAgcmV0dXJuIF93ZWJWaWV3LmdldCgpOwor
fQorCistICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRl
bGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChX
S1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIGF1dG8gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisKKyAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0KCku
cHJlZmVyZW5jZXM7CisgICAgcHJlZmVyZW5jZXMuX2FsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJM
cyA9IFlFUzsKKyAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHM6WUVTXTsKKyAgICBwcmVmZXJlbmNlcy5fc3RvcmFnZUJsb2NraW5nUG9saWN5ID0g
X1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QWxsb3dBbGw7CisgICAgcHJlZmVyZW5jZXMuX2phdmFT
Y3JpcHRSdW50aW1lRmxhZ3MgPSAwOworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIEFsbG93IGRl
dmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0
aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJlbmNlcy5fZGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZCA9IFlFUzsKKyAgICBwcmVmZXJlbmNlcy5fbG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVt
Q29uc29sZUVuYWJsZWQgPSBZRVM7CisjZW5kaWYKKworICAgIHByZWZlcmVuY2VzLl9kaWFnbm9z
dGljTG9nZ2luZ0VuYWJsZWQgPSBZRVM7CisKKyAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9ySXNVbmRlclRlc3Q6KV0pIHsKKyAgICAgICAgaWYgKFtfZGVsZWdhdGUgaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpzZWxmXSkgeworICAgICAgICAg
ICAgcHJlZmVyZW5jZXMuX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID0gTk87
CisgICAgICAgICAgICBwcmVmZXJlbmNlcy5fcGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBw
cmVzc2lvbkVuYWJsZWQgPSBOTzsKKyAgICAgICAgfQorICAgIH0KKworICAgIFtjb25maWd1cmF0
aW9uIHNldFByb2Nlc3NQb29sOndyYXBwZXIoV2ViS2l0OjppbnNwZWN0b3JQcm9jZXNzUG9vbChX
ZWJLaXQ6Omluc3BlY3RvckxldmVsRm9yUGFnZShfaW5zcGVjdGVkUGFnZSkpKV07CisgICAgW2Nv
bmZpZ3VyYXRpb24gX3NldEdyb3VwSWRlbnRpZmllcjpXZWJLaXQ6Omluc3BlY3RvclBhZ2VHcm91
cElkZW50aWZpZXJGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKV07CisKKyAgICByZXR1cm4gY29uZmln
dXJhdGlvbi5hdXRvcmVsZWFzZSgpOworfQorCisrIChCT09MKXZpZXdJc0luc3BlY3RvcldlYlZp
ZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV0tJ
bnNwZWN0b3JXS1dlYlZpZXcgY2xhc3NdXTsKK30KKworLy8gTUFSSzogV0tVSURlbGVnYXRlIG1l
dGhvZHMKKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZXRXaW5kb3dG
cmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQ0dSZWN0KSljb21wbGV0aW9uSGFu
ZGxlcgoreworICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQorICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDR1JlY3RaZXJvKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKE5TUmVjdFRvQ0dSZWN0KFt3ZWJWaWV3IGZyYW1lXSkpOworfQorCistICh2b2lkKV93ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOihDR1JlY3QpZnJhbWUKK3sK
KyAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAg
W193ZWJWaWV3LmdldCgpLndpbmRvdyBzZXRGcmFtZTpOU1JlY3RGcm9tQ0dSZWN0KGZyYW1lKSBk
aXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBy
dW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczooV0tPcGVuUGFuZWxQYXJhbWV0ZXJzICopcGFyYW1l
dGVycyBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShOU0FycmF5PE5TVVJMICo+ICpVUkxzKSljb21wbGV0aW9uSGFuZGxlcgor
eworICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFuZWwgb3BlblBhbmVsXTsK
KyAgICBvcGVuUGFuZWwuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBwYXJhbWV0ZXJzLmFsbG93
c011bHRpcGxlU2VsZWN0aW9uOworCisgICAgYXV0byByZXBvcnRTZWxlY3RlZEZpbGVzID0gXihO
U0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNl
T0spCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihvcGVuUGFuZWwuVVJMcyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CisgICAgfTsKKwor
ICAgIGlmIChfd2ViVmlldy5nZXQoKS53aW5kb3cpCisgICAgICAgIFtvcGVuUGFuZWwgYmVnaW5T
aGVldE1vZGFsRm9yV2luZG93Ol93ZWJWaWV3LmdldCgpLndpbmRvdyBjb21wbGV0aW9uSGFuZGxl
cjpyZXBvcnRTZWxlY3RlZEZpbGVzXTsKKyAgICBlbHNlCisgICAgICAgIHJlcG9ydFNlbGVjdGVk
RmlsZXMoW29wZW5QYW5lbCBydW5Nb2RhbF0pOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjooV0tT
ZWN1cml0eU9yaWdpbiAqKXNlY3VyaXR5T3JpZ2luIGN1cnJlbnRRdW90YToodW5zaWduZWQgbG9u
ZyBsb25nKWN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9u
ZyljdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6KHVuc2lnbmVkIGxvbmcg
bG9uZyljdXJyZW50VXNhZ2UgZXhwZWN0ZWRVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWV4cGVj
dGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKSh1bnNpZ25lZCBsb25nIGxvbmcgbmV3
UXVvdGEpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIGRlY2lzaW9uSGFuZGxlcihzdGQ6Om1heDx1
bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2FnZSAqIDEuMjUpKTsK
K30KKworLSAoTlNNZW51ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY29udGV4dE1l
bnU6KE5TTWVudSAqKW1lbnUgZm9yRWxlbWVudDooX1dLQ29udGV4dE1lbnVFbGVtZW50SW5mbyAq
KWVsZW1lbnQKK3sKKyAgICBmb3IgKE5TSW50ZWdlciBpID0gbWVudS5udW1iZXJPZkl0ZW1zIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqaXRlbSA9IFttZW51IGl0ZW1B
dEluZGV4OmldOworICAgICAgICBzd2l0Y2ggKGl0ZW0udGFnKSB7CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgICAgIFttZW51
IHJlbW92ZUl0ZW1BdEluZGV4OmldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbWVudTsKK30KKworLy8gTUFSSzogV0tOYXZpZ2F0aW9uRGVsZWdh
dGUgbWV0aG9kcworCistICh2b2lkKXdlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0
ZTooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJ
bnNwZWN0b3JEaWRDcmFzaDopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckluc3BlY3RvckRpZENyYXNoOnNlbGZdOworfQorCistICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZp
Z2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4p
KFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCit7CisgICAgLy8gQWxs
b3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIGlmICghbmF2aWdh
dGlvbkFjdGlvbi50YXJnZXRGcmFtZS5pc01haW5GcmFtZSkgeworICAgICAgICBkZWNpc2lvbkhh
bmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4K
KyAgICBpZiAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9y
UGFnZShuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMKSkgeworICAgICAgICBkZWNpc2lvbkhh
bmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UuCisgICAgZGVjaXNpb25IYW5k
bGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAgCisgICAgLy8gQW5kIGlu
c3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgaWYgKF9pbnNwZWN0ZWRQ
YWdlKQorICAgICAgICBfaW5zcGVjdGVkUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlvbkFjdGlv
bi5yZXF1ZXN0KTsKK30KKworLy8gTUFSSzogV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBt
ZXRob2RzCisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldL
V2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6UmVsb2FkT3B0aW9uPiByZWxvYWRPcHRp
b25zOworICAgIGlmIChXZWJLaXQ6OmxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6OlNES1ZlcnNpb246
OkZpcnN0V2l0aEV4cGlyZWRPbmx5UmVsb2FkQmVoYXZpb3IpKQorICAgICAgICByZWxvYWRPcHRp
b25zLmFkZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KTsKKworICAgIF9pbnNw
ZWN0ZWRQYWdlLT5yZWxvYWQocmVsb2FkT3B0aW9ucyk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9y
V0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3
Cit7CisgICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX2lu
c3BlY3RlZFBhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwor
fQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3
ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Cit7CisgICAgaWYg
KCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihp
bnNwZWN0b3JWaWV3Q29udHJvbGxlcjp3aWxsTW92ZVRvV2luZG93OildKQorICAgICAgICBbX2Rl
bGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyOnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdX
aW5kb3ddOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzoo
V0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEhX2RlbGVnYXRlICYm
IFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckRpZE1vdmVUb1dpbmRvdzopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JW
aWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzpzZWxmXTsKK30KKworQGVuZAorCisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNTdlNzdjZmU3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcu
aApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKworQHByb3RvY29sIFdL
SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JXS1dl
YlZpZXcgOiBXS1dlYlZpZXcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNw
ZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4gaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7CitAZW5k
CisKK0Bwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlCitAcmVxdWlyZWQKKy0g
KHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdl
YlZpZXc7CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdLSW5z
cGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihX
S0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
KiluZXdXaW5kb3c7CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzoo
V0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OworQGVuZAorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XS0luc3BlY3RvcldLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjRiZmVmNGEwMWJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpAQCAt
MCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
S0luc3BlY3RvcldLV2ViVmlldy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJX
S0luc3BlY3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCitA
aW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JXS1dlYlZpZXcgeworICAgIFdlYWtPYmpDUHRyPGlk
IDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPj4gX2luc3BlY3RvcldLV2ViVmlld0RlbGVn
YXRlOworfQorCistIChOU1JlY3QpX29wYXF1ZVJlY3RGb3JXaW5kb3dNb3ZlV2hlbkluVGl0bGVi
YXIKK3sKKyAgICAvLyBUaGlzIGNvbnZpbmNlcyBBcHBLaXQgdG8gYWxsb3cgd2luZG93IG1vdmVz
IHdoZW4gY2xpY2tpbmcgYW55d2hlcmUgaW4gdGhlIHRpdGxlYmFyICh0b3AgMjJwdCkKKyAgICAv
LyB3aGVuIHRoaXMgdmlldydzIGNvbnRlbnRzIGNvdmVyIHRoZSBlbnRpcmUgd2luZG93J3MgY29u
dGVudHMsIGluY2x1ZGluZyB0aGUgdGl0bGViYXIuCisgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Cit9
CisKKy0gKE5TSW50ZWdlcil0YWcKK3sKKyAgICByZXR1cm4gV0tJbnNwZWN0b3JWaWV3VGFnOwor
fQorCistIChpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4paW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlLmdl
dEF1dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKXNldEluc3BlY3RvcldLV2ViVmlld0RlbGVn
YXRlOihpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBf
aW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAoSUJBY3Rpb24p
cmVsb2FkOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZSBpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6c2VsZl07Cit9CisKKy0gKElCQWN0aW9uKXJlbG9h
ZEZyb21PcmlnaW46KGlkKXNlbmRlcgoreworICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0Rl
bGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46c2VsZl07Cit9CisKKy0g
KHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Cit7CisgICAg
W3N1cGVyIHZpZXdXaWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107CisgICAgW3NlbGYuaW5zcGVj
dG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3OnNlbGYgd2lsbE1vdmVUb1dp
bmRvdzpuZXdXaW5kb3ddOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKK3sKKyAg
ICBbc3VwZXIgdmlld0RpZE1vdmVUb1dpbmRvd107CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OnNlbGZdOworfQor
CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiZTcyOGQ0MzVjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1h
Yy5tbQpAQCAtMCwwICsxLDgwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oTUFDKQor
CisjaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgor
I2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBv
cnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNwZWN0b3JXaW5kb3cu
aCIKKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgorI2lt
cG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgor
I2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3N0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHdp
bmRvd1N0eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNXaW5kb3dTdHlsZU1h
c2tDbG9zYWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUgfCBOU1dpbmRvd1N0
eWxlTWFza1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVDb250ZW50VmlldzsK
KworLy8gVGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZvcmUgY2xvc2luZyBp
dCBhbmQgaXRzIHByb2Nlc3MuCisvLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGltcHJvdmVzIHN0YXJ0
IHVwIHRpbWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0aGUgSW5zcGVjdG9y
Lgorc3RhdGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7IDFfbWluIH07CisK
K3N0YXRpYyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCA9ICZrV2lu
ZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dDsKKworQGludGVyZmFjZSBXS1dlYkluc3Bl
Y3RvclByb3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVj
dG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OworLSAo
dm9pZClpbnZhbGlkYXRlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYkluc3BlY3Rv
clByb3h5T2JqQ0FkYXB0ZXIgeworICAgIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqIF9pbnNw
ZWN0b3JQcm94eTsKK30KKworLSAoV0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9yUmVmCit7CisgICAg
cmV0dXJuIHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Cit9CisKKy0gKF9XS0luc3BlY3RvciAqKWlu
c3BlY3RvcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIHJldHVybiB3cmFw
cGVyKCpfaW5zcGVjdG9yUHJveHkpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5
KilpbnNwZWN0b3JQcm94eQoreworICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yUHJveHksIGluc3Bl
Y3RvclByb3h5KTsKKworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgLy8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJlZmVyZW5jZSBjeWNs
ZS4KKyAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfaW5zcGVjdG9yUHJveHkgPSBu
dWxscHRyOworfQorCistIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9z
aXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Cit7Cisg
ICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2lu
c3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVl
dFJlY3QoKS53aWR0aCgpLCAwKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworLSAodm9pZCl3aW5k
b3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5z
cGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFu
Z2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICopbm90
aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3Rv
clByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd1dpbGxD
bG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3Rv
clByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Cit9CisKKy0gKHZvaWQp
d2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgor
eworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2lu
ZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxs
U2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVj
dG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENo
YW5nZSgpOworfQorCistICh2b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICAvLyBSZXNpemluZyB0aGUgdmlld3Mgd2hp
bGUgaW5zaWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIHdoZW4g
ZW50ZXJpbmcKKyAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBhdm9pZCB0aGF0IHdl
IG5lZWQgdG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBvbmx5CisgICAgLy8g
ZGVwZW5kIG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0cmFpbnRzLCBzbyBh
IHNtYWxsIGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0CisgICAgLy8gb2YgdGhlIHRpbWUgdGhl
IHZpZXdzIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBiZWNhdXNlIG9mIGF1
dG9yZXNpemluZyBtYXNrcy4KKworICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9X
LCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoX2luc3BlY3RvclBy
b3h5KQorICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRD
aGFuZ2UoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihO
U1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFy
eTxOU0tleVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRl
eHQKK3sKKyAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29u
dGV4dCkgeworICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG9m
T2JqZWN0Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0OworICAgIEFTU0VS
VChbd2luZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNzXV0pOworICAgIGlmICh3aW5k
b3cuaW5MaXZlUmVzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hZnRlcihE
SVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVj
dGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7CisgICAgfSk7Cit9CisKKy8vIE1BUks6IFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQpaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAq
KWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAg
ICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKKy0gKEJPT0wpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIF9pbnNw
ZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6IGZhbHNlOworfQor
CistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
KiluZXdXaW5kb3cKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVj
dG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5z
cGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFj
aG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KQorewor
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IG9iamVjdDpvbGRWaWV3XTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOworCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAg
ICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpCit7Cisg
ICAgaWYgKG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgeworICAgICAgICBtX2lzT2Jz
ZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSBmYWxzZTsKKyAgICAgICAgW29sZFdpbmRvdyByZW1v
dmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0
UmVjdCIgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07CisgICAg
fQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93
KE5TV2luZG93ICpuZXdXaW5kb3cpCit7CisgICAgaWYgKG1faXNBdHRhY2hlZCAmJiAhIW5ld1dp
bmRvdykgeworICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSB0cnVlOwor
ICAgICAgICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5
UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDprV2luZG93Q29udGVu
dExheW91dE9ic2VydmVyQ29udGV4dF07CisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENo
YW5nZSgpOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVj
dG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCisg
ICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVjdGlvbkxldmVsKCk7
CisgICAgaWYgKGxldmVsID4gMSkgeworICAgICAgICBOU1N0cmluZyAqZGVidWdUaXRsZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3IgWyVk
XSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBpbnNwZWN0aW5nIFdl
YiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKKyAgICAgICAg
W21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0bGVdOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9V
SV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRp
dGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2lu
ZG93IHNldFRpdGxlOnRpdGxlXTsKKyAgICB9Cit9CisKK1JldGFpblB0cjxOU1dpbmRvdz4gV2Vi
SW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0Zy
YW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQoreworICAgIE5TUmVjdCB3aW5k
b3dGcmFtZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2ZWRXaW5kb3dG
cmFtZSA6IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93
SGVpZ2h0KTsKKyAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0b3JXaW5kb3cg
YWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNrOndpbmRvd1N0
eWxlTWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKKyAgICBb
d2luZG93IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgsIG1pbmltdW1X
aW5kb3dIZWlnaHQpXTsKKyAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Cisg
ICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2
aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1hcnkpXTsKKwor
ICAgIGJvb2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0aW9uVGFyZ2V0
VHlwZTo6UmVtb3RlOworICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZvclJlbW90ZVRh
cmdldF07CisKKyAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSA9IChbd2lu
ZG93IHNjcmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKKyAgICBDR0Zsb2F0IG1pbmlt
dW1GdWxsU2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJveGltYXRlbHlI
YWxmU2NyZWVuU2l6ZSk7CisgICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29udGVudFNpemU6
TlNNYWtlU2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07
CisgICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJl
aGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFsbG93c1RpbGlu
ZyldOworCisgICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVudDpZRVNdOwor
CisgICAgLy8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdhcyBlbXB0eS4K
KyAgICBpZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKKyAgICAgICAgW3dpbmRv
dyBjZW50ZXJdOworCisgICAgcmV0dXJuIHdpbmRvdzsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VS
VChpbnNwZWN0ZWRQYWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKKworICAg
IG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAgIGlmICht
X2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIEFTU0VSVChtX29iakNBZGFwdGVy
KTsKKyAgICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5f
cGFnZS5nZXQoKTsKKyAgICB9CisKKyAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLV2Vi
SW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94
eTp0aGlzXSk7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5p
bnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2Vs
ZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENo
YW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107CisKKyAgICBtX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsKKyAgICBbbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgp
XTsKKworICAgIFdlYlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yUGFn
ZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAgQVNTRVJUKCFtX2lu
c3BlY3RvcldpbmRvdyk7CisKKyAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyA9
IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JXaW5k
b3dGcmFtZSgpOworICAgIE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0cmlu
ZyhzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nKTsKKworICAgIG1faW5zcGVjdG9yV2luZG93ID0gV2Vi
SW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUsIElu
c3BlY3Rpb25UYXJnZXRUeXBlOjpMb2NhbCk7CisgICAgW21faW5zcGVjdG9yV2luZG93IHNldERl
bGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JW
aWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisgICAgTlNWaWV3ICpj
b250ZW50VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107CisgICAgaW5zcGVj
dG9yVmlldy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNdOworICAgIFtjb250ZW50VmlldyBh
ZGRTdWJ2aWV3Omluc3BlY3RvclZpZXddOworCisgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0
bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2UoKQor
eworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3RvcldpbmRvdyk7CisKKyAg
ICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgeworICAgICAgICBbbV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBtX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29iakNBZGFwdGVyKSB7
CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2Jz
ZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICAgICAgW21fb2JqQ0FkYXB0ZXIgaW52
YWxpZGF0ZV07CisgICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7CisgICAgfQorfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJl
ZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1f
aW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0
ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAgICBtX2lu
c3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlcklu
YWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Nsb3NlVGltZW91dCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAg
bV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgY2xvc2VG
cm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKK3sKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9w
KCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAg
cGxhdGZvcm1EZXRhY2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lu
c3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6
bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKKyAgICAgICAgbV9pbnNw
ZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCku
cHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgLy8gSWYgdGhl
IFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdpbmRvdyBhcyB0aGUgaW5z
cGVjdGVkIHZpZXcsCisgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlb3BlbiB0aGUgSW5zcGVjdG9y
IHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93LgorICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3aW5kb3cgaW4gU2FmYXJpLgor
ICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmll
d10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSkgeworICAgICAg
ICBvcGVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRSA8cmRhcjov
L3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEgYmFja2dyb3VuZCB0YWIg
aW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93LgorICAgIFtbbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmls
XTsKKyAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1ha2VG
aXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XV07Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9u
dCgpCit7CisgICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSBtYWtlS2V5QW5k
T3JkZXJGcm9udDpuaWxdOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlz
RnJvbnQoKQoreworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMg
d2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSwgb25s
eSBhIGJhY2tncm91bmQgd2luZG93LgorICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBbbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cuaXNNYWluV2luZG93OworfQorCiti
b29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3ND
YW5BdHRhY2gpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgp
LT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIGlmIChbV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZpZXddKQorICAgICAgICBy
ZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1B
dHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11
bUF0dGFjaGVkV2lkdGggPSA1MDA7CisKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0g
aW5zcGVjdGVkVmlldy5mcmFtZTsKKworICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodCA9
IE5TSGVpZ2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRp
bzsKKyAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhl
aWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFt
ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmls
aXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nLgorfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgbV91cmxTdHJpbmcgPSB1cmxTdHJpbmc7CisKKyAg
ICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwor
CisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFk
b3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKworICAgIE5TV2luZG93
ICp3aW5kb3c7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICB3aW5kb3cgPSBt
X2luc3BlY3RvcldpbmRvdy5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHdpbmRvdyA9IFtbbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5kb3ddOworCisgICAgaWYgKCF3aW5k
b3cpCisgICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5kb3ddOworCisjaWYgSEFWRShTRUNf
VFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9y
V2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRl
eHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllF
U107CisjZWxzZQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2lu
ZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVs
bHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVD
aGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAgICAvLyBUaGlzIG11c3QgYmUgY2Fs
bGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhl
IGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCisgICAgU0ZDZXJ0aWZp
Y2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRl
Vmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKKyAgICBb
Y2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOworICAgIFtjZXJ0aWZpY2F0ZVZp
ZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERldGFp
bHNEaXNjbG9zZWQ6WUVTXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
YXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJv
b2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgQVNTRVJUKCFz
dWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOworICAgIGlm
ICghcGxhdGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpzdWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3
IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAgICAgZm9yY2VTYXZl
RGlhbG9nID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAg
ICBpZiAoIXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOZWNlc3Nhcnkg
Zm9yIHRoZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dl
c3RlZFVSTDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OworCisgICAgYXV0byBz
YXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNTRVJUKGFjdHVhbFVS
TCk7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJM
Q29weSwgYWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5z
aXplKCldKTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBh
dG9taWNhbGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW2NvbnRlbnRDb3B5
IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJz
b2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgfTsKKwor
ICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVS
TCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBb
TlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9
IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZp
bGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKKyAgICAv
LyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRo
ZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVj
dG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVS
TCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRp
bmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihO
U0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNl
Q2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5T
TW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7CisgICAgfTsK
KworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVjdG9y
V2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAgICAg
ICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRs
ZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0
KHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFz
IGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgorICAgIGlmICghYWN0
dWFsVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtO
U0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJy
b3I6TlVMTF07CisgICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOworICAgIFtoYW5kbGUgd3Jp
dGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07
CisgICAgW2hhbmRsZSBjbG9zZUZpbGVdOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFi
c29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSgpCit7CisgICAgQVNTRVJU
KCFtX2lzQXR0YWNoZWQpOworICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7CisgICAgQVNTRVJUKG1f
aW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxl
IHx8ICFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTdHJpbmcg
KmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9pbnNwZWN0b3JXaW5kb3cgZnJhbWVd
KTsKKyAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuc2V0SW5z
cGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5Ojp3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNBdHRh
Y2hlZCk7CisgICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JX
aW5kb3cpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5z
cGVjdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBhdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAorfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCBjdXJy
ZW50RGltZW5zaW9uKQoreworICAgIGlmICghbV9pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV9pc0F0dGFjaGVkKSB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhdHRh
Y2ggYXZhaWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIGluIGNhc2UK
KyAgICAgICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBub3QgdGhlIFdLVmlldy4KKyAgICAg
ICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2go
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3Rl
ZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dlYlZpZXcgKmluc3Bl
Y3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKworICAgIE5T
UmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOworICAgIE5TUmVj
dCBvbGRJbnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1lOworICAgIE5TUmVj
dCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0OworICAgIE5TUmVjdCBwYXJlbnRC
b3VuZHMgPSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHM7CisgICAgQ0dGbG9hdCBpbnNw
ZWN0ZWRWaWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdGcmFtZSk7CisKKyAgICBzd2l0Y2gg
KG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsK
KyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAgICAgICAgICAgY3VycmVudERpbWVu
c2lvbiA9IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9h
dCBwYXJlbnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3VuZHMpOworICAgICAgICBDR0Zsb2F0
IGluc3BlY3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFp
bmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVuc2lvbiwgcGFyZW50SGVpZ2h0KTsK
KworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQg
dmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgorICAgICAgICBpbnNwZWN0ZWRW
aWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3RvckhlaWdodCwgTlNXaWR0aChwYXJlbnRC
b3VuZHMpLCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsKKyAgICAgICAgbmV3
SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZp
ZXdGcmFtZSksIGluc3BlY3RvckhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7CisgICAgICAgIGlmICghY3VycmVudERpbWVu
c2lvbikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3Rv
clZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFy
ZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50
RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBw
b3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwg
d29yay4gQnV0IGRvbid0IHVzZSB0aGF0CisgICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhl
IGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFz
IHRoZSBpbnNwZWN0ZWQgdmlldy4KKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtl
UmVjdCgwLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9w
KTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdChwYXJlbnRXaWR0
aCAtIGluc3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91
bmRzKSk7CisKKyAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0
b3JWaWV3LndpbmRvdykgeworICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0g
W2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250
ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOworICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmll
d0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVu
dExheW91dFJlY3QpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9u
KQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmll
d0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRC
b3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1l
bnNpb24sIHBhcmVudFdpZHRoKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0
aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3Jr
LiBCdXQgZG9uJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5z
cGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhl
IGluc3BlY3RlZCB2aWV3LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0
KGluc3BlY3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0
ZWRWaWV3VG9wKTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgw
LCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7CisKKyAgICAgICAg
aWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgewor
ICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3Vw
ZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9t
VmlldzpuaWxdOworICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNl
Y3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBpZiAoTlNFcXVhbFJl
Y3RzKG9sZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVjdG9yVmlld0ZyYW1lKSAmJiBOU0Vx
dWFsUmVjdHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3RnJhbWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHRvIG1ha2Ugc3Vy
ZSB0aGUgbGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgorICAgIFtpbnNwZWN0
b3JWaWV3LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOworCisgICAgW2lu
c3BlY3RvclZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsKKyAgICBbaW5zcGVj
dGVkVmlldyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVdOworfQorCit1bnNpZ25lZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIE5T
VmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVu
dFZpZXcoKTsKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBm
cmFtZV07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVj
dC5zaXplLmhlaWdodCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBp
bnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgTlNSZWN0IGlu
c3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0aCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBOU1ZpZXcgKmlu
c3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7
CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgd2ViVmlld107CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21f
aW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX2luc3BlY3Rvcldp
bmRvdyBjbG9zZV07CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KKwor
ICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgQ0dGbG9hdCBj
dXJyZW50RGltZW5zaW9uOworICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgIGNh
c2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0
b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZTWFyZ2luXTsKKyAg
ICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OlJpZ2h0OgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNr
Ok5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKKyAgICAgICAgY3VycmVu
dERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVk
V2lkdGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoK
KyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRT
aXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBp
bnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShjdXJy
ZW50RGltZW5zaW9uKTsKKworICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBhZGRTdWJ2aWV3
Omluc3BlY3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86aW5zcGVj
dGVkVmlld107CisgICAgW2luc3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpp
bnNwZWN0b3JWaWV3XTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRh
Y2goKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5z
cGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKworICAgIFtpbnNwZWN0b3JWaWV3
IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6
aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKKworICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3BlY3RlZCB2aWV3J3MgZnJhbWUgYWZ0
ZXIgZGV0YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRoYXQgdGhlCisgICAg
Ly8gYXR0YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24g
b2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCisK
KyAgICBpbnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3Bl
Y3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShpbnNwZWN0ZWRWaWV3LmZyYW1lKSk7
CisKKyAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5z
IHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAorICAgIC8vIGFuZCB3ZSBz
aG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KKyAgICBpZiAo
IW1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBvcGVuKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgaGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdp
ZHRoKQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgbV9zaGVldFJlY3QgPSByZWN0OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2ViVmlld10tPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKK30KKworU3RyaW5nIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJ
Il07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIE5T
U3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJNYWluIiBvZlR5cGU6QCJo
dG1sIl07CisgICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOworICAgIGlmICghcGF0aCkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Cit9CisKK1N0cmluZyBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworICAgIE5TQnVuZGxl
ICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2Vi
SW5zcGVjdG9yVUkiXTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0Lmh0bWwgaW4gUHJvZHVjdGlvbiBi
dWlsZHMuCisgICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIlRl
c3QiIG9mVHlwZTpAImh0bWwiXTsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rv
cnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvckJhc2VVUkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVu
ZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKKyAgICBpZiAo
IWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTlNTdHJpbmcgKnBhdGgg
PSBidW5kbGUucmVzb3VyY2VQYXRoOworICAgIEFTU0VSVChwYXRoICYmIHBhdGgubGVuZ3RoKTsK
KworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6WUVT
XS5hYnNvbHV0ZVN0cmluZzsKK30KKworc3RhdGljIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lv
blBsaXN0KCkKK3sKKyAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFyY2hQ
YXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURv
bWFpbk1hc2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKKyAgICBOU1N0cmluZyAqc3lzdGVtVmVy
c2lvblBsaXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJdOworICAgIE5TRGlj
dGlvbmFyeSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
Q29udGVudHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07CisgICAgcmV0dXJuIHN5c3Rl
bVZlcnNpb25JbmZvOworfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6
OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIE5TRGljdGlvbmFyeSAqcGxpc3QgPSBz
eXN0ZW1WZXJzaW9uUGxpc3QoKTsKKworICAgIERlYnVnZ2FibGVJbmZvRGF0YSByZXN1bHQ7Cisg
ICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2Vi
UGFnZTsKKyAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1hY09TIl9zOworICAgIHJl
c3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RCdWlsZFZlcnNpb24iXTsK
KyAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RVc2VyVmlz
aWJsZVZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0b3IgPSBmYWxzZTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYmVlNWNkZmYzOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisK
KyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJ
bmZvLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEKCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9y
Q2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdl
dElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQor
ICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQorICAg
ICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICAgICAgLCBtX2Nv
bm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCisgICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkK
KyAgICAgICAgLCBtX2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQorICAgIHsKKyAgICAg
ICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNwZWN0
b3JQcm94eSgpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7Cisg
ICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQoKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46IHRo
aXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4K
KyAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJOjpE
ZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7CisgICAg
ICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVnZ2FibGVUeXBlKTsK
KyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKSwgbV9pbnNwZWN0
b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOworICAgIH0KKworICAgIHZvaWQgc2hvdygp
CisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisgICAgdm9pZCBzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
bV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOworICAgIH0KKworICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9j
b25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgIH0KKworICAgIHZvaWQgY2xv
c2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGll
bnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7Cisg
ICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBDb25uZWN0
aW9uSUQgbV9jb25uZWN0aW9uSUQ7CisgICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKKyAgICBJbnNw
ZWN0b3I6OkRlYnVnZ2FibGVUeXBlIG1fZGVidWdnYWJsZVR5cGU7Cit9OworCitSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBSZW1vdGVJbnNwZWN0
b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQoreworICAg
IGlmICghdXJsLmhvc3QoKSB8fCAhdXJsLnBvcnQoKSkgeworICAgICAgICBMT0dfRVJST1IoIklu
dmFsaWQgaW5zcGVjdG9yIHVybDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nvbm5lY3Rpb25JRCA9IGNvbm5lY3RJbmV0
KHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgpKTsKKyAgICBpZiAo
IW1fY29ubmVjdGlvbklEKSB7CisgICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9yIGNsaWVudCBj
b3VsZCBub3QgY29ubmVjdCB0byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKTsK
K30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkKK3sK
K30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNwZWN0b3JFdmVudChj
b25zdCBTdHJpbmcmIGV2ZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOworICAgIGF1dG8gbWVzc2FnZSA9IGV2
ZW50LnV0ZjgoKTsKKyAgICBzZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgoKSk7
Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rp
b25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaXNwYXRjaE1h
cCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFu
ZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7CisgICAg
ICAgIHsgIkJhY2tlbmRDb21tYW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcykgfSwKKyAgICAgICAgeyAiU2V0
VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldFRhcmdldExpc3QpIH0sCisgICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
bmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKKyAgICB9KTsKKworICAgIHJldHVybiBkaXNwYXRjaE1h
cDsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5pdGlhbENvbW11bmlj
YXRpb24oKQoreworICAgIGF1dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3MpOwor
ICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5nKCkpOworfQorCit2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgpCit7CisgICAgbV90
YXJnZXRzLmNsZWFyKCk7CisgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVhcigpOworICAgIG1f
b2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7CisgICAgbV9vYnNlcnZlci50YXJnZXRM
aXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaWRD
bG9zZShDb25uZWN0aW9uSUQpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAg
ICAgICBjb25uZWN0aW9uQ2xvc2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRh
cmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtlX3Bh
aXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElE
LCBkZWJ1Z2dhYmxlVHlwZV0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJbnNw
ZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVUeXBl
KTsKKyAgICB9KTsKKworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBz
ZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOworICAgIHNldHVwRXZl
bnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBzZXR1
cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOworICAgIHNlbmRXZWJJ
bnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJn
ZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGF1dG8gYmFja2Vu
ZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldFN0
cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7CisgICAgYmFja2VuZEV2
ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7CisgICAgYmFj
a2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOworICAgIGJhY2tl
bmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKKyAgICBzZW5kV2ViSW5z
cGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQgY29ubmVj
dGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBhdXRvIGNsb3NlZEV2ZW50ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJf
cywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOworICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJj
b25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVn
ZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGNs
b3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLnJl
bW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Cit9CisKK3ZvaWQg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmIGV2
ZW50KQoreworICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNzYWdlLT5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0
cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZShldmVudC5t
ZXNzYWdlLT51dGY4KCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRh
cmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghZXZlbnQuY29ubmVjdGlv
bklEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKKyAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04o
ZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKKyAgICBpZiAoIW1lc3NhZ2VW
YWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0
b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3Nh
Z2VBcnJheSkgeworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OworICAg
ICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBUYXJnZXQgdGFyZ2V0OworICAgICAgICBpZiAoIWl0ZW1PYmpl
Y3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCisgICAgICAgICAgICB8fCAh
aXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKKyAgICAgICAgICAg
IHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKKyAgICAgICAg
ICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUo
dGFyZ2V0KSk7CisgICAgfQorCisgICAgYXV0byBjb25uZWN0aW9uSUQgPSBldmVudC5jb25uZWN0
aW9uSUQudmFsdWUoKTsKKworICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRo
ZW0uCisgICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7CisgICAgZm9yIChh
dXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHBh
aXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHRhcmdl
dExpc3QpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5zZWNvbmQpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAg
dGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7CisgICAgfQorICAgIGZvciAoYXV0
byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlN
YXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAg
IG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBt
X29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYgZXZlbnQpCit7
CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdldElEIHx8ICFldmVu
dC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0
b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCks
IGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKKyAgICBpZiAoIXByb3h5KSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJveHkt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjlmNTFkNjNkZWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApAQCAt
MCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVDb250
cm9sbGFibGVUYXJnZXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0
b3JDb25uZWN0aW9uQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dh
YmxlVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsK
K2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNl
cnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3Bl
Y3RvckNsaWVudCYpID0gMDsKK307CisKK3VzaW5nIENvbm5lY3Rpb25JRCA9IEluc3BlY3Rvcjo6
Q29ubmVjdGlvbklEOwordXNpbmcgVGFyZ2V0SUQgPSBJbnNwZWN0b3I6OlRhcmdldElEOworCitj
bGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSZW1v
dGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChVUkwsIFJlbW90ZUluc3Bl
Y3Rvck9ic2VydmVyJik7CisgICAgflJlbW90ZUluc3BlY3RvckNsaWVudCgpOworCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCB1cGRhdGUgdGhlIG1lc3NhZ2luZyBwcm90b2NvbCB0byB1c2UgRGVi
dWdnYWJsZVR5cGUgaW5zdGVhZCBvZiBTdHJpbmcgZm9yIHRoZSB0YXJnZXQgdHlwZS4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MDQ3CisgICAgc3Ry
dWN0IFRhcmdldCB7CisgICAgICAgIFRhcmdldElEIGlkOworICAgICAgICBTdHJpbmcgdHlwZTsK
KyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgfTsKKworICAg
IGNvbnN0IEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4mIHRhcmdldHMoKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldHM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21t
YW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9CisKKyAgICB2
b2lkIGluc3BlY3QoQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxl
VHlwZSk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQsIFRhcmdl
dElELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rp
b25JRCwgVGFyZ2V0SUQpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ry
b3llZDxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+OworCisgICAgdm9pZCBzdGFydEluaXRpYWxDb21t
dW5pY2F0aW9uKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKCk7CisKKyAgICB2b2lkIHNl
dFRhcmdldExpc3QoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IEV2ZW50
Jik7CisKKyAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rpb25JRCkgZmluYWw7CisgICAgSGFzaE1h
cDxTdHJpbmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBmaW5hbDsKKworICAgIHZvaWQg
c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIG1fYmFj
a2VuZENvbW1hbmRzVVJMOworICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVy
OworICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jb25uZWN0aW9uSUQ7CisgICAgSGFzaE1h
cDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxz
dGQ6OnBhaXI8Q29ubmVjdGlvbklELCBUYXJnZXRJRD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJ
bnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YmM0NTVkM2U2MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSUxv
YWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElV
c2VyQ29udGVudFdvcmxkLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKKyNp
bmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitjbGFzcyBTY3JpcHRNZXNzYWdlQ2xpZW50IGZpbmFsIDogcHVibGljIFdl
YlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFNjcmlwdE1lc3NhZ2VDbGllbnQoUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpCisgICAgICAgIDogbV9pbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKSB7IH0KKworICAg
IH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9CisKKyAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKFdl
YlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZvRGF0YSYmLCBXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8gdG9rZW5zID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoIjoi
KTsKKyAgICAgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBVUkwgcmVxdWVzdFVSTCB7IHsgfSwgcGFnZS5wYWdlTG9hZFN0YXRlKCkudXJs
KCkgfTsKKyAgICAgICAgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaW5zcGVjdChyZXF1ZXN0
VVJMLmhvc3RBbmRQb3J0KCksIHRva2Vuc1swXS50b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzFdLnRv
VUludFN0cmljdCgpLCB0b2tlbnNbMl0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOworfTsK
KworY2xhc3MgTG9hZGVyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6TG9hZGVyQ2xpZW50IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBMb2FkZXJDbGllbnQo
RnVuY3Rpb248dm9pZCgpPiYmIGxvYWRlZENhbGxiYWNrKQorICAgICAgICA6IG1fbG9hZGVkQ2Fs
bGJhY2sgeyBXVEZNb3ZlKGxvYWRlZENhbGxiYWNrKSB9IHsgfQorCisgICAgdm9pZCBkaWRGaW5p
c2hMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCopIGZpbmFsCisgICAgeworICAgICAg
ICBtX2xvYWRlZENhbGxiYWNrKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1bmN0aW9uPHZv
aWQoKT4gbV9sb2FkZWRDYWxsYmFjazsKK307CisKK3N0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6
OkRlYnVnZ2FibGVUeXBlPiBwYXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIGRlYnVnZ2FibGVUeXBlU3RyaW5nKQoreworICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmlu
ZyA9PSAiamF2YXNjcmlwdCJfcykKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJs
ZVR5cGU6OkphdmFTY3JpcHQ7CisgICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJwYWdl
Il9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6UGFnZTsKKyAg
ICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInNlcnZpY2Utd29ya2VyIl9zKQorICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6U2VydmljZVdvcmtlcjsKKyAgICBp
ZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gIndlYi1wYWdlIl9zKQorICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjppbnNwZWN0
KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRh
cmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byBkZWJ1Z2dh
YmxlVHlwZSA9IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKHR5cGUpOworICAgIGlmICgh
ZGVidWdnYWJsZVR5cGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGRlYnVnZ2FibGUg
dHlwZTogXCIlc1wiIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX2luc3BlY3RvckNsaWVudCkKKyAgICAgICAgbV9pbnNwZWN0b3JDbGll
bnQtPmluc3BlY3QoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUudmFsdWUo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpydW5TY3JpcHQo
Y29uc3QgU3RyaW5nJiBzY3JpcHQpCit7CisgICAgbV9wYWdlLnJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZSh7IHNjcmlwdCwgZmFsc2UsIFdURjo6bnVsbG9wdCwgZmFsc2UgfSwgCisgICAgICAgIFtd
KEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgT3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9u
RGV0YWlscz4gZXhjZXB0aW9uRGV0YWlscywgQ2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAg
ICAgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJF
eGNlcHRpb24gcnVubmluZyBzY3JpcHQgXCIlc1wiIiwgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2Fn
ZS51dGY4KCkuZGF0YSgpKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYgY2xp
ZW50KQoreworICAgIFN0cmluZ0J1aWxkZXIgaHRtbDsKKyAgICBpZiAoY2xpZW50LnRhcmdldHMo
KS5pc0VtcHR5KCkpCisgICAgICAgIGh0bWwuYXBwZW5kKCI8cD5ObyB0YXJnZXRzIGZvdW5kPC9w
PiJfcyk7CisgICAgZWxzZSB7CisgICAgICAgIGh0bWwuYXBwZW5kKCI8dGFibGU+Iik7CisgICAg
ICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50LnRhcmdldHMoKS5rZXlzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogY2xpZW50LnRhcmdldHMoKS5nZXQoY29u
bmVjdGlvbklEKSkgeworICAgICAgICAgICAgICAgIGh0bWwuYXBwZW5kKG1ha2VTdHJpbmcoCisg
ICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRyPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0
ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1l
LCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVybFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48
L3RkPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5
cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdlKFxcJyIsIGNvbm5lY3Rpb25JRCwg
IjoiLCB0YXJnZXQuaWQsICI6IiwgdGFyZ2V0LnR5cGUsICJcXCcpO1wiPjwvdGQ+IgorICAgICAg
ICAgICAgICAgICAgICAiPC90cj48L3Rib2R5PiIKKyAgICAgICAgICAgICAgICApKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBodG1sLmFwcGVuZCgiPC90YWJsZT4iKTsKKyAg
ICB9CisgICAgbV90YXJnZXRMaXN0c0h0bWwgPSBodG1sLnRvU3RyaW5nKCk7CisgICAgaWYgKG1f
cGFnZUxvYWRlZCkKKyAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOworfQorCit2b2lkIFJlbW90
ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6dXBkYXRlVGFyZ2V0TGlzdCgpCit7CisgICAgaWYg
KCFtX3RhcmdldExpc3RzSHRtbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcnVuU2NyaXB0KG1ha2VT
dHJpbmcoInVwZGF0ZVRhcmdldHMoYCIsIG1fdGFyZ2V0TGlzdHNIdG1sLCAiYCk7IikpOworICAg
ICAgICBtX3RhcmdldExpc3RzSHRtbCA9IHsgfTsKKyAgICB9Cit9CisKK3ZvaWQgUmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmIHBh
Z2VQcm94eSwgV2ViVVJMU2NoZW1lVGFzayYgdGFzaykKK3sKKyAgICBhdXRvJiByZXF1ZXN0VVJM
ID0gdGFzay5yZXF1ZXN0KCkudXJsKCk7CisKKyAgICAvLyBEZXN0cm95IHRoZSBjbGllbnQgYmVm
b3JlIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24gc28gaXQgY2FuIGNvbm5lY3QgdG8gdGhlIHNh
bWUgcG9ydAorICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3Rv
ckNsaWVudCA9IG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PihyZXF1ZXN0VVJMLCAq
dGhpcyk7CisKKyAgICAvLyBTZXR1cCB0YXJnZXQgcG9zdE1lc3NhZ2UgbGlzdGVuZXIKKyAgICBh
dXRvIGhhbmRsZXIgPSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Y3JlYXRlKG1ha2VVbmlxdWU8
U2NyaXB0TWVzc2FnZUNsaWVudD4oKnRoaXMpLCAiaW5zcGVjdG9yIiwgQVBJOjpVc2VyQ29udGVu
dFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKKyAgICBwYWdlUHJveHkucGFnZUdyb3VwKCkudXNlckNv
bnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXIuZ2V0
KCkpOworCisgICAgLy8gU2V0dXAgbG9hZGVyIGNsaWVudCB0byBnZXQgbm90aWZpZWQgb2YgcGFn
ZSBsb2FkCisgICAgbV9wYWdlLnNldExvYWRlckNsaWVudChtYWtlVW5pcXVlPExvYWRlckNsaWVu
dD4oW3RoaXNdIHsKKyAgICAgICAgbV9wYWdlTG9hZGVkID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRl
VGFyZ2V0TGlzdCgpOworICAgIH0pKTsKKyAgICBtX3BhZ2VMb2FkZWQgPSBmYWxzZTsKKworICAg
IFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAorICAg
ICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKKyAgICAg
ICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1s
OyBjaGFyc2V0PXV0Zi04XCIgLz4iCisgICAgICAgICI8c3R5bGU+IgorICAgICAgICAiICBoMSB7
IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRv
bTogMDsgfSIKKyAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1m
b250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHgg
MCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCisgICAgICAgICIgICAgICAgICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsi
CisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5k
LXJlcGVhdDogbm8tcmVwZWF0OyB9IgorICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBi
b3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB9IgorICAgICAg
ICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDog
bm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9IgorICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRv
bTogMzBweDsgfSIKKyAgICAgICAgIiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9IgorICAgICAgICAi
ICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9IgorICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZv
bnQtd2VpZ2h0OiBib2xkOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRl
eHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9IgorICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6
ICNiYWJkYjY7IGJhY2tncm91bmQ6ICNlZWU7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgb3ZlcmZs
b3ctd3JhcDogYnJlYWstd29yZDsgfSIKKyAgICAgICAgIiAgdGQuaW5wdXQgeyB3aWR0aDogNjRw
eDsgfSIKKyAgICAgICAgIiAgaW5wdXQgeyB3aWR0aDogMTAwJTsgcGFkZGluZzogOHB4OyB9Igor
ICAgICAgICAiPC9zdHlsZT4iCisgICAgICAgICI8L2hlYWQ+PGJvZHk+PGgxPkluc3BlY3RhYmxl
IHRhcmdldHM8L2gxPiIKKyAgICAgICAgIjxkaXYgaWQ9XCJ0YXJnZXRsaXN0XCI+PHA+Tm8gdGFy
Z2V0cyBmb3VuZDwvcD48L2Rpdj48L2JvZHk+IgorICAgICAgICAiPHNjcmlwdD4iCisgICAgICAg
ICJmdW5jdGlvbiB1cGRhdGVUYXJnZXRzKHN0cikgeyIKKyAgICAgICAgICAgICJsZXQgdGFyZ2V0
RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldGxpc3QnKTsiCisgICAgICAgICAg
ICAidGFyZ2V0RGl2LmlubmVySFRNTCA9IHN0cjsiCisgICAgICAgICJ9IgorICAgICAgICAiPC9z
Y3JpcHQ+Iik7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8L2h0bWw+Iik7CisKKyAgICBhdXRv
IGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBhdXRvIGRhdGEgPSBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShodG1sLmRhdGEoKSwgaHRtbC5sZW5ndGgoKSk7CisgICAgUmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9odG1sIl9zLCBodG1sLmxl
bmd0aCgpLCAiVVRGLTgiX3MpOworICAgIHRhc2suZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNl
KTsKKyAgICB0YXNrLmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoZGF0YSkpOworICAgIHRhc2suZGlk
Q29tcGxldGUoUmVzb3VyY2VFcnJvcigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90
ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4wZjYwMGVmZGVkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxlci5oIgorCituYW1lc3BhY2UgV1RG
IHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlVSTFNj
aGVtZVRhc2s7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciBmaW5hbCA6
IHB1YmxpYyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciwgcHVibGljIFdlYlVSTFNjaGVtZUhhbmRs
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyPiBjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihwYWdlKSk7IH0KKworICAgIHZvaWQgaW5zcGVj
dChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25z
dCBTdHJpbmcmIHR5cGUpOworCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgICAgIDogbV9wYWdlKHBhZ2UpIHsgfQor
CisgICAgLy8gUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKKyAgICB2b2lkIHRhcmdldExpc3RDaGFu
Z2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOworICAgIHZvaWQgY29ubmVjdGlvbkNs
b3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0KKworICAgIC8vIFdlYlVSTFNj
aGVtZUhhbmRsZXIKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIFdl
YlVSTFNjaGVtZVRhc2smKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRmb3JtU3RvcFRhc2soV2ViUGFn
ZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorICAgIHZvaWQgcGxhdGZvcm1U
YXNrQ29tcGxldGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KKworICAgIHZvaWQgdXBk
YXRlVGFyZ2V0TGlzdCgpOworCisgICAgdm9pZCBydW5TY3JpcHQoY29uc3QgU3RyaW5nJik7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PiBtX2luc3BlY3RvckNs
aWVudDsKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICBib29sIG1fcGFnZUxvYWRlZCB7
IGZhbHNlIH07CisgICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNIdG1sOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dp
bi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjM5MGMyYjk0ZjJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgTFBDVFNU
UiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlQb2ludGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKKworTFJFU1VM
VCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhIV05EIGh3bmQsIFVJ
TlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclBy
b3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAgICBy
ZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAg
cmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQ
YXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0
YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2
ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBXTkRD
TEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAg
d2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAw
OworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAg
PSAwOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAgICAg
ICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9
IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1l
ICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOworICAgIHdjZXguaEljb25TbSAg
ICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisgICAg
cmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6c2l6ZUNoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zy
b250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3LT53aW5k
b3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVj
dC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICByZXR1cm4gMDsKK30KKwor
TFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCit7CisgICAgOjpTaG93
V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250ZW5kRGlkQ2xvc2Uo
KTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFJlZlB0
cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0
cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOworCisjaWYgRU5BQkxFKERFVkVMT1BFUl9N
T0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwor
ICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxl
ZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwID0g
V2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2Uo
bnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9v
bCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIpKSk7
CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdldCgp
KTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5nZXQoKSk7
CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwgMTAwMCk7CisgICAg
cmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUgPSA6OkNyZWF0ZVdp
bmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQ
UEVEV0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9mcm9udGVuZEhhbmRs
ZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxI
QU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX1NIT1cp
OworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAm
cik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9u
LCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mKSB7IH0KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgOjpEZXN0cm95V2luZG93
KG1fZnJvbnRlbmRIYW5kbGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmRlYWM5NzMxNzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYklu
c3BlY3RvclByb3h5V2luLmNwcApAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpbmNs
dWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgor
I2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudElt
cGwuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUJ1bmRsZVdp
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQv
V0tQYWdlLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCBMUENXU1RSIFdl
Ykluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYkluc3BlY3RvclByb3h5UG9pbnRlciI7
CitzdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiV2Vi
SW5zcGVjdG9yUHJveHlDbGFzcyI7CisKK3N0cnVjdCBJbnNwZWN0ZWRXaW5kb3dJbmZvIHsKKyAg
ICBpbnQgbGVmdDsKKyAgICBpbnQgdG9wOworICAgIGludCB2aWV3V2lkdGg7CisgICAgaW50IHZp
ZXdIZWlnaHQ7CisgICAgaW50IHBhcmVudFdpZHRoOworICAgIGludCBwYXJlbnRIZWlnaHQ7Cit9
OworCitzdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKEhX
TkQgaW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRvdykKK3sKKyAgICBSRUNUIHJlY3Q7
CisgICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRvdywgJnJlY3QpOworICAgIDo6TWFw
V2luZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50V2luZG93LCAoTFBQT0lOVCkmcmVj
dCwgMik7CisKKyAgICBSRUNUIHBhcmVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KHBhcmVu
dFdpbmRvdywgJnBhcmVudFJlY3QpOworICAgIHJldHVybiB7IHJlY3QubGVmdCwgcmVjdC50b3As
IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIHBhcmVudFJl
Y3QucmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJlY3QuYm90dG9tIC0gcGFyZW50UmVj
dC50b3AgfTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93UmVjZWl2ZWRNZXNz
YWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBz
d2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6IHsKKyAgICAgICAg
aWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byB3
aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJhbSk7CisKKyAgICAg
ICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOworICAgICAgICBSRUNU
IHBhcmVudFJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3QocGFyZW50LCAmcGFyZW50UmVjdCk7
CisKKyAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OworICAgICAgICBHZXRDbGllbnRSZWN0KG1f
aW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3QpOworCisgICAgICAgIHN3aXRjaCAo
bV9hdHRhY2htZW50U2lkZSkgeworICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQo
aW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcCwgd2luZG93UG9zLT5jeSk7
CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKKyAgICAgICAg
ICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93UG9zLT54
LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JI
ZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpSaWdodDogeworICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9yV2lkdGggPSBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2lu
ZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3RvclJlY3QubGVmdCwgd2luZG93
UG9zLT5jeCk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09IGluc3BlY3RvcldpZHRoOwor
ICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5k
b3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnksIGluc3BlY3RvcldpZHRoLCB3
aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK0xSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJveHk6OnduZFByb2MoSFdORCBod25k
LCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXZWJJbnNw
ZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+
KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7CisgICAgc3dp
dGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIDo6U2V0V2luZG93UG9zKGNs
aWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBMT1dPUkQobFBhcmFtKSwgSElX
T1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2Ug
V01fQ0xPU0U6CisgICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiA6OkRlZldpbmRv
d1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9y
UHJveHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdp
c3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKworICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRv
d0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0Ns
YXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNp
emVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxlID0gMDsKKyAgICB3Y2V4LmxwZm5XbmRQ
cm9jID0gd25kUHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAwOworICAgIHdjZXguY2JXbmRF
eHRyYSA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgp
OworICAgIHdjZXguaEljb24gPSAwOworICAgIHdjZXguaEN1cnNvciA9IExvYWRDdXJzb3IoMCwg
SURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgPSAwOworICAgIHdjZXgubHBzek1l
bnVOYW1lID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNwZWN0b3JQcm94eUNs
YXNzTmFtZTsKKyAgICB3Y2V4LmhJY29uU20gPSAwOworICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xh
c3NFeCgmd2NleCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9u
QWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJl
ZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFt
ZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1l
ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOworICAgIGlmIChz
b3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgdG9J
bXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2Fz
dDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOworICAgIEFTU0VSVCh3ZWJJ
bnNwZWN0b3JQcm94eSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9
IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOworCisgICAgLy8gQWxsb3cg
bG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBpZiAoV2ViSW5zcGVjdG9y
UHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsKKyAgICAg
ICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGlu
c3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7CisKKyAg
ICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAgICB3ZWJJ
bnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlcXVl
c3QpKTsKK30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVj
dG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGNsaWVudEluZm8pKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworICAgIHdl
Ykluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKK1dlYlBhZ2VQcm94eSogV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NF
UlQoaW5zcGVjdGVkUGFnZSgpKTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJl
bmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFC
TEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRo
ZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdz
LgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAg
IHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0
cnVlKTsKKyNlbmRpZgorICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHModHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3Mo
eyB9KTsKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3Rv
clBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOworICAgIGF1dG8g
cGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29s
KGluc3BlY3Rpb25MZXZlbCgpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVu
Y2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdy
b3VwKHBhZ2VHcm91cC5wdHIoKSk7CisKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2
aWdhdGlvbkNsaWVudCA9IHsKKyAgICAgICAgeyAwLCB0aGlzIH0sCisgICAgICAgIGRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24sCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25SZXNwb25zZQorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lG
b3JQbHVnaW5Mb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZp
Z2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9u
YWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAv
LyBkaWRGYWlsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9u
YWxMb2FkSW5TdWJmcmFtZQorICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExv
YWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbgorICAgICAg
ICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZQorICAgICAgICBudWxscHRy
LCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCisgICAgICAgIG51bGxw
dHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorICAgICAgICB3ZWJQcm9j
ZXNzRGlkQ3Jhc2gsCisgICAgICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkK
KworICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlCisgICAgICAg
IG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAv
LyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVO
YXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CisgICAgfTsKKworICAgIFJFQ1QgciA9IHsgMCwgMCwg
c3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwgc3RhdGljX2Nhc3Q8TE9ORz4o
aW5pdGlhbFdpbmRvd0hlaWdodCkgfTsKKyAgICBhdXRvIHBhZ2UgPSBpbnNwZWN0ZWRQYWdlKCk7
CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmlld1dpZGdldCgpOworICAgIG1f
aW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KG1faW5zcGVjdGVkVmlld1dp
bmRvdyk7CisgICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0
aW9uLCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIG1faW5zcGVjdG9yVmlldyA9
ICZ2aWV3LmxlYWtSZWYoKTsKKyAgICBhdXRvIGluc3BlY3RvclBhZ2UgPSBtX2luc3BlY3RvclZp
ZXctPnBhZ2UoKTsKKyAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBpbnNwZWN0b3JQYWdlLT52
aWV3V2lkZ2V0KCk7CisgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5z
cGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworCisgICAgcmV0dXJuIGluc3Bl
Y3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNh
c3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKyAgICBt
X2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7
CisgICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgeworICAgICAgICA6OkRlc3Ryb3lXaW5k
b3cobV9pbnNwZWN0b3JWaWV3V2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93
ID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Cisg
ICAgICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9y
UHJveHlQb2ludGVyUHJvcCk7CisgICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvckRl
dGFjaFdpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gbnVsbHB0cjsK
KyAgICB9CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKKyAgICBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9y
UHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdl
YkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBDRlNUUigiaHRtbCIpLCBDRlNU
UigiV2ViSW5zcGVjdG9yVUkiKSkpOworICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJM
UmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyNpZiBVU0UoQ0Yp
CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNv
cHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRlc3QiKSwgQ0ZT
VFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxH
ZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5k
aWYKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKK3sK
KyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJMUmVmID0gYWRvcHRD
RihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIo
IldlYkluc3BlY3RvclVJIiksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gQ0ZVUkxH
ZXRTdHJpbmcoYmFzZVVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5k
aWYKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9j
YWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1
NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KKyAgICByZXR1cm4gRGVi
dWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIFJFQ1QgcmVjdDsKKyAg
ICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7CisgICAgcmV0
dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBSRUNUIHJlY3Q7Cisg
ICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOworICAgIHJl
dHVybiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRB
dHRhY2hlZFNpemUgPSAzMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRh
Y2hlZFdpZHRoID0gNzUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNo
ZWRIZWlnaHQgPSAyNTA7CisKKyAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgJiYgOjpH
ZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRldGFjaFdpbmRv
dykgeworICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRl
dGFjaFdpbmRvdywgU1dfSElERSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6V2luZG93TWVzc2Fn
ZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwor
CisgICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgewor
ICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3Rl
ZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0
QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdp
bmRvd1dpZHRoKCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dp
ZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNo
ZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAgICB9CisgICAgOjpTaG93V2luZG93
KG1faW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKK3sKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFz
UnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2luc3BlY3Rv
ckRldGFjaFdpbmRvdykgeworICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgICAg
IG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBXZWJJbnNwZWN0
b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICAgICAgICAgIENX
X1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdp
bmRvd0hlaWdodCwKKyAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCks
IDApOworICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3Bl
Y3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Cisg
ICAgfQorCisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0
ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOworCisgICAgUkVDVCByZWN0OworICAg
IDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgJnJlY3QpOworICAgIGF1
dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2lu
ZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0UGFyZW50KG1faW5z
cGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOworICAgIDo6U2V0V2lu
ZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVjdC5yaWdodCAtIHJlY3Qu
bGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdp
bmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93
SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRv
d0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7CisKKyAg
ICBpZiAobV9pc1Zpc2libGUpCisgICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFj
aFdpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGF1dG8gd2lu
ZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVj
dG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdo
dCAtIGhlaWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgaGVp
Z2h0LCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dp
bmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJl
bnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5k
b3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAgIGF1
dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2lu
ZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1f
aW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpZHRoLCB3
aW5kb3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5m
by50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3
V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBh
cmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdp
bmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0
YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zy
b250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiAvKiB1cmwgKi8p
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWlsYWJsZSAqLykKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250
ZW5kV2luZG93KCkKK3sKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyOGNhMmZiZmIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvclRhcmdldFByb3h5LmgiCi0KLSNpbmNsdWRlICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgot
I2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5
JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dFR5cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRQcm94
eT4ocGFnZSwgdGFyZ2V0SWQsIHR5cGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
VGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoUHJvdmlzaW9uYWxQYWdl
UHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBJbnNwZWN0
b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZS5wYWdlKCksIHRhcmdldElkLCB0
eXBlKTsKLSAgICB0YXJnZXQtPm1fcHJvdmlzaW9uYWxQYWdlID0gbWFrZVdlYWtQdHIocHJvdmlz
aW9uYWxQYWdlKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQotCi1JbnNwZWN0b3JUYXJnZXRQcm94
eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKLSAgICA6IG1f
cGFnZShwYWdlKQotICAgICwgbV9pZGVudGlmaWVyKHRhcmdldElkKQotICAgICwgbV90eXBlKHR5
cGUpCi17Ci19Ci0KLXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNvbm5lY3QoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotewotICAg
IGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewotICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5l
Y3Rpb25UeXBlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wYWdlLmhh
c1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlzY29ubmVjdCgpCi17Ci0gICAgaWYgKGlzUGF1
c2VkKCkpCi0gICAgICAgIHJlc3VtZSgpOwotCi0gICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7
Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNj
b25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3BhZ2Uuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkpKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkg
ewotICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdlKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0g
ICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0
QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJn
ZXRQcm94eTo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKQotewotICAgIG1fcHJvdmlzaW9u
YWxQYWdlID0gbnVsbHB0cjsKLX0KLQotYm9vbCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6aXNQcm92
aXNpb25hbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9wcm92aXNpb25hbFBhZ2U7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjM5Y2Vj
OGUxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JU
YXJnZXRQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFByb3Zpc2lvbmFsUGFnZVByb3h5OwotY2xhc3MgV2ViUGFnZVByb3h5OwotCi0v
LyBOT1RFOiBUaGlzIFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0IGNhcmUg
YWJvdXQgdGhlIGZyb250ZW5kIGNoYW5uZWwsIHNpbmNlCi0vLyBhbnkgdGFyZ2V0IC0+IGZyb250
ZW5kIG1lc3NhZ2VzIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0aCBhIHRh
cmdldElkLgotCi1jbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOwotcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShX
ZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGUpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0
UHJveHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgSW5zcGVjdG9yVGFyZ2V0
UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9IGRlZmF1
bHQ7Ci0KLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0KLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lv
bmFsVGFyZ2V0KCk7Ci0gICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25U
eXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAgIFN0cmluZyBtX2lkZW50aWZp
ZXI7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlwZTsKLSAgICBXZWFr
UHRyPFByb3Zpc2lvbmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTky
YzI5ZjQxOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCi0jaW5jbHVkZSAi
QVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkKLSAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpE
ZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCi17Ci19
Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQot
ewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9U
RUxFTUVUUlkpCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWls
YWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oYXZhaWxhYmxlKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5Ojpsb2FkKFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25z
dCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCkKLXsKLSAgICBjcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKLQotICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJ
bmZvKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKLQot
ICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OkluaXRpYWxpemUobV9kZWJ1Z2dhYmxlSW5mby0+ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tl
bmRDb21tYW5kc1VSTCkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVS
TCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQotewotICAgIGNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OmNsb3NlRnJvbUNyYXNoKCkKLXsKLSAgICAvLyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5k
IGp1c3QgY2xvc2VkLCBzbyBjbGllbnRzIGFyZSBpbmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29u
ZS4KLSAgICBmcm9udGVuZERpZENsb3NlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNob3coKQotewotICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQotewotICAgIFJlZjxSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBpZiAobV9jbGllbnQp
Ci0gICAgICAgIG1fY2xpZW50LT5jbG9zZUZyb21Gcm9udGVuZCgpOwotCi0gICAgY2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cmVvcGVuKCkKLXsKLSAgICBBU1NFUlQoIW1fYmFja2VuZENvbW1hbmRzVVJMLmlzRW1wdHkoKSk7
Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIGxvYWQobV9kZWJ1Z2dh
YmxlSW5mby5jb3B5UmVmKCksIG1fYmFja2VuZENvbW1hbmRzVVJMKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgcGxhdGZvcm1SZXNldFN0
YXRlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgp
Ci17Ci0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5n
JiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewot
ICAgIHBsYXRmb3JtU2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZv
cmNlU2F2ZURpYWxvZyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVu
ZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewot
ICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFydFdp
bmRvd0RyYWcoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkluTmV3
VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIHBsYXRmb3JtT3BlbkluTmV3VGFiKHVybCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25z
dCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBwbGF0Zm9ybVNob3dD
ZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQo
bWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2Us
IG51bGxwdHIpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0
b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQot
ewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lu
c3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9y
UGFnZS0+d2ViUGFnZUlEKCkpOwotCi0gICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0
b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0KLSAgICBwbGF0Zm9y
bUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLSNpZiAhRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZP
Uk0oV0lOKSkKLVdlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsg
fQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUo
Y29uc3QgQ2VydGlmaWNhdGVJbmZvJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkgeyB9Ci0jZW5kaWYgLy8gIUVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFdJTikpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYjU4ZjhjZTA2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLU9CSkNfQ0xBU1MgTlNV
Ukw7Ci1PQkpDX0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyOwotT0JKQ19DTEFTUyBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI7
Ci1PQkpDX0NMQVNTIFdLV2ViVmlldzsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewotY2xhc3MgRGVidWdn
YWJsZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7
Ci1jbGFzcyBXZWJWaWV3OwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgPSAwOwot
fTsKLQotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gY3JlYXRlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5KCkpOwotICAgIH0KLQotICAgIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAg
dm9pZCBzZXRDbGllbnQoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQqIGNsaWVudCkgeyBt
X2NsaWVudCA9IGNsaWVudDsgfQotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJv
b2wpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2b2lkIGxvYWQoUmVmPEFQSTo6
RGVidWdnYWJsZUluZm8+JiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKTsKLSAg
ICB2b2lkIGNsb3NlRnJvbUJhY2tlbmQoKTsKLSAgICB2b2lkIHNob3coKTsKLQotICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgTlNXaW5kb3cgKndpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93
LmdldCgpOyB9Ci0gICAgV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7Ci0KLSAgICBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0
OyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHVwZGF0ZVdpbmRvd1Rp
dGxlKGNvbnN0IENTdHJpbmcmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQot
ICAgIExSRVNVTFQgc2l6ZUNoYW5nZSgpOwotICAgIExSRVNVTFQgb25DbG9zZSgpOwotCi0gICAg
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY2xvc2VGcm9tQ3Jhc2goKTsKLQotcHJpdmF0ZToKLSAg
ICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2
ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgbWVzc2Fn
ZXMuCi0gICAgdm9pZCBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAg
ICB2b2lkIHJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQg
c2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKLSAgICB2b2lkIHNldFNo
ZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHN0YXJ0V2luZG93
RHJhZygpOwotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2
b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSAg
ICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHZvaWQgY2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIC8vIFBsYXRmb3JtIGltcGxlbWVudGF0aW9ucy4K
LSAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOwotICAg
IHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5n
JiBjb250ZW50KTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLSAgICB2
b2lkIHBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHBs
YXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwot
Ci0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9
OwotICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9OwotCi0gICAg
UmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IG1fZGVidWdnYWJsZUluZm87Ci0gICAgU3RyaW5nIG1f
YmFja2VuZENvbW1hbmRzVVJMOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXc7Ci0gICAgUmV0YWluUHRy
PE5TV2luZG93PiBtX3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8V0tSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZXRh
aW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOwotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBtX3NoZWV0UmVjdDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBHdGtX
aWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93IHsg
bnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQotICAgIEhXTkQgbV9m
cm9udGVuZEhhbmRsZTsKLSAgICBSZWZQdHI8V2ViVmlldz4gbV93ZWJWaWV3OwotI2VuZGlmCi19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMDkxYjc4ZmI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgor
KysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgewotICAg
IEZyb250ZW5kRGlkQ2xvc2UoKQotICAgIFJlb3BlbigpCi0gICAgUmVzZXRTdGF0ZSgpCi0gICAg
QnJpbmdUb0Zyb250KCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotICAgIEFwcGVuZChTdHJp
bmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLQotICAgIE9wZW5Jbk5l
d1RhYihTdHJpbmcgdXJsKQotICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8gY2VydGlmaWNhdGVJbmZvKQotCi0gICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5n
IG1lc3NhZ2UpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3Bl
Y3RvckhpZ2hsaWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTgzOTFjNDIw
Yy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JI
aWdobGlnaHRWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBIaWdobGlnaHQ7Ci19Ci0KLUBpbnRlcmZhY2Ug
V0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IDogVUlWaWV3IHsKLSAgICBOU011dGFibGVBcnJheSAq
X2xheWVyczsgLy8gQ0FTaGFwZUxheWVycy4KLX0KLS0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJD
b3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodDsKLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWYwYzAzZTMzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KKysrIC9kZXYv
bnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgiCi0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9HZW9tZXRyeVV0aWxpdGllcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JPdmVybGF5
Lmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcKLQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IF9sYXllcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107
Ci0gICAgW19sYXllcnMgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2
b2lkKV9yZW1vdmVBbGxMYXllcnMKLXsKLSAgICBmb3IgKENBU2hhcGVMYXllciAqbGF5ZXIgaW4g
X2xheWVycykKLSAgICAgICAgW2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbX2xh
eWVycyByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotLSAodm9pZClfY3JlYXRlTGF5ZXJzOihOU1VJ
bnRlZ2VyKW51bUxheWVycwotewotICAgIGlmIChbX2xheWVycyBjb3VudF0gPT0gbnVtTGF5ZXJz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLQotICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7Ci0gICAgICAgIENB
U2hhcGVMYXllciAqbGF5ZXIgPSBbW0NBU2hhcGVMYXllciBhbGxvY10gaW5pdF07Ci0gICAgICAg
IFtfbGF5ZXJzIGFkZE9iamVjdDpsYXllcl07Ci0gICAgICAgIFtzZWxmLmxheWVyIGFkZFN1Ymxh
eWVyOmxheWVyXTsKLSAgICAgICAgW2xheWVyIHJlbGVhc2VdOwotICAgIH0KLX0KLQotc3RhdGlj
IGJvb2wgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHAyLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBkMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgZDIsIFdlYkNv
cmU6OkZsb2F0UG9pbnQmIGludGVyc2VjdGlvbikgCi17Ci0gICAgLy8gRG8gdGhlIGxpbmVzIGlu
dGVyc2VjdD8KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlbXBvcmFyeUludGVyc2VjdGlvblBv
aW50OwotICAgIGlmICghZmluZEludGVyc2VjdGlvbihwMSwgcDIsIGQxLCBkMiwgdGVtcG9yYXJ5
SW50ZXJzZWN0aW9uUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJcyB0
aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIHR3byBwb2ludHMgb24gdGhlIGxpbmU/Ci0gICAg
aWYgKHAxLngoKSA+PSBwMi54KCkpIHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlv
blBvaW50LngoKSA+IHAxLngoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPCBw
Mi54KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+IHAyLngoKSB8fCB0ZW1wb3JhcnlJ
bnRlcnNlY3Rpb25Qb2ludC54KCkgPCBwMS54KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGlmIChwMS55KCkgPj0gcDIueSgpKSB7Ci0gICAgICAgIGlmICh0ZW1wb3Jh
cnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPiBwMS55KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9u
UG9pbnQueSgpIDwgcDIueSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPiBwMi55KCkg
fHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwgcDEueSgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludGVyc2VjdGlvbiA9IHRlbXBvcmFyeUludGVy
c2VjdGlvblBvaW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGlzIHF1YWQgaW50ZXJz
ZWN0aW9uIHdvcmtzIGJlY2F1c2UgdGhlIHR3byBxdWFkcyBhcmUga25vd24gdG8gYmUgYXQgdGhl
IHNhbWUKLS8vIHJvdGF0aW9uIGFuZCBjbG9ja3dpc2UtbmVzcy4KLXN0YXRpYyBXZWJDb3JlOjpG
bG9hdFF1YWQgcXVhZEludGVyc2VjdGlvbihXZWJDb3JlOjpGbG9hdFF1YWQgYm91bmRzLCBXZWJD
b3JlOjpGbG9hdFF1YWQgdG9DbGFtcCkKLXsKLSAgICAvLyBSZXN1bHRpbmcgcG9pbnRzLgotICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcDEsIHAyLCBwMywgcDQ7Ci0gICAgYm9vbCBjb250YWluc1Bv
aW50MSA9IGZhbHNlOwotICAgIGJvb2wgY29udGFpbnNQb2ludDIgPSBmYWxzZTsKLSAgICBib29s
IGNvbnRhaW5zUG9pbnQzID0gZmFsc2U7Ci0gICAgYm9vbCBjb250YWluc1BvaW50NCA9IGZhbHNl
OwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQxID0gZmFsc2U7Ci0gICAgYm9vbCBpbnRlcnNl
Y3RGb3JQb2ludDIgPSBmYWxzZTsKLSAgICBib29sIGludGVyc2VjdEZvclBvaW50MyA9IGZhbHNl
OwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmFsc2U7Ci0KLSAgICAvLyBUb3AgLyBi
b3R0b20gdmVydGljYWwgY2xhbXBpbmcuCi0gICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRv
Q2xhbXAucDEoKSkpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDEgPSB0cnVlOwotICAgICAgICBw
MSA9IHRvQ2xhbXAucDEoKTsKLSAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQxID0g
ZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5w
MigpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAucDQoKSwgcDEpKSkKLSAgICAgICAgcDEgPSB0b0Ns
YW1wLnAxKCk7Ci0KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMigpKSkg
ewotICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Ci0gICAgICAgIHAyID0gdG9DbGFtcC5w
MigpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDIgPSBmaW5kSW50ZXJzZWN0
aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRvQ2xhbXAu
cDIoKSwgdG9DbGFtcC5wMygpLCBwMikpKQotICAgICAgICBwMiA9IHRvQ2xhbXAucDIoKTsKLQot
ICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAzKCkpKSB7Ci0gICAgICAgIGNv
bnRhaW5zUG9pbnQzID0gdHJ1ZTsKLSAgICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7Ci0gICAgfSBl
bHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MyA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3
ZWVuUG9pbnRzKGJvdW5kcy5wNCgpLCBib3VuZHMucDMoKSwgdG9DbGFtcC5wMigpLCB0b0NsYW1w
LnAzKCksIHAzKSkpCi0gICAgICAgIHAzID0gdG9DbGFtcC5wMygpOwotCi0gICAgaWYgKGJvdW5k
cy5jb250YWluc1BvaW50KHRvQ2xhbXAucDQoKSkpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDQg
PSB0cnVlOwotICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsKLSAgICB9IGVsc2UgaWYgKCEoaW50
ZXJzZWN0Rm9yUG9pbnQ0ID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91
bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAucDQoKSwgcDQpKSkK
LSAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7Ci0KLSAgICAvLyBJZiBvbmx5IG9uZSBvZiB0aGUg
cG9pbnRzIGludGVyc2VjdGVkIG9uIGVpdGhlciB0aGUgdG9wIG9yIGJvdHRvbSBsaW5lIHRoZW4g
d2UKLSAgICAvLyBjYW4gY2xhbXAgdGhlIG90aGVyIHBvaW50IG9uIHRoYXQgbGluZSB0byB0aGUg
Y29ybmVyIG9mIHRoZSBib3VuZHMuCi0gICAgaWYgKCFjb250YWluc1BvaW50MSAmJiBpbnRlcnNl
Y3RGb3JQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MSkgewotICAgICAgICBjb250YWluc1Bv
aW50MSA9IHRydWU7Ci0gICAgICAgIHAxID0gYm91bmRzLnAxKCk7Ci0gICAgfSBlbHNlIGlmICgh
Y29udGFpbnNQb2ludDIgJiYgaW50ZXJzZWN0Rm9yUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2lu
dDIpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVlOwotICAgICAgICBwMiA9IGJvdW5k
cy5wMigpOwotICAgIH0KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQ0ICYmIGludGVyc2VjdEZvclBv
aW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQ0ID0g
dHJ1ZTsKLSAgICAgICAgcDQgPSBib3VuZHMucDQoKTsKLSAgICB9IGVsc2UgaWYgKCFjb250YWlu
c1BvaW50MyAmJiBpbnRlcnNlY3RGb3JQb2ludDQgJiYgIWludGVyc2VjdEZvclBvaW50Mykgewot
ICAgICAgICBjb250YWluc1BvaW50MyA9IHRydWU7Ci0gICAgICAgIHAzID0gYm91bmRzLnAzKCk7
Ci0gICAgfQotCi0gICAgLy8gTm93IHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGhvcml6b250YWwg
Y2xhbXBpbmcgZm9yIHVuYWRqdXN0ZWQgcG9pbnRzLgotICAgIGlmICghY29udGFpbnNQb2ludDIg
JiYgIWludGVyc2VjdEZvclBvaW50MikKLSAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJl
dHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwMSwgcDIsIHAyKTsKLSAgICBp
ZiAoIWNvbnRhaW5zUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQb2ludDMpCi0gICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMigpLCBib3VuZHMucDMoKSwg
cDQsIHAzLCBwMyk7Ci0gICAgaWYgKCFjb250YWluc1BvaW50MSAmJiAhaW50ZXJzZWN0Rm9yUG9p
bnQxKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMu
cDEoKSwgYm91bmRzLnA0KCksIHAxLCBwMiwgcDEpOwotICAgIGlmICghY29udGFpbnNQb2ludDQg
JiYgIWludGVyc2VjdEZvclBvaW50NCkKLSAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJl
dHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wNCgpLCBwNCwgcDMsIHA0KTsKLQotICAg
IHJldHVybiBXZWJDb3JlOjpGbG9hdFF1YWQocDEsIHAyLCBwMywgcDQpOwotfQotCi1zdGF0aWMg
dm9pZCBsYXllclBhdGhXaXRoSG9sZShDQVNoYXBlTGF5ZXIgKmxheWVyLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFF1YWQmIG91dGVyUXVhZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBob2xlUXVh
ZCkKLXsKLSAgICAvLyBOb3RoaW5nIHRvIHNob3cuCi0gICAgaWYgKG91dGVyUXVhZCA9PSBob2xl
UXVhZCB8fCBob2xlUXVhZC5jb250YWluc1F1YWQob3V0ZXJRdWFkKSkgewotICAgICAgICBsYXll
ci5wYXRoID0gTlVMTDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJl
IGlzIGEgbmVnYXRpdmUgbWFyZ2luIC8gcGFkZGluZyB0aGVuIHRoZSBvdXRlciBib3ggbWlnaHQg
bm90Ci0gICAgLy8gZnVsbHkgY29udGFpbiB0aGUgaG9sZSBib3guIEluIHN1Y2ggY2FzZXMgd2Ug
cmVjYWxjdWxhdGUgdGhlIGhvbGUgdG8KLSAgICAvLyBiZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRo
ZSB0d28gcXVhZHMuCi0gICAgV2ViQ29yZTo6RmxvYXRRdWFkIGlubmVySG9sZTsKLSAgICBpZiAo
b3V0ZXJRdWFkLmNvbnRhaW5zUXVhZChob2xlUXVhZCkpCi0gICAgICAgIGlubmVySG9sZSA9IGhv
bGVRdWFkOwotICAgIGVsc2UKLSAgICAgICAgaW5uZXJIb2xlID0gcXVhZEludGVyc2VjdGlvbihv
dXRlclF1YWQsIGhvbGVRdWFkKTsKLQotICAgIC8vIENsb2Nrd2lzZSBpbnNpZGUgcmVjdCAoaG9s
ZSksIENvdW50ZXItQ2xvY2t3aXNlIG91dHNpZGUgcmVjdCAoZmlsbCkuCi0gICAgQ0dNdXRhYmxl
UGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0aE1vdmVUb1Bv
aW50KHBhdGgsIDAsIGlubmVySG9sZS5wMSgpLngoKSwgaW5uZXJIb2xlLnAxKCkueSgpKTsKLSAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDIoKS54KCksIGlubmVy
SG9sZS5wMigpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJI
b2xlLnAzKCkueCgpLCBpbm5lckhvbGUucDMoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KHBhdGgsIDAsIGlubmVySG9sZS5wNCgpLngoKSwgaW5uZXJIb2xlLnA0KCkueSgpKTsKLSAg
ICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDEoKS54KCksIG91dGVyUXVh
ZC5wMSgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFk
LnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50
KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKLSAgICBD
R1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91dGVyUXVh
ZC5wMigpLnkoKSk7Ci0gICAgbGF5ZXIucGF0aCA9IHBhdGg7Ci0gICAgQ0dQYXRoUmVsZWFzZShw
YXRoKTsKLX0KLQotc3RhdGljIHZvaWQgbGF5ZXJQYXRoKENBU2hhcGVMYXllciAqbGF5ZXIsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkKQotewotICAgIENHTXV0YWJsZVBhdGhS
ZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR1BhdGhNb3ZlVG9Qb2ludChw
YXRoLCAwLCBvdXRlclF1YWQucDEoKS54KCksIG91dGVyUXVhZC5wMSgpLnkoKSk7Ci0gICAgQ0dQ
YXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnA0KCkueCgpLCBvdXRlclF1YWQu
cDQoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5w
MygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChw
YXRoLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91dGVyUXVhZC5wMigpLnkoKSk7Ci0gICAgbGF5
ZXIucGF0aCA9IHBhdGg7Ci0gICAgQ0dQYXRoUmVsZWFzZShwYXRoKTsKLX0KLQotLSAodm9pZClf
bGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGln
aHQgb2Zmc2V0Oih1bnNpZ25lZClvZmZzZXQKLXsKLSAgICBBU1NFUlQoW19sYXllcnMgY291bnRd
ID49IG9mZnNldCArIDQpOwotICAgIEFTU0VSVChoaWdobGlnaHQucXVhZHMuc2l6ZSgpID49IG9m
ZnNldCArIDQpOwotICAgIGlmIChbX2xheWVycyBjb3VudF0gPCBvZmZzZXQgKyA0IHx8IGhpZ2hs
aWdodC5xdWFkcy5zaXplKCkgPCBvZmZzZXQgKyA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
QVNoYXBlTGF5ZXIgKm1hcmdpbkxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXRd
OwotICAgIENBU2hhcGVMYXllciAqYm9yZGVyTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4
Om9mZnNldCArIDFdOwotICAgIENBU2hhcGVMYXllciAqcGFkZGluZ0xheWVyID0gW19sYXllcnMg
b2JqZWN0QXRJbmRleDpvZmZzZXQgKyAyXTsKLSAgICBDQVNoYXBlTGF5ZXIgKmNvbnRlbnRMYXll
ciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgM107Ci0KLSAgICBXZWJDb3JlOjpG
bG9hdFF1YWQgbWFyZ2luUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXRdOwotICAgIFdlYkNv
cmU6OkZsb2F0UXVhZCBib3JkZXJRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDFdOwot
ICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBwYWRkaW5nUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZz
ZXQgKyAyXTsKLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgY29udGVudFF1YWQgPSBoaWdobGlnaHQu
cXVhZHNbb2Zmc2V0ICsgM107Ci0KLSAgICBtYXJnaW5MYXllci5maWxsQ29sb3IgPSBjYWNoZWRD
R0NvbG9yKGhpZ2hsaWdodC5tYXJnaW5Db2xvcik7Ci0gICAgYm9yZGVyTGF5ZXIuZmlsbENvbG9y
ID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuYm9yZGVyQ29sb3IpOwotICAgIHBhZGRpbmdMYXll
ci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5wYWRkaW5nQ29sb3IpOwotICAg
IGNvbnRlbnRMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5jb250ZW50
Q29sb3IpOwotCi0gICAgbGF5ZXJQYXRoV2l0aEhvbGUobWFyZ2luTGF5ZXIsIG1hcmdpblF1YWQs
IGJvcmRlclF1YWQpOwotICAgIGxheWVyUGF0aFdpdGhIb2xlKGJvcmRlckxheWVyLCBib3JkZXJR
dWFkLCBwYWRkaW5nUXVhZCk7Ci0gICAgbGF5ZXJQYXRoV2l0aEhvbGUocGFkZGluZ0xheWVyLCBw
YWRkaW5nUXVhZCwgY29udGVudFF1YWQpOwotICAgIGxheWVyUGF0aChjb250ZW50TGF5ZXIsIGNv
bnRlbnRRdWFkKTsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6KGNv
bnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Ci17Ci0gICAgaWYgKCFoaWdobGlnaHQu
cXVhZHMuc2l6ZSgpKSB7Ci0gICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gaGlnaGxpZ2h0LnF1
YWRzLnNpemUoKSAvIDQ7Ci0gICAgW3NlbGYgX2NyZWF0ZUxheWVyczpub2RlQ291bnQgKiA0XTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkKLSAgICAgICAg
W3NlbGYgX2xheW91dEZvck5vZGVIaWdobGlnaHQ6aGlnaGxpZ2h0IG9mZnNldDppICogNF07Ci19
Ci0KLS0gKHZvaWQpX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdo
bGlnaHQmKWhpZ2hsaWdodAotewotICAgIE5TVUludGVnZXIgbnVtTGF5ZXJzID0gaGlnaGxpZ2h0
LnF1YWRzLnNpemUoKTsKLSAgICBpZiAoIW51bUxheWVycykgewotICAgICAgICBbc2VsZiBfcmVt
b3ZlQWxsTGF5ZXJzXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtzZWxmIF9jcmVh
dGVMYXllcnM6bnVtTGF5ZXJzXTsKLQotICAgIENHQ29sb3JSZWYgY29udGVudENvbG9yID0gY2Fj
aGVkQ0dDb2xvcihoaWdobGlnaHQuY29udGVudENvbG9yKTsKLSAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgewotICAgICAgICBDQVNoYXBlTGF5ZXIgKmxheWVy
ID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgbGF5ZXIuZmlsbENvbG9yID0g
Y29udGVudENvbG9yOwotICAgICAgICBsYXllclBhdGgobGF5ZXIsIGhpZ2hsaWdodC5xdWFkc1tp
XSk7Ci0gICAgfQotfQotCi0tICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0
JiloaWdobGlnaHQKLXsKLSAgICBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGlnaGxp
Z2h0VHlwZTo6Tm9kZSB8fCBoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBl
OjpOb2RlTGlzdCkKLSAgICAgICAgW3NlbGYgX2xheW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0Omhp
Z2hsaWdodF07Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGlnaGxp
Z2h0VHlwZTo6UmVjdHMpCi0gICAgICAgIFtzZWxmIF9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDpo
aWdobGlnaHRdOwotfQotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
M2Q3MDVlODNlNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
SW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5o
IgotI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIkFQ
SVVJQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViQXV0b21hdGlvblNlc3Npb24uaCIKLSNpbmNsdWRl
ICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9y
VUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJ
bmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1RleHRFbmNvZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotCi0jaWYgUExB
VEZPUk0oR1RLKQotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY29uc3Qg
dW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dXaWR0aCA9IDUwMDsKLWNv
bnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93SGVpZ2h0ID0gNDAw
OwotCi1jb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRo
ID0gMTAwMDsKLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93
SGVpZ2h0ID0gNjUwOwotCi1XZWJJbnNwZWN0b3JQcm94eTo6V2ViSW5zcGVjdG9yUHJveHkoV2Vi
UGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICA6IG1fY2xv
c2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldl
Ykluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCkK
LSNlbmRpZgotewotICAgIGlmIChpbnNwZWN0ZWRQYWdlICYmIGluc3BlY3RlZFBhZ2UtPmhhc1J1
bm5pbmdQcm9jZXNzKCkpIHsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFn
ZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lu
c3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0
b3JQcm94eTo6fldlYkluc3BlY3RvclByb3h5KCkKLXsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGluc3BlY3Rv
ckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpOwotfQotCi1XZWJQcmVmZXJlbmNlcyYgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yUGFnZS0+cGFn
ZUdyb3VwKCkucHJlZmVyZW5jZXMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW52
YWxpZGF0ZSgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBh
Z2VJRCgpKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgcGxhdGZv
cm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi0vLyBQdWJsaWMgQVBJcwotYm9v
bCBXZWJJbnNwZWN0b3JQcm94eTo6aXNGcm9udCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUlzRnJvbnQo
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nob3dNZXNzYWdl
U2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG93TWVzc2FnZVNlbnQgPSB0cnVlOwot
ICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSB0cnVlOwotCi0gICAgY3JlYXRlRnJvbnRl
bmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXI6Ok5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCksIDApOwot
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93KCkp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93KCkKLXsKLSAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzQ29ubmVjdGVkKCkpIHsK
LSAgICAgICAgYnJpbmdUb0Zyb250KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
b25uZWN0KCk7Ci0KLSAgICAvLyBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGJyaW5nVG9Gcm9udCBz
byBpdCBvcGVucyB0aGUgSW5zcGVjdG9yLgotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQg
PSBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aGlkZSgpCi17Ci0gICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNWaXNpYmxlID0g
ZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybUhpZGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6Y2xvc2UoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6Q2xv
c2UoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpjbG9zZUZvckNyYXNoKCkKLXsKLSAgICBjbG9zZSgpOwotCi0gICAg
cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnJlb3BlbigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNsb3NlKCk7Ci0gICAgc2hvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpyZXNldFN0YXRlKCkKLXsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJ
bnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygp
LmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVy
ZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpOwotICAgIGluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7Ci0gICAgaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLQot
ICAgIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpy
ZXNldCgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkgewotICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFn
ZUlEKCkpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotICAgIH0KLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVBy
b3h5KiBpbnNwZWN0ZWRQYWdlKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLSAg
ICBBU1NFUlQoaW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0
ZWRQYWdlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9p
bnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotCi0gICAgaWYgKG1faW5zcGVjdG9y
UGFnZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6VXBkYXRlQ29ubmVjdGlvbigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmll
cikKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEZyb250ZW5k
Q29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCkpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93UmVzb3VyY2VzKCkKLXsKLSAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdl
KCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U2hvd1Jlc291cmNlcygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd01haW5S
ZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lKQotewotICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsK
LQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93
TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjphdHRhY2hCb3R0b20oKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lk
ZTo6Qm90dG9tKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoUmlnaHQoKQot
ewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6UmlnaHQpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjphdHRhY2hMZWZ0KCkKLXsKLSAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6Okxl
ZnQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2goQXR0YWNobWVudFNpZGUg
c2lkZSkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhY2FuQXR0YWNoKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1faXNBdHRhY2hlZCA9IHRydWU7Ci0gICAgbV9hdHRhY2htZW50
U2lkZSA9IHNpZGU7Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0
b3JBdHRhY2htZW50U2lkZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkpOwotCi0gICAgaWYg
KG1faXNWaXNpYmxlKQotICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7Ci0KLSAgICBzd2l0Y2gg
KG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0g
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0
dGFjaGVkQm90dG9tKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OlJpZ2h0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
QXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcGxhdGZvcm1BdHRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6ZGV0YWNoKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0g
ICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkKGZhbHNlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpTZXRBdHRhY2hlZChmYWxzZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOwotCi0gICAgcGxhdGZvcm1EZXRh
Y2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNl
dEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGhlaWdodCk7Ci0gICAgcGxhdGZvcm1TZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodChoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGluc3BlY3RvclBhZ2VQ
cmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkV2lkdGgod2lkdGgpOwotICAgIHBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZv
cm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0
V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzUHJvZmlsaW5n
UGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3I6OlN0b3BQYWdlUHJvZmlsaW5nKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbnNwZWN0ZWRQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0UGFnZVByb2ZpbGluZygpKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpCi17
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUpIHsKLSAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0
aW9uQ2hhbmdlID0gdHJ1ZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGNvbm5lY3QoKTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKLSAgICB9Ci19Ci0KLWJv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UoY29uc3QgVVJM
JiB1cmwpCi17Ci0gICAgLy8gVXNlIFVSTCBzbyB3ZSBjYW4gY29tcGFyZSB0aGUgcGF0aHMgYW5k
IHByb3RvY29scy4KLSAgICBVUkwgbWFpblBhZ2VVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JQYWdlVVJMKCkpOwotICAgIGlmICh1cmwucHJvdG9jb2woKSA9PSBtYWluUGFn
ZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobWFpblBhZ2VVUkwucGF0aCgpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QgVVJMIGluIFBy
b2R1Y3Rpb24gYnVpbGRzLgotICAgIFN0cmluZyB0ZXN0UGFnZVVSTFN0cmluZyA9IFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIGlmICh0ZXN0UGFnZVVSTFN0
cmluZy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVVJMIHRlc3RQYWdl
VVJMKFVSTCgpLCB0ZXN0UGFnZVVSTFN0cmluZyk7Ci0gICAgcmV0dXJuIHVybC5wcm90b2NvbCgp
ID09IHRlc3RQYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVy
bC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0ZXN0UGFnZVVSTC5wYXRoKCkp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UoKQotewot
ICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVj
dG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0gICAgQVNTRVJUKG1faW5z
cGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG1faW5zcGVjdGVkUGFn
ZSk7Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5z
cGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCAqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wg
dW5kZXJUZXN0KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuaGFzTG9j
YWxGcm9udGVuZCgpKSB7Ci0gICAgICAgIHNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OwotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgp
OwotCi0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkVzdGFibGlzaENvbm5lY3Rpb24obV9pbnNwZWN0ZWRQYWdlLT5p
ZGVudGlmaWVyKCksIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKSwgbV91bmRlclRlc3QsIGluc3Bl
Y3Rpb25MZXZlbCgpKSk7Ci0KLSAgICBBU1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7Ci0gICAg
bV9pc0FjdGl2ZUZyb250ZW5kID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotCi0gICAgaWYgKCFtX3VuZGVy
VGVzdCkgewotICAgICAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFj
aCk7Ci0gICAgICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwotICAgICAg
ICBtX2F0dGFjaG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3BlY3Rv
clBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwotCi0gICAgICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hl
ZChtX2lzQXR0YWNoZWQpKTsKLQotICAgICAgICBpZiAobV9pc0F0dGFjaGVkKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0g
ICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6RGV0YWNoZWQoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwot
ICAgIH0KLQotICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNwZWN0
b3IgYXR0YWNoZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8gdGhl
IF9XS0luc3BlY3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KLSAgICBtX2luc3BlY3RlZFBhZ2Ut
PnVpQ2xpZW50KCkuZGlkQXR0YWNoSW5zcGVjdG9yKCptX2luc3BlY3RlZFBhZ2UsICp0aGlzKTsK
LQotICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjbGllbnQgY2xvc2VkIHRoZSBpbnNwZWN0b3IgZnJv
bSB0aGUgZGVsZWdhdGUgbWV0aG9kLgotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwg
bV91bmRlclRlc3QgPyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKSA6
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6b3BlbigpCi17Ci0gICAgaWYgKG1fdW5kZXJUZXN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaXNPcGVuaW5nKG1faXNPcGVuaW5nLCB0cnVlKTsKLSAgICBt
X2lzVmlzaWJsZSA9IHRydWU7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0KLSAgICBpZiAobV9p
c0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIGVsc2UKLSAgICAgICAg
cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotCi0gICAgcGxhdGZvcm1CcmluZ1RvRnJv
bnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQ2xvc2UoKQotewotICAgIGNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLSAgICBtX2lz
UHJvZmlsaW5nUGFnZSA9IGZhbHNlOwotICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gZmFsc2U7Ci0g
ICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotCi0gICAgdW50cmFja0luc3Bl
Y3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOwotICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQ
YWdlLT5pZGVudGlmaWVyKCkpOwotCi0gICAgaWYgKG1faXNBY3RpdmVGcm9udGVuZCkgewotICAg
ICAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSBmYWxzZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotCi0g
ICAgLy8gTnVsbCBvdXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVyIHBsYXRmb3JtRGV0YWNoKCksIHNv
IHRoZSB2aWV3cyBjYW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0bHkuCi0gICAgbV9pbnNwZWN0b3JQ
YWdlID0gbnVsbHB0cjsKLQotICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fY2FuQXR0
YWNoID0gZmFsc2U7Ci0gICAgbV91bmRlclRlc3QgPSBmYWxzZTsKLQotICAgIHBsYXRmb3JtQ2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2Fn
ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8q
IGF1dG9tYXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bv
b2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQotICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+aW5z
cGVjdG9yRnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVkUGFnZSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbCB0ZWxscyB1cyB0byBkbyB0aGlzIG9uIGxvYWQuIFdlIHdhbnQg
dG8KLSAgICAvLyBpZ25vcmUgaXQgb25jZSBpZiB3ZSBvbmx5IHdhbnRlZCB0byBjb25uZWN0LiBU
aGlzIGFsbG93cyB0aGUgSW5zcGVjdG9yIHRvIGxhdGVyCi0gICAgLy8gcmVxdWVzdCB0byBiZSBi
cm91Z2h0IHRvIHRoZSBmcm9udCB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQgb3Igc29tZSBvdGhl
ciBhY3Rpb24uCi0gICAgaWYgKG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQpIHsKLSAgICAgICAg
bV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgp
OwotICAgIGVsc2UKLSAgICAgICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpicmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBwbGF0Zm9ybUJyaW5nSW5zcGVj
dGVkUGFnZVRvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBib29sIHByZXZpb3VzQ2Fu
QXR0YWNoID0gbV9jYW5BdHRhY2g7Ci0KLSAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0
YWNoKGF2YWlsYWJsZSk7Ci0KLSAgICBpZiAocHJldmlvdXNDYW5BdHRhY2ggPT0gbV9jYW5BdHRh
Y2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2luc3BlY3RvclBhZ2UgJiYgIW1fdW5k
ZXJUZXN0KQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0KLSAgICBwbGF0
Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQotewotICAgIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNh
dGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUo
Y2VydGlmaWNhdGVJbmZvKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZWxlbWVudFNl
bGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9lbGVtZW50U2VsZWN0aW9uQWN0
aXZlID0gYWN0aXZlOwotCi0gICAgaWYgKG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSkg
ewotICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aXZlKQotICAgICAgICBwbGF0Zm9ybUJyaW5nSW5zcGVj
dGVkUGFnZVRvRnJvbnQoKTsKLSAgICBlbHNlIGlmIChpc0Nvbm5lY3RlZCgpKQotICAgICAgICBi
cmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIG1faXNQcm9maWxpbmdQYWdlID0gYWN0
aXZlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLXsKLSNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2luc3BlY3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlk
ZShlbmFibGVkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2VuZGlmCi19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
KGJvb2wgYXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUpLCBtX2luc3BlY3RvclBh
Z2UtPndlYlBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGF2YWlsYWJsZSk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBm
b3JjZVNhdmVBcykKLXsKLSAgICBwbGF0Zm9ybVNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2
NEVuY29kZWQsIGZvcmNlU2F2ZUFzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXBw
ZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAg
ICBwbGF0Zm9ybUFwcGVuZChmaWxlbmFtZSwgY29udGVudCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVj
dG9yUHJveHk6OnNob3VsZE9wZW5BdHRhY2hlZCgpCi17Ci0gICAgcmV0dXJuIGluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkgJiYgY2FuQXR0YWNoKCk7
Ci19Ci0KLS8vIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGNhbiB1c2UgdGhlIHN0dWJzIHBy
b3ZpZGVkIGhlcmUuCi0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAh
UExBVEZPUk0oV0lOKQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVG
cm9udGVuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9u
dCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
VVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVp
Z2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi11bnNp
Z25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9y
UHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYjFmZGZjYTFkZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5j
bHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
Ci0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykK
LSNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNfQ0xBU1MgTlNW
aWV3OwotT0JKQ19DTEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JQcm94
eU9iakNBZGFwdGVyOwotT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOwotI2Vs
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGll
bnQ7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcmVmZXJlbmNlczsKLQotZW51bSBj
bGFzcyBBdHRhY2htZW50U2lkZSB7Ci0gICAgQm90dG9tLAotICAgIFJpZ2h0LAotICAgIExlZnQs
Ci19OwotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eQotICAgIDogcHVibGljIEFQSTo6T2JqZWN0
SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SW5zcGVjdG9yPgotICAgICwgcHVibGljIElQQzo6TWVz
c2FnZVJlY2VpdmVyCi0gICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKLSNp
ZiBQTEFURk9STShXSU4pCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3Rl
bmVyCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclByb3h5
PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yUHJveHkoaW5zcGVjdGVkUGFnZSkpOwotICAg
IH0KLQotICAgIH5XZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7
Ci0KLSAgICAvLyBQdWJsaWMgQVBJcwotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQotICAgIFdlYlBhZ2VQcm94eSogaW5z
cGVjdG9yUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsgfQotCi0gICAgYm9v
bCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQYWdlOyB9Ci0gICAg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQotICAgIGJvb2wg
aXNGcm9udCgpOwotCi0gICAgdm9pZCBjb25uZWN0KCk7Ci0KLSAgICB2b2lkIHNob3coKTsKLSAg
ICB2b2lkIGhpZGUoKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdm9pZCBjbG9zZUZvckNyYXNo
KCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLQotICAgIHZv
aWQgcmVzZXQoKTsKLSAgICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94
eSopOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGVudW0gY2xhc3MgSW5zcGVjdGlvblRhcmdl
dFR5cGUgeyBMb2NhbCwgUmVtb3RlIH07Ci0gICAgc3RhdGljIFJldGFpblB0cjxOU1dpbmRvdz4g
Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25U
YXJnZXRUeXBlKTsKLQotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25z
dDsKLSAgICB2b2lkIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0ID0gMCk7Ci0g
ICAgdm9pZCB3aW5kb3dGcmFtZURpZENoYW5nZSgpOwotICAgIHZvaWQgd2luZG93RnVsbFNjcmVl
bkRpZENoYW5nZSgpOwotICAgIE5TV2luZG93KiBpbnNwZWN0b3JXaW5kb3coKSBjb25zdCB7IHJl
dHVybiBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsgfQotCi0gICAgdm9pZCBjbG9zZUZyb250ZW5k
UGFnZSgpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQo
KTsKLQotICAgIHZvaWQgYXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBO
U1ZpZXcgKm5ld1ZpZXcpOwotICAgIHZvaWQgYXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhO
U1dpbmRvdyAqb2xkV2luZG93KTsKLSAgICB2b2lkIGF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3co
TlNXaW5kb3cgKm5ld1dpbmRvdyk7Ci0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNo
ZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKEdUSykKLSAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXcoKSBjb25zdCB7IHJldHVy
biBtX2luc3BlY3RvclZpZXc7IH07Ci0gICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzaG93Q29u
c29sZSgpOwotICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOwotICAgIHZvaWQgc2hvd01haW5SZXNv
dXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqKTsKLQotICAgIEF0dGFjaG1lbnRTaWRlIGF0dGFj
aG1lbnRTaWRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2lkZTsgfQotICAgIGJvb2wg
aXNBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRhY2hlZDsgfQotICAgIHZvaWQgYXR0
YWNoUmlnaHQoKTsKLSAgICB2b2lkIGF0dGFjaExlZnQoKTsKLSAgICB2b2lkIGF0dGFjaEJvdHRv
bSgpOwotICAgIHZvaWQgYXR0YWNoKEF0dGFjaG1lbnRTaWRlID0gQXR0YWNobWVudFNpZGU6OkJv
dHRvbSk7Ci0gICAgdm9pZCBkZXRhY2goKTsKLQotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25l
ZCk7Ci0KLSAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LQotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7Ci0KLSAgICBib29sIGlzUHJvZmlsaW5nUGFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQcm9maWxpbmdQYWdlOyB9Ci0gICAgdm9pZCB0b2dnbGVQ
YWdlUHJvZmlsaW5nKCk7Ci0KLSAgICBib29sIGlzRWxlbWVudFNlbGVjdGlvbkFjdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZTsgfQotICAgIHZvaWQgdG9nZ2xl
RWxlbWVudFNlbGVjdGlvbigpOwotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fdW5kZXJUZXN0OyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlKGJvb2wpOwotCi0gICAgLy8gUHJvdmlkZWQgYnkgcGxhdGZvcm0gV2ViSW5zcGVjdG9yUHJv
eHkgaW1wbGVtZW50YXRpb25zLgotICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVSTCgp
OwotICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKLSAgICBzdGF0aWMg
U3RyaW5nIGluc3BlY3RvckJhc2VVUkwoKTsKLSAgICBzdGF0aWMgYm9vbCBpc01haW5PclRlc3RJ
bnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBEZWJ1Z2dhYmxlSW5mb0RhdGEg
aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1p
bmltdW1XaW5kb3dXaWR0aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdpbmRv
d0hlaWdodDsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93V2lkdGg7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWlnaHQ7Ci0KLXByaXZh
dGU6Ci0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5Kik7Ci0KLSAg
ICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
LQotICAgIC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLSAgICBDb25uZWN0
aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbm5lY3Rp
b25UeXBlOjpMb2NhbDsgfQotCi0gICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250
ZW5kUGFnZSgpOwotICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotICAg
IHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotCi0gICAgdm9pZCBw
bGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKLSAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgp
OwotICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5n
VG9Gcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUhpZGUoKTsKLSAgICBib29sIHBsYXRmb3JtSXNGcm9udCgpOwot
ICAgIHZvaWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZv
aWQgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7
Ci0gICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKTsKLSAgICB1bnNp
Z25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUF0
dGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXRhY2goKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRv
d0RyYWcoKTsKLSAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVB
cyk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgcGxhdGZv
cm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKLSNlbHNlCi0gICAgYm9vbCBw
bGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsgcmV0dXJuIHdlYlBy
b2Nlc3NDYW5BdHRhY2g7IH0KLSNlbmRpZgotCi0gICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3Rv
clByb3h5IG1lc3NhZ2VzCi0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29s
IGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpOwotICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0
aW9uKElQQzo6QXR0YWNobWVudCk7Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLSAgICB2b2lkIGRpZENs
b3NlKCk7Ci0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLSAgICB2b2lkIGJyaW5nSW5zcGVjdGVk
UGFnZVRvRnJvbnQoKTsKLSAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7
Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
c2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAgIHZv
aWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCB0aW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
T3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29s
IGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpOwotCi0gICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7IHJl
dHVybiBtX2NhbkF0dGFjaDsgfQotICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0KLSAg
ICB2b2lkIG9wZW4oKTsKLQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Owot
Ci0gICAgV2ViUHJlZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0Owot
Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCi0gICAgdm9pZCB1cGRhdGVJbnNw
ZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0g
ICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7Ci0gICAgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgdm9pZCB3aW5kb3dS
ZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92ZXJyaWRlOwotI2Vu
ZGlmCi0KLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51bGxwdHIgfTsKLSAg
ICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKLQotICAgIGJvb2wg
bV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9pc0F0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fY2FuQXR0YWNoIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fc2hvd01lc3NhZ2VTZW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRmlyc3RCcmlu
Z1RvRnJvbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2lzT3BlbmluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQWN0aXZl
RnJvbnRlbmQgeyBmYWxzZSB9OwotCi0gICAgQXR0YWNobWVudFNpZGUgbV9hdHRhY2htZW50U2lk
ZSB7QXR0YWNobWVudFNpZGU6OkJvdHRvbX07Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0
YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXI7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRvdzsKLSAgICBSZXRh
aW5QdHI8V0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOwotICAg
IEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJM
TWFwOwotICAgIFJ1bkxvb3A6OlRpbWVyPFdlYkluc3BlY3RvclByb3h5PiBtX2Nsb3NlRnJvbnRl
bmRBZnRlckluYWN0aXZpdHlUaW1lcjsKLSAgICBTdHJpbmcgbV91cmxTdHJpbmc7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OwotICAgIGJvb2wgbV9pc09ic2VydmluZ0NvbnRl
bnRMYXlvdXRSZWN0IHsgZmFsc2UgfTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+IG1fY2xpZW50OwotICAgIEd0a1dpZGdl
dCogbV9pbnNwZWN0b3JWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV9pbnNwZWN0
b3JXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX2hlYWRlckJhciB7IG51bGxw
dHIgfTsKLSAgICBTdHJpbmcgbV9pbnNwZWN0ZWRVUkxTdHJpbmc7Ci0jZWxpZiBQTEFURk9STShX
SU4pCi0gICAgSFdORCBtX2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdO
RCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2lu
c3BlY3RvclZpZXdXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2luc3BlY3RvckRldGFj
aFdpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8V2ViVmlldz4gbV9pbnNwZWN0b3JWaWV3
OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjc3NTUzYzZiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yUHJveHkgewotICAgIE9wZW5M
b2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKLSAg
ICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlm
aWVyKQotCi0gICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCi0KLSAgICBG
cm9udGVuZExvYWRlZCgpCi0gICAgRGlkQ2xvc2UoKQotICAgIEJyaW5nVG9Gcm9udCgpCi0gICAg
QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi0gICAgUmVvcGVuKCkKLSAgICBSZXNldFN0YXRl
KCkKLQotICAgIEluc3BlY3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmluZykKLSAgICBTaG93
Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKLSAg
ICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLSAgICBUaW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi0gICAgU2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi0KLSAgICBTYXZlKFN0cmluZyBmaWxl
bmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVB
cykKLSAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKLQotICAgIEF0
dGFjaEJvdHRvbSgpCi0gICAgQXR0YWNoUmlnaHQoKQotICAgIEF0dGFjaExlZnQoKQotICAgIERl
dGFjaCgpCi0KLSAgICBBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQot
Ci0gICAgU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotICAgIFNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi0KLSAgICBTZXRTaGVldFJlY3QoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCi0KLSAgICBTdGFydFdpbmRvd0RyYWcoKQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZWExNWVlNjU3Li4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlICJBUElQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi10eXBlZGVmIEhhc2hNYXA8
V2ViUGFnZVByb3h5KiwgdW5zaWduZWQ+IFBhZ2VMZXZlbE1hcDsKLQotc3RhdGljIFBhZ2VMZXZl
bE1hcCYgcGFnZUxldmVsTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUxl
dmVsTWFwPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdW5zaWduZWQgaW5zcGVjdG9yTGV2
ZWxGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICBpZiAocGFnZSkgewotICAgICAg
ICBhdXRvIGZpbmRSZXN1bHQgPSBwYWdlTGV2ZWxNYXAoKS5maW5kKHBhZ2UpOwotICAgICAgICBp
ZiAoZmluZFJlc3VsdCAhPSBwYWdlTGV2ZWxNYXAoKS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBmaW5kUmVzdWx0LT52YWx1ZSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLVN0
cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqIHBh
Z2UpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIl9fV2ViSW5zcGVjdG9yUGFnZUdyb3VwTGV2
ZWwiLCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UocGFnZSksICJfXyIpOwotfQotCi12b2lkIHRyYWNr
SW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSog
aW5zcGVjdGVkUGFnZSkKLXsKLSAgICBwYWdlTGV2ZWxNYXAoKS5zZXQoaW5zcGVjdG9yUGFnZSwg
aW5zcGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UpKTsKLX0KLQotdm9pZCB1bnRyYWNr
SW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UpCi17Ci0gICAgcGFnZUxl
dmVsTWFwKCkucmVtb3ZlKGluc3BlY3RvclBhZ2UpOwotfQotCi1zdGF0aWMgV2ViUHJvY2Vzc1Bv
b2wqIHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sOwotc3RhdGljIFdlYlByb2Nlc3NQb29sKiBz
X25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sOwotCi1XZWJQcm9jZXNzUG9vbCYgaW5zcGVjdG9y
UHJvY2Vzc1Bvb2wodW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAgIC8vIEhhdmluZyBv
dXIgb3duIHByb2Nlc3MgcG9vbCByZW1vdmVzIHVzIGZyb20gdGhlIG1haW4gcHJvY2VzcyBwb29s
IGFuZAotICAgIC8vIGd1YXJhbnRlZXMgbm8gcHJvY2VzcyBzaGFyaW5nIGZvciBvdXIgdXNlciBp
bnRlcmZhY2UuCi0gICAgV2ViUHJvY2Vzc1Bvb2wqJiBwb29sID0gKGluc3BlY3Rpb25MZXZlbCA9
PSAxKSA/IHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sIDogc19uZXN0ZWRJbnNwZWN0b3JQcm9j
ZXNzUG9vbDsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgYXV0byBjb25maWd1cmF0aW9uID0g
QVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICBwb29sID0g
JldlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbi5nZXQoKSkubGVha1JlZigpOwot
ICAgICAgICAvLyBEbyBub3QgZGVsYXkgcHJvY2VzcyBsYXVuY2ggZm9yIGluc3BlY3RvciBwYWdl
cyBhcyBpbnNwZWN0b3IgcGFnZXMgZG8gbm90IGtub3cgaG93IHRvIHRyYW5zaXRpb24gZnJvbSBh
IHRlcm1pbmF0ZWQgcHJvY2Vzcy4KLSAgICAgICAgcG9vbC0+ZGlzYWJsZURlbGF5ZWRXZWJQcm9j
ZXNzTGF1bmNoKCk7Ci0gICAgfQotICAgIHJldHVybiAqcG9vbDsKLX0KLQotYm9vbCBpc0luc3Bl
Y3RvclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1
cm4gKHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sICYmIHNfbWFpbkluc3BlY3RvclByb2Nlc3NQ
b29sID09ICZwcm9jZXNzUG9vbCkKLSAgICAgICAgfHwgKHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vz
c1Bvb2wgJiYgc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCA9PSAmcHJvY2Vzc1Bvb2wpOwot
fQotCi1ib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCi17Ci0gICAg
cmV0dXJuIHBhZ2VMZXZlbE1hcCgpLmNvbnRhaW5zKCZ3ZWJQYWdlKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNw
ZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0
aWxpdGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTllYTc1ODhjYy4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0
aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlByb2Nlc3NQb29sOwotCi0v
LyBUaGUgaW5zcGVjdG9yIHBhZ2UgZ3JvdXBzIGFyZSB1c2VkIHRvIGdpdmUgZGlmZmVyZW50IHBy
ZWZlcmVuY2VzIHRvIGVhY2gKLS8vIGluc3BlY3RvciBsZXZlbCBieSBzZXR0aW5nIGEgcGVyLWxl
dmVsIHBhZ2UgZ3JvdXAgaWRlbnRpZmllci4KLXVuc2lnbmVkIGluc3BlY3RvckxldmVsRm9yUGFn
ZShXZWJQYWdlUHJveHkqKTsKLVN0cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9y
UGFnZShXZWJQYWdlUHJveHkqKTsKLXZvaWQgdHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94
eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKTsKLXZvaWQgdW50
cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKTsKLQotV2ViUHJv
Y2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7
Ci1ib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKTsKLWJvb2wgaXNJ
bnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJlYmJkZjg3YWNlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlRGVidWdnYWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgotCi0jaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLVdlYlBh
Z2VEZWJ1Z2dhYmxlOjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAg
OiBtX3BhZ2UocGFnZSkKLXsKLX0KLQotU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpuYW1lKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gbV9uYW1lT3ZlcnJpZGU7Ci0KLSAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUoKS0+dGl0
bGUoKTsKLX0KLQotU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwoKSBjb25zdAotewotICAg
IGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gV1RGOjpibGFua1VSTCgp
LnN0cmluZygpOwotCi0gICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWluRnJhbWUoKS0+dXJsKCku
c3RyaW5nKCk7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEY6OmJs
YW5rVVJMKCkuc3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gdXJsOwotfQotCi1ib29sIFdlYlBhZ2VE
ZWJ1Z2dhYmxlOjpoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdl
Lmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7Ci19Ci0KLXZvaWQgV2Vi
UGFnZURlYnVnZ2FibGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsLCBib29sIGlz
QXV0b21hdGljQ29ubmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNlKQotewotICAgIG1fcGFn
ZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5uZWwsIGlzQXV0b21h
dGljQ29ubmVjdGlvbiwgaW1tZWRpYXRlbHlQYXVzZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZURlYnVn
Z2FibGU6OmRpc2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQotewotICAgIG1fcGFn
ZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOwotfQot
Ci12b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRp
c3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJQYWdlRGVi
dWdnYWJsZTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCi17Ci0gICAgbV9wYWdlLmlu
c3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOwotfQotCi12b2lk
IFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIG1fbmFtZU92ZXJyaWRlID0gbmFtZTsKLSAgICB1cGRhdGUoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Zjg0OGRlMTE2YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdGlvblRhcmdldC5oPgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5
OwotCi1jbGFzcyBXZWJQYWdlRGVidWdnYWJsZSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rpb25UYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VEZWJ1Z2dhYmxlKTsKLXB1YmxpYzoKLSAgICBX
ZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmKTsKLSAgICB+V2ViUGFnZURlYnVnZ2FibGUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpSZW1vdGVDb250cm9s
bGFibGVUYXJnZXQ6OlR5cGU6OldlYlBhZ2U7IH0KLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3Qg
ZmluYWw7Ci0gICAgU3RyaW5nIHVybCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaGFzTG9jYWxE
ZWJ1Z2dlcigpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBp
bW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIGZpbmFsOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIGZpbmFsOwotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdl
RnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOwotICAgIHZvaWQgc2V0SW5k
aWNhdGluZyhib29sKSBmaW5hbDsKLQotICAgIGNvbnN0IFN0cmluZyYgbmFtZU92ZXJyaWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7IH0KLSAgICB2b2lkIHNldE5hbWVPdmVycmlk
ZShjb25zdCBTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsK
LSAgICBTdHJpbmcgbV9uYW1lT3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DT05UUk9MTEFCTEVfVEFSR0VUKFdlYktpdDo6V2Vi
UGFnZURlYnVnZ2FibGUsIFdlYlBhZ2UpOwotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZTI4YmY3
MTYzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgotCi0jaW5jbHVk
ZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0j
aW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi1zdGF0aWMgU3RyaW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVBy
b3h5JiBwcm92aXNpb25hbFBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQ6OnRvVGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKLX0KLQotV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQ
cm94eSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZFJvdXRlcihG
cm9udGVuZFJvdXRlcjo6Y3JlYXRlKCkpCi0gICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQotewotICAg
IGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldEFnZW50PihtX2Zy
b250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKLQotICAgIG1f
dGFyZ2V0QWdlbnQgPSB0YXJnZXRBZ2VudC5nZXQoKTsKLQotICAgIG1fYWdlbnRzLmFwcGVuZChX
VEZNb3ZlKHRhcmdldEFnZW50KSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OmluaXQoKQotewotICAgIFN0cmluZyBwYWdlVGFyZ2V0SWQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG1fcGFnZS53ZWJQYWdlSUQoKSk7Ci0gICAgY3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQ
YWdlKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6cGFnZUNsb3NlZCgp
Ci17Ci0gICAgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOwotCi0gICAgbV9hZ2VudHMuZGlzY2Fy
ZFZhbHVlcygpOwotfQotCi1ib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNMb2Nh
bEZyb250ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcm9udGVuZFJvdXRlci0+aGFzTG9j
YWxGcm9udGVuZCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjb25u
ZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCwg
Ym9vbCwgYm9vbCkKLXsKLSAgICBib29sIGNvbm5lY3RpbmdGaXJzdEZyb250ZW5kID0gIW1fZnJv
bnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci0+Y29u
bmVjdEZyb250ZW5kKGZyb250ZW5kQ2hhbm5lbCk7Ci0KLSAgICBpZiAoY29ubmVjdGluZ0ZpcnN0
RnJvbnRlbmQpCi0gICAgICAgIG1fYWdlbnRzLmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCgm
bV9mcm9udGVuZFJvdXRlci5nZXQoKSwgJm1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwotCi0g
ICAgbV9wYWdlLmRpZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRl
ci0+ZnJvbnRlbmRDb3VudCgpKTsKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAg
IGlmIChoYXNMb2NhbEZyb250ZW5kKCkpCi0gICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJ
bmZvcm1hdGlvbkRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZChGcm9udGVuZENoYW5uZWwmIGZyb250ZW5k
Q2hhbm5lbCkKLXsKLSAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0RnJvbnRlbmQoZnJv
bnRlbmRDaGFubmVsKTsKLQotICAgIGJvb2wgZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCA9ICFt
X2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKLSAgICBpZiAoZGlzY29ubmVjdGluZ0xh
c3RGcm9udGVuZCkKLSAgICAgICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdG9yRGVzdHJveWVkKTsKLQotICAgIG1fcGFnZS5k
aWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5k
Q291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBpZiAoZGlzY29u
bmVjdGluZ0xhc3RGcm9udGVuZCkKLSAgICAgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9y
bWF0aW9uRGlkQ2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlzY29ubmVjdEFsbEZyb250ZW5kcygpCi17Ci0gICAgLy8gRklYTUU6IEhhbmRs
ZSBhIGxvY2FsIGluc3BlY3RvciBjbGllbnQuCi0KLSAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXIt
Pmhhc0Zyb250ZW5kcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOb3RpZnkgYWdlbnRz
IGZpcnN0LCBzaW5jZSB0aGV5IG1heSBuZWVkIHRvIHVzZSBJbnNwZWN0b3JDbGllbnQuCi0gICAg
bV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6
SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsKLQotICAgIC8vIERpc2Nvbm5lY3QgYW55IHJlbWFp
bmluZyByZW1vdGUgZnJvbnRlbmRzLgotICAgIG1fZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RB
bGxGcm9udGVuZHMoKTsKLQotICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENv
dW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKLSAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRD
aGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPmRpc3BhdGNoKG1lc3NhZ2UpOwotfQotCi0jaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJ
bmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKLXsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBtX3BhZ2Uuc2V0SW5kaWNhdGluZyhpbmRpY2F0aW5nKTsKLSNlbHNlCi0gICAgaWYgKGlu
ZGljYXRpbmcpCi0gICAgICAgIG1fcGFnZS5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOwotICAg
IGVsc2UKLSAgICAgICAgbV9wYWdlLmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Ci0jZW5kaWYK
LX0KLSNlbmRpZgotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNw
ZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlIHR5cGUpCi17Ci0gICAgYWRkVGFyZ2V0KEluc3BlY3RvclRhcmdldFByb3h5Ojpj
cmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQpCi17Ci0gICAgYXV0byBpdCA9IG1fdGFyZ2V0cy5maW5kKHRhcmdldElkKTsKLSAgICBpZiAo
aXQgPT0gbV90YXJnZXRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV90YXJnZXRBZ2Vu
dC0+dGFyZ2V0RGVzdHJveWVkKCppdC0+dmFsdWUpOwotICAgIG1fdGFyZ2V0cy5yZW1vdmUoaXQp
OwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5z
cGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRl
bmQodGFyZ2V0SWQsIG1lc3NhZ2UpOwotfQotCi1ib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpzaG91bGRQYXVzZUxvYWRpbmcoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zp
c2lvbmFsUGFnZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250
ZW5kcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiB0YXJnZXQgPSBtX3Rh
cmdldHMuZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOwotICAgIEFTU0VSVCh0YXJn
ZXQpOwotICAgIHJldHVybiB0YXJnZXQtPmlzUGF1c2VkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKGNvbnN0IFByb3Zp
c2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
IGNhbGxiYWNrKQotewotICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQoZ2V0VGFyZ2V0
SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci0gICAgQVNTRVJUKHRhcmdldCk7Ci0gICAgdGFyZ2V0LT5z
ZXRSZXN1bWVDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBh
Z2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJn
ZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQ
YWdlKSwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7Ci19Ci0KLXZvaWQg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNv
bnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCi17Ci0gICAgZGVzdHJv
eUluc3BlY3RvclRhcmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKLX0KLQotdm9p
ZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXIgbmV3V2ViUGFnZUlEKQotewotICAgIFN0cmluZyBvbGRJRCA9IFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQ6OnRvVGFyZ2V0SUQob2xkV2ViUGFnZUlEKTsKLSAgICBTdHJpbmcgbmV3SUQgPSBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7Ci0gICAgYXV0byBu
ZXdUYXJnZXQgPSBtX3RhcmdldHMudGFrZShuZXdJRCk7Ci0gICAgQVNTRVJUKG5ld1RhcmdldCk7
Ci0gICAgbmV3VGFyZ2V0LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOwotICAgIG1fdGFy
Z2V0QWdlbnQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBuZXdJRCk7Ci0KLSAg
ICAvLyBXZSd2ZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5kIHdpbGwgbm90IHJl
Y2VpdmUgYW55IG1lc3NhZ2UgZnJvbSBpdCwgc28KLSAgICAvLyB3ZSBkZXN0cm95IGV2ZXJ5dGhp
bmcgYnV0IHRoZSBuZXcgdGFyZ2V0IGhlcmUuCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtp
dC5vcmcvYi8yMDI5Mzc+IGRvIG5vdCBkZXN0cm95IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhl
IGNvbW1pdHRlZCBwYWdlLgotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVl
cygpKQotICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7Ci0g
ICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV90YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50
aWZpZXIoKSwgV1RGTW92ZShuZXdUYXJnZXQpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcjo6YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94
eT4mJiB0YXJnZXQpCi17Ci0gICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0Q3JlYXRlZCgqdGFyZ2V0
KTsKLSAgICBtX3RhcmdldHMuc2V0KHRhcmdldC0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKHRhcmdl
dCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3OGNhZWRmMGMwYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFByb3h5LmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgQmFja2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBG
cm9udGVuZENoYW5uZWw7Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcik7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIo
V2ViUGFnZVByb3h5Jik7Ci0KLSAgICB2b2lkIGluaXQoKTsKLSAgICB2b2lkIHBhZ2VDbG9zZWQo
KTsKLQotICAgIGJvb2wgaGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0OwotCi0gICAgdm9pZCBjb25u
ZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGlj
SW5zcGVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSk7Ci0gICAg
dm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKLSAg
ICB2b2lkIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSNpZiBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKLSAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCk7Ci0jZW5kaWYKLQot
ICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgdm9pZCBkZXN0cm95SW5zcGVjdG9y
VGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0lu
c3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0KLSAgICBib29sIHNob3VsZFBhdXNlTG9hZGluZyhjb25zdCBQcm92aXNpb25hbFBh
Z2VQcm94eSYpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGludWVMb2FkaW5nQ2FsbGJhY2soY29u
c3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7Ci0KLSAg
ICB2b2lkIGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYpOwot
ICAgIHZvaWQgd2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlzaW9uYWxQYWdl
UHJveHkmKTsKLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBh
Z2VJRCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPElu
c3BlY3RvclRhcmdldFByb3h5PiYmKTsKLQotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAg
IFJlZjxJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91dGVyOwotICAgIFJl
ZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotICAg
IEluc3BlY3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKLSAgICBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldEFnZW50KiBtX3RhcmdldEFnZW50OwotICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2ds
aWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDlkNTBkYzI4NmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgotCi0j
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5m
by5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yVXRpbHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgot
ICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9y
Q2xpZW50LCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotICAgICAg
ICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQotICAgICAgICAs
IG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgLCBtX2Nvbm5lY3Rp
b25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkKLSAgICB7
Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICB9Ci0KLSAgICB+UmVtb3Rl
SW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KG51bGxw
dHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBs
b2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1
MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0
YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1Z2dhYmxlSW5mbyA9
IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkp
OwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUoSW5zcGVjdG9yOjpE
ZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZSk7Ci0gICAgICAgIG1fcHJveHktPmxvYWQoV1RGTW92ZShk
ZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21tYW5kc1VSTCgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2hvdygp
OwotICAgIH0KLQotICAgIHZvaWQgc2V0VGFyZ2V0TmFtZShjb25zdCBDU3RyaW5nJiBuYW1lKQot
ICAgIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIG1fcHJveHktPnVwZGF0ZVdpbmRvd1Rp
dGxlKG5hbWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
bV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1f
dGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQo
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJv
bnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7Ci0gICAgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLSAgICB1aW50NjRfdCBtX2Nvbm5lY3Rpb25J
RDsKLSAgICB1aW50NjRfdCBtX3RhcmdldElEOwotfTsKLQotY29uc3QgU29ja2V0Q29ubmVjdGlv
bjo6TWVzc2FnZUhhbmRsZXJzJiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Om1lc3NhZ2VIYW5kbGVy
cygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFNvY2tldENvbm5lY3Rpb246
Ok1lc3NhZ2VIYW5kbGVycz4gbWVzc2FnZUhhbmRsZXJzID0gU29ja2V0Q29ubmVjdGlvbjo6TWVz
c2FnZUhhbmRsZXJzKHsKLSAgICB7ICJEaWRDbG9zZSIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2Nr
ZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9LAotICAgICAgICBbXShTb2NrZXRD
b25uZWN0aW9uJiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAg
YXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJE
YXRhKTsKLSAgICAgICAgICAgIGNsaWVudC5jb25uZWN0aW9uRGlkQ2xvc2UoKTsKLSAgICAgICAg
fX0KLSAgICB9LAotICAgIHsgIkRpZFNldHVwSW5zcGVjdG9yQ2xpZW50Iiwgc3RkOjpwYWlyPENT
dHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKGF5KSIsCi0gICAg
ICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIg
dXNlckRhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1v
dGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBHUmVmUHRyPEdWYXJp
YW50PiBiYWNrZW5kQ29tbWFuZHNWYXJpYW50OwotICAgICAgICAgICAgZ192YXJpYW50X2dldChw
YXJhbWV0ZXJzLCAiKEBheSkiLCAmYmFja2VuZENvbW1hbmRzVmFyaWFudC5vdXRQdHIoKSk7Ci0g
ICAgICAgICAgICBjbGllbnQuc2V0QmFja2VuZENvbW1hbmRzKGdfdmFyaWFudF9nZXRfYnl0ZXN0
cmluZyhiYWNrZW5kQ29tbWFuZHNWYXJpYW50LmdldCgpKSk7Ci0gICAgICAgIH19Ci0gICAgfSwK
LSAgICB7ICJTZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rp
b246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHRhKHRzc3NiKSkiLAotICAgICAgICBbXShTb2NrZXRD
b25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0g
ICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQ7Ci0gICAg
ICAgICAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gaXRlcjsKLSAgICAgICAgICAgIGdf
dmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0YSh0c3NzYikpIiwgJmNvbm5lY3Rpb25JRCwgJml0
ZXIub3V0UHRyKCkpOwotICAgICAgICAgICAgc2l6ZV90IHRhcmdldENvdW50ID0gZ192YXJpYW50
X2l0ZXJfbl9jaGlsZHJlbihpdGVyLmdldCgpKTsKLSAgICAgICAgICAgIFZlY3RvcjxSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OlRhcmdldD4gdGFyZ2V0TGlzdDsKLSAgICAgICAgICAgIHRhcmdldExp
c3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0YXJnZXRDb3VudCk7Ci0gICAgICAgICAgICBndWlu
dDY0IHRhcmdldElEOwotICAgICAgICAgICAgY29uc3QgY2hhciogdHlwZTsKLSAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB1cmw7Ci0gICAgICAg
ICAgICBnYm9vbGVhbiBoYXNMb2NhbERlYnVnZ2VyOwotICAgICAgICAgICAgd2hpbGUgKGdfdmFy
aWFudF9pdGVyX2xvb3AoaXRlci5nZXQoKSwgIih0JnMmcyZzYikiLCAmdGFyZ2V0SUQsICZ0eXBl
LCAmbmFtZSwgJnVybCwgJmhhc0xvY2FsRGVidWdnZXIpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFnX3N0cmNtcDAodHlwZSwgIldlYiIpIHx8ICFnX3N0cmNtcDAodHlwZSwgIkphdmFTY3JpcHQi
KSkKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGlzdC51bmNoZWNrZWRBcHBlbmQoeyB0YXJn
ZXRJRCwgdHlwZSwgbmFtZSwgdXJsIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xp
ZW50LnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKLSAg
ICAgICAgfX0KLSAgICB9LAotICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCIsIHN0ZDo6cGFp
cjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0dHMpIiwK
LSAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9p
bnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0
PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGd1aW50NjQg
Y29ubmVjdGlvbklELCB0YXJnZXRJRDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7
Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodHQmcykiLCAmY29ubmVj
dGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdlKTsKLSAgICAgICAgICAgIGNsaWVudC5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAgICAg
IH19Ci0gICAgfQotICAgIH0pOwotICAgIHJldHVybiBtZXNzYWdlSGFuZGxlcnM7Ci19Ci0KLVJl
bW90ZUluc3BlY3RvckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIqIGFk
ZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBvYnNlcnZlcikK
LSAgICA6IG1faG9zdEFuZFBvcnQoU3RyaW5nOjpmcm9tVVRGOChhZGRyZXNzKSArICc6JyArIFN0
cmluZzo6bnVtYmVyKHBvcnQpKQotICAgICwgbV9vYnNlcnZlcihvYnNlcnZlcikKLSAgICAsIG1f
Y2FuY2VsbGFibGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQotewotICAgIEdSZWZQ
dHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVu
dF9uZXcoKSk7Ci0gICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhzb2Nr
ZXRDbGllbnQuZ2V0KCksIG1faG9zdEFuZFBvcnQudXRmOCgpLmRhdGEoKSwgMCwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwKLSAgICAgICAgW10oR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vy
cm9yPiBlcnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IGNvbm5l
Y3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5pc2go
R19TT0NLRVRfQ0xJRU5UKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAg
ICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lP
X0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
YXV0byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRh
dGEpOwotICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pCi0gICAgICAgICAgICAgICAgY2xpZW50
LT5zZXR1cENvbm5lY3Rpb24oU29ja2V0Q29ubmVjdGlvbjo6Y3JlYXRlKFdURk1vdmUoY29ubmVj
dGlvbiksIG1lc3NhZ2VIYW5kbGVycygpLCBjbGllbnQpKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVtb3RlSW5zcGVjdG9yQ2xpZW50IGZhaWxl
ZCB0byBjb25uZWN0IHRvIGluc3BlY3RvciBzZXJ2ZXI6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwot
ICAgICAgICAgICAgICAgIGNsaWVudC0+bV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCpjbGll
bnQpOwotICAgICAgICAgICAgfQotICAgIH0sIHRoaXMpOwotfQotCi1SZW1vdGVJbnNwZWN0b3JD
bGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCi17
Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKTsKLSAgICBtX3Nv
Y2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXR1cEluc3BlY3RvckNsaWVudCIsIGdfdmFy
aWFudF9uZXcoIihAYXkpIiwgZ192YXJpYW50X25ld19ieXRlc3RyaW5nKEluc3BlY3Rvcjo6YmFj
a2VuZENvbW1hbmRzSGFzaCgpLmRhdGEoKSkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCi17
Ci0gICAgaWYgKCFiYWNrZW5kQ29tbWFuZHMgfHwgIWJhY2tlbmRDb21tYW5kc1swXSkgewotICAg
ICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IFN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGJh
Y2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwotICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25E
aWRDbG9zZSgpCi17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9pbnNwZWN0b3JQcm94
eU1hcC5jbGVhcigpOwotICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9v
YnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6Omluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJ
RCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5zdXJlKHN0
ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVjdGlvbklE
LCB0YXJnZXRJRF0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQ
cm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpOwotICAgIH0pOwotICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+c2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zb2NrZXRDb25uZWN0
aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlv
bklELCB0YXJnZXRJRCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmxvYWQoKTsK
LX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKHVp
bnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZW5kTWVzc2Fn
ZVRvQmFja2VuZCIsIGdfdmFyaWFudF9uZXcoIih0dHMpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJ
RCwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRh
cmdldElEKQotewotICAgIEFTU0VSVChtX2luc3BlY3RvclByb3h5TWFwLmNvbnRhaW5zKHN0ZDo6
bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKSk7Ci0gICAgbV9zb2NrZXRDb25uZWN0
aW9uLT5zZW5kTWVzc2FnZSgiRnJvbnRlbmREaWRDbG9zZSIsIGdfdmFyaWFudF9uZXcoIih0dCki
LCBjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1v
dmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotfQotCi12b2lkIFJl
bW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQs
IFZlY3RvcjxUYXJnZXQ+JiYgdGFyZ2V0TGlzdCkKLXsKLSAgICAvLyBGaW5kIGNsb3NlZCB0YXJn
ZXRzIHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3Rvcjx1aW50NjRfdCwgND4gdGFyZ2V0c1RvUmVt
b3ZlOwotICAgIGZvciAoYXV0byYgY29ubmVjdGlvblRhcmdldFBhaXIgOiBtX2luc3BlY3RvclBy
b3h5TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoY29ubmVjdGlvblRhcmdldFBhaXIuZmlyc3Qg
IT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRMaXN0
KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNl
Y29uZCkgewotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KGNvbm5lY3Rp
b25UYXJnZXRQYWlyKS0+c2V0VGFyZ2V0TmFtZSh0YXJnZXQubmFtZSk7Ci0gICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICB0YXJnZXRzVG9SZW1v
dmUuYXBwZW5kKGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAgfQotICAgIGZvciAo
YXV0byB0YXJnZXRJRCA6IHRhcmdldHNUb1JlbW92ZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQcm94
eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotCi0g
ICAgbV90YXJnZXRzLnNldChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOwotICAg
IG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25J
RCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgYXV0byBw
cm94eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25J
RCwgdGFyZ2V0SUQpKTsKLSAgICBBU1NFUlQocHJveHkpOwotICAgIGlmICghcHJveHkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZzo6ZnJv
bVVURjgobWVzc2FnZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGFkZWUwMmNlNWQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxh
YmxlIEdDYW5jZWxsYWJsZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUlu
c3BlY3RvckNsaWVudDsKLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OwotY2xhc3MgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50
JikgPSAwOwotfTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChj
b25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZl
ciYpOwotICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKLQotICAgIHN0cnVjdCBUYXJnZXQg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdWludDY0X3QgaWQ7Ci0gICAgICAgIENTdHJpbmcgdHlw
ZTsKLSAgICAgICAgQ1N0cmluZyBuYW1lOwotICAgICAgICBDU3RyaW5nIHVybDsKLSAgICB9Owot
Ci0gICAgY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBob3N0QW5kUG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGJh
Y2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9
Ci0KLSAgICB2b2lkIGluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJn
ZXRJRCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9u
SUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGNsb3NlRnJv
bUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOwotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxl
cnMmIG1lc3NhZ2VIYW5kbGVycygpOwotICAgIHZvaWQgc2V0dXBDb25uZWN0aW9uKFJlZjxTb2Nr
ZXRDb25uZWN0aW9uPiYmKTsKLSAgICB2b2lkIGNvbm5lY3Rpb25EaWRDbG9zZSgpOwotCi0gICAg
dm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOwotICAgIHZvaWQgc2V0VGFyZ2V0
TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYpOwotICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFy
Z2V0SUQsIGNvbnN0IGNoYXIqKTsKLQotICAgIFN0cmluZyBtX2hvc3RBbmRQb3J0OwotICAgIFN0
cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLSAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYg
bV9vYnNlcnZlcjsKLSAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0
aW9uOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwotICAgIEhhc2hN
YXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7Ci0gICAgSGFzaE1hcDxzdGQ6
OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3Rv
clByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTljNDQ2NTc2OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94
eTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1
YWwgfldlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgYm9v
bCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYnJpbmdU
b0Zyb250KFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQg
aGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2Vi
SW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCB3aWR0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9yUHJveHkmLCBib29sIGF2YWls
YWJsZSkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkZTM0OWJiNzEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw1MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAg
TW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBHdXN0YXZvIE5v
cm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmln
YXRpb24uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiV0tB
cnJheS5oIgotI2luY2x1ZGUgIldLQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiV0tNdXRh
YmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rv
clVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKLSNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAu
aCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94
eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9pZCBpbnNwZWN0b3JW
aWV3RGVzdHJveWVkKEd0a1dpZGdldCosIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYklu
c3BlY3RvclByb3h5KiBpbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclBy
b3h5Kj4odXNlckRhdGEpOwotCi0gICAgLy8gSW5mb3JtIFdlYlByb2Nlc3MgYWJvdXQgd2ViaW5z
cGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBzbywKLSAgICAvLyByZXN1bHRzIGluIGZhaWx1cmUg
b2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIHdlYmluc3BlY3Rvci4KLSAgICBpbnNwZWN0b3JQ
cm94eS0+Y2xvc2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0Q2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJiBjbGllbnQpCi17Ci0gICAg
bV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbnNw
ZWN0b3JXaW5kb3cpOwotICAgIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJ
VF9JTlNQRUNUT1JfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgIW1faW5zcGVjdGVkVVJMU3Ry
aW5nLmlzRW1wdHkoKSA/IG1faW5zcGVjdGVkVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkgOiBudWxs
cHRyKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlZWRlZERhdGFiYXNlUXVv
dGEoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmLCBXS1N0cmluZ1Jl
ZiwgV0tTdHJpbmdSZWYsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLCB1
bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBleHBlY3RlZFVzYWdlLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYXg8dW5z
aWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVzYWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSAqIDEu
MjUpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0
b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0gICAgd2Vi
SW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotc3RhdGljIHZvaWQgZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9u
QWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBs
aXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIC8v
IEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KLSAgICBBUEk6OkZy
YW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJj
ZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJh
bWUoKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0
b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5m
byk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLQotICAgIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0
KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgot
ICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1
ZXN0LnVybCgpKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZy
b20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KLSAgICB0b0ltcGwobGlzdGVuZXJS
ZWYpLT5pZ25vcmUoKTsKLQotICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3Bl
Y3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRS
ZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRDb250ZXh0TWVu
dUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJvcG9zZWRN
ZW51UmVmLCBXS0FycmF5UmVmKiBuZXdNZW51UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYsIFdLVHlw
ZVJlZiwgY29uc3Qgdm9pZCopCi17Ci0gICAgV0tNdXRhYmxlQXJyYXlSZWYgbWVudUl0ZW1zID0g
V0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKLQotICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRT
aXplKHByb3Bvc2VkTWVudVJlZik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGNvbnRleHRNZW51SXRlbSA9IHN0
YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgocHJv
cG9zZWRNZW51UmVmLCBpKSk7Ci0gICAgICAgIHN3aXRjaCAoV0tDb250ZXh0TWVudUl0ZW1HZXRU
YWcoY29udGV4dE1lbnVJdGVtKSkgewotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFn
T3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFn
RG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkSW1hZ2VUb0Rpc2s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lbnVJdGVtcywgY29udGV4dE1lbnVJdGVt
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKm5ld01lbnVS
ZWYgPSBtZW51SXRlbXM7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgp
KTsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yVmlldyk7Ci0KLSAgICBhdXRvIHByZWZlcmVuY2Vz
ID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIu
Iik7Ci0jaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQotICAgIC8vIEFsbG93IGRldmVsb3BlcnMg
dG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFu
Z2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxl
ZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29u
c29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlw
dFJ1bnRpbWVGbGFncyh7Ci0gICAgfSk7Ci0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3Jv
dXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQ
YWdlKCkpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1
cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2wo
Jmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7Ci0gICAgbV9pbnNwZWN0
b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNvbmZpZ3Vy
YXRpb24ucHRyKCkpKTsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1f
aW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JWaWV3
KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvclZpZXcsICJkZXN0cm95IiwgR19D
QUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0KLSAgICBXS1BhZ2VVSUNs
aWVudFYyIHVpQ2xpZW50ID0gewotICAgICAgICB7IDIsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0
ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxw
dHIsIC8vIHNob3dQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNsb3NlUGFnZQotICAgICAgICBu
dWxscHRyLCAvLyB0YWtlRm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8gZm9jdXMKLSAgICAgICAg
bnVsbHB0ciwgLy8gdW5mb2N1cwotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxl
cnQKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm0KLSAgICAgICAgbnVs
bHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdAotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0
dXNUZXh0Ci0gICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJl
Y2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRv
bkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAotICAgICAgICBudWxscHRyLCAvLyBkaWRO
b3RIYW5kbGVLZXlFdmVudAotICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVXaGVlbEV2
ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGFyZVRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxs
cHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUKLSAgICAgICAgbnVsbHB0ciwgLy8gaXNNZW51QmFy
VmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51QmFyVmlzaWJsZQotICAgICAgICBu
dWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2libGUKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3Rh
dHVzQmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc1Jlc2l6YWJsZQotICAgICAgICBu
dWxscHRyLCAvLyBzZXRSZXNpemFibGUKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0V2luZG93RnJh
bWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFdpbmRvd0ZyYW1lLAotICAgICAgICBudWxscHRy
LCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RHJhdwotICAgICAgICBudWxscHRyLCAvLyBwYWdlRGlkU2Nyb2xsCi0gICAgICAgIGV4Y2VlZGVk
RGF0YWJhc2VRdW90YSwKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuT3BlblBhbmVsLAotICAgICAg
ICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
Ci0gICAgICAgIG51bGxwdHIsIC8vIGhlYWRlckhlaWdodAotICAgICAgICBudWxscHRyLCAvLyBm
b290ZXJIZWlnaHQKLSAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0hlYWRlcgotICAgICAgICBudWxs
cHRyLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAgIG51bGxwdHIsIC8vIHByaW50RnJhbWUKLSAgICAg
ICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKLSAgICAgICAgbnVsbHB0ciwgLy8gdW51c2VkCi0gICAg
ICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKLSAgICAgICAg
bnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAotICAgICAgICBudWxscHRyLCAv
LyBjcmVhdGVQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
Ci0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xp
Y2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xv
clBpY2tlcgotICAgICAgICBudWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIKLSAgICAgICAgbnVs
bHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkCi0gICAgfTsKLQotICAgIFdL
UGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAs
IHRoaXMgfSwKLSAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAg
IG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51
bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkQ29tbWl0TmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZp
Z2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51
bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxw
dHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNz
RGlkQ2hhbmdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlCi0gICAgICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwg
Ly8gY29weVdlYkNyeXB0b01hc3RlcktleQotCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2lu
TmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25H
ZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAg
ICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9
OwotCi0gICAgV0tQYWdlQ29udGV4dE1lbnVDbGllbnRWMyBjb250ZXh0TWVudUNsaWVudCA9IHsK
LSAgICAgICAgeyAzLCB0aGlzIH0sCi0gICAgICAgIG51bGxwdHIsIC8vIGdldENvbnRleHRNZW51
RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIs
IC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNlbGVjdGVkCi0gICAgICAgIG51bGxwdHIsIC8vIGNv
bnRleHRNZW51RGlzbWlzc2VkCi0gICAgICAgIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVu
dSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbnRleHRNZW51Ci0gICAgICAgIG51bGxwdHIs
IC8vIGhpZGVDb250ZXh0TWVudQotICAgIH07Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3Rv
clBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV9p
bnNwZWN0b3JWaWV3KSk7Ci0gICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOwotCi0gICAgV0tQYWdl
U2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmdWlDbGllbnQuYmFzZSk7Ci0g
ICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZu
YXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotICAgIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVu
dCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNvbnRleHRNZW51Q2xpZW50LmJhc2UpOwotCi0gICAg
cmV0dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQotewotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVu
dC0+b3BlbldpbmRvdygqdGhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCog
aW5zcGVjdGVkVmlld1BhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKGluc3BlY3RlZFBh
Z2UoKS0+dmlld1dpZGdldCgpKTsKLSAgICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5U
b3BsZXZlbFdpbmRvdyhpbnNwZWN0ZWRWaWV3UGFyZW50KSkKLSAgICAgICAgaW5zcGVjdGVkVmll
d1BhcmVudCA9IG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKLSAg
ICBtX2luc3BlY3RvcldpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhpbnNwZWN0ZWRW
aWV3UGFyZW50ID8gR1RLX1dJTkRPVyhpbnNwZWN0ZWRWaWV3UGFyZW50KSA6IG51bGxwdHIpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBt
X2luc3BlY3RvclZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOwot
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHVwZGF0
ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci0KLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVy
KEdfT0JKRUNUKG1faW5zcGVjdG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZt
X2luc3BlY3RvcldpbmRvdykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1f
aW5zcGVjdG9yV2luZG93KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvclZpZXcp
IHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVj
dG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCks
IHRoaXMpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgIH0KLQotICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCp0aGlzKTsKLQotICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9p
bnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG51bGxwdHI7Ci0g
ICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jh
c2goKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUo
KQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
UmVzZXRTdGF0ZSgpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdUb0Zyb250KCkKLXsKLSAgICBpZiAobV9pc09wZW5pbmcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVu
VG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKLSAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19X
SU5ET1cocGFyZW50KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
Ym9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBHdGtXaWRn
ZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7Ci0g
ICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQot
ICAgICAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJ
TkRPVyhwYXJlbnQpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKLXsK
LSAgICBtX2luc3BlY3RlZFVSTFN0cmluZyA9IHVybDsKLSAgICBpZiAobV9jbGllbnQpCi0gICAg
ICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKCp0aGlzLCB1cmwpOwotCi0gICAgaWYg
KG1faW5zcGVjdG9yV2luZG93KQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0g
ICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlcklu
dGVyZmFjZS9NYWluLmh0bWwiKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNw
ZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3Jn
L3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwiKTsKLX0KLQotU3RyaW5n
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlLyIpOwot
fQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERl
YnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1MzY+
OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJn
ZXQuCi0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsK
LSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodChpbnNwZWN0ZWRQYWdl
KCktPnZpZXdXaWRnZXQoKSk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGVkX3dpZHRoKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAgIGlmIChtX2luc3Bl
Y3RvcldpbmRvdykgewotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVS
KG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICAgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cg
PSAwOwotICAgIH0KLQotICAgIC8vIFNldCBhIGRlZmF1bHQgc2l6ZXMgYmFzZWQgb24gSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVs
dEF0dGFjaGVkU2l6ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0
dGFjaGVkV2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRh
Y2hlZEhlaWdodCA9IDI1MDsKLQotICAgIGlmIChtX2F0dGFjaG1lbnRTaWRlID09IEF0dGFjaG1l
bnRTaWRlOjpCb3R0b20pIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0
ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0OwotICAgICAgICBwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdo
dCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZFdpZHRoID0g
cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3Jt
U2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0aCwgc3Rk
OjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7Ci0gICAg
fQotCi0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5hdHRhY2goKnRoaXMpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihXRUJLSVRf
V0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIG1faW5zcGVjdG9y
VmlldywgbV9hdHRhY2htZW50U2lkZSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9y
Vmlldyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsK
LSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3Bl
Y3RvclZpZXc7Ci0gICAgaWYgKCFtX2NsaWVudCB8fCAhbV9jbGllbnQtPmRldGFjaCgqdGhpcykp
IHsKLSAgICAgICAgLy8gRGV0YWNoIGlzIGNhbGxlZCB3aGVuIG1faXNBdHRhY2hlZCBpcyB0cnVl
LCBidXQgaXQgY291bGQgY2FsbGVkIGJlZm9yZQotICAgICAgICAvLyB0aGUgaW5zcGVjdG9yIGlz
IG9wZW5lZCBpZiB0aGUgaW5zcGVjdG9yIGlzIHNob3duL2Nsb3NlZCBxdWlja2x5LiBTbywKLSAg
ICAgICAgLy8gd2UgbWlnaHQgbm90IGhhdmUgYSBwYXJlbnQgeWV0LgotICAgICAgICBpZiAoR3Rr
V2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQobV9pbnNwZWN0b3JWaWV3KSkK
LSAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwg
bV9pbnNwZWN0b3JWaWV3KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJl
IG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBh
dHRhY2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5z
cGVjdG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKSB7Ci0gICAgICAgIC8vIFRoZSBp
bnNwZWN0b3IgdmlldyB3aWxsIGJlIGRlc3Ryb3llZCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gbm90
aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0byBjbG9zZSB0aGUKLSAgICAgICAgLy8gaW5zcGVjdG9yIGlu
IHRoaXMgY2FzZSwgc2luY2UgaXQncyBhbHJlYWR5IGNsb3NlZC4KLSAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwotICAgICAgICBtX2lu
c3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgb3Bl
bigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlk
Q2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7Ci0gICAgd2Via2l0V2ViVmlld0Jh
c2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdl
KCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBp
ZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgqdGhpcywgd2lkdGgpOwot
ICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVX
X0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0aCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0
KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkK
LXsKLSAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwotICAgIGlmICghZ19m
aWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0
cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQ
YWdlUHJveHkqPih1c2VyRGF0YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9n
ZXRfcGF0aChmaWxlKSk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlRGlhbG9nKQotewotICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOwot
Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3Bl
Y3RvclZpZXcpOwotICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2lu
ZG93KHBhcmVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrRmlsZUNob29z
ZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXco
IlNhdmUgRmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NF
Ul9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOwotCi0gICAgR3RrRmlsZUNob29zZXIq
IGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Ci0gICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKLQot
ICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBj
dXN0b20gVVJJIHNjaGVtZSwgc3VjaAotICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNh
bid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAotICAgIC8vIHVu
Zm9ydHVuYXRlbHkuCi0gICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBT
dHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJl
bnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsK
LQotICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9n
LmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
VmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmluZyBkYXRhU3RyaW5nOwotICAgIGlm
IChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRh
dGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0
YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwotCi0gICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRh
U3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsK
LSAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmlu
Zy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUg
PSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7Ci0gICAgR1Vu
aXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Ci0gICAgZ19m
aWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwg
bnVsbHB0ciwgZmFsc2UsCi0gICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElP
TiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2Up
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29s
IGF2YWlsYWJsZSkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRD
aGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dl
YktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2Vi
S2l0SW5zcGVjdG9yV2luZG93LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5
MGYwZTZmMzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgotCi0jaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LQotc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgewotICAgIEd0a1dpbmRvdyBwYXJlbnQ7
Ci0KLSAgICBHdGtXaWRnZXQqIGhlYWRlckJhcjsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0SW5zcGVj
dG9yV2luZG93Q2xhc3MgewotICAgIEd0a1dpbmRvd0NsYXNzIHBhcmVudDsKLX07Ci0KLUdfREVG
SU5FX1RZUEUoV2ViS2l0SW5zcGVjdG9yV2luZG93LCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvdywg
R1RLX1RZUEVfV0lORE9XKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19j
bGFzc19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzKikKLXsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfaW5pdChXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdp
bmRvdykKLXsKLSAgICB3aW5kb3ctPmhlYWRlckJhciA9IGd0a19oZWFkZXJfYmFyX25ldygpOwot
ICAgIGd0a19oZWFkZXJfYmFyX3NldF90aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRl
ckJhciksIF8oIldlYiBJbnNwZWN0b3IiKSk7Ci0gICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3Nob3df
Y2xvc2VfYnV0dG9uKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgVFJVRSk7Ci0g
ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGViYXIoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ctPmhl
YWRlckJhcik7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+aGVhZGVyQmFyKTsKLX0KLQot
R3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3RrV2luZG93KiBwYXJlbnQpCi17
Ci0gICAgcmV0dXJuIEdUS19XSURHRVQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0lOU1BFQ1RP
Ul9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZFTCwgInRyYW5zaWVudC1mb3IiLCBw
YXJlbnQsCi0gICAgICAgICJkZWZhdWx0LXdpZHRoIiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRp
YWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0IiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRp
YWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsKLX0KLQotdm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5k
b3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciog
c3VidGl0bGUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSU5TUEVDVE9SX1dJ
TkRPVyh3aW5kb3cpKTsKLQotICAgIGd0a19oZWFkZXJfYmFyX3NldF9zdWJ0aXRsZShHVEtfSEVB
REVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIHN1YnRpdGxlKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkYzI4ZDEwOWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1HX0JF
R0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVyAgICAgICAg
ICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRf
SU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JX
aW5kb3cpKQotI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1Jf
V0lORE9XKSkKLSNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9S
X1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNf
SU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZpbmUgV0VCS0lUX0lO
U1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2lu
ZG93Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IFdlYktp
dEluc3BlY3RvcldpbmRvdzsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dD
bGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzczsKLQotR1R5cGUgd2Via2l0X2luc3BlY3Rv
cl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7Ci0KLUd0a1dpZGdldCogd2Via2l0SW5zcGVjdG9yV2lu
ZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKLXZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0
U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiwgY29uc3QgY2hhciogc3VidGl0bGUpOwot
Ci1HX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
SW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiYTY5NWU2YmEuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJl
UmVjb2duaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNv
Z25pemVyLmg+Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29n
bml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCi0tIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihV
SVZpZXcgKil2aWV3OwotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJl
UmVjb2duaXplci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY3ZmU3YmNjZGIu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rv
ck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLSW5zcGVj
dG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyU3ViY2xhc3MuaD4KLSNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIHsKLSAgICBSZXRhaW5QdHI8VUlUb3VjaD4gX3RvdWNo
OwotfQotCi0tIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Ci17Ci0gICAg
cmV0dXJuIFtfdG91Y2ggbG9jYXRpb25JblZpZXc6dmlld107Ci19Ci0KLS0gKHZvaWQpX3Byb2Nl
c3NUb3VjaGVzOihOU1NldCAqKXRvdWNoZXMgc3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZSluZXdTdGF0ZQotewotICAgIEFTU0VSVChfdG91Y2gpOwotICAgIGlmIChbdG91Y2hlcyBjb250
YWluc09iamVjdDpfdG91Y2guZ2V0KCldKQotICAgICAgICBzZWxmLnN0YXRlID0gbmV3U3RhdGU7
Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc0JlZ2FuOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihV
SUV2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoc2VsZi5zdGF0ZSAhPSBVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGVQb3NzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFfdG91Y2gp
OwotICAgIF90b3VjaCA9IFt0b3VjaGVzIGFueU9iamVjdF07Ci0KLSAgICBbc2VsZiBfcHJvY2Vz
c1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbl07Ci19
Ci0KLS0gKHZvaWQpdG91Y2hlc01vdmVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2
ZW50ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkXTsKLX0KLQotLSAodm9pZCl0b3VjaGVzRW5k
ZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIFtz
ZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUVuZGVkXTsKLX0KLQotLSAodm9pZCl0b3VjaGVzQ2FuY2VsbGVkOihOU1NldCAqKXRvdWNoZXMg
d2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6
dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWRdOwotfQotCi0t
ICh2b2lkKXJlc2V0Ci17Ci0gICAgX3RvdWNoID0gbmlsOwotfQotCi1AZW5kCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWJkZWI1ZjZk
MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCi0KLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNp
bXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldLRnJhbWVJ
bmZvLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJX
S05hdmlnYXRpb25BY3Rpb24uaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRlLmgiCi0j
aW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHku
aCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0j
aW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KLSNpbXBvcnQg
PFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0NlcnRpZmljYXRlSW5mby5oPgotI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLUBpbnRl
cmZhY2UgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIDogTlNPYmplY3QgPE5T
V2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gewotICAg
IFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKLX0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsKLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcgotCi0tIChOU1JlY3Qp
d2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilz
aGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkK
LSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3Qo
KS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKLSAg
ICByZXR1cm4gcmVjdDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclBy
b3h5Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlk
Q3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxl
cgotewotICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsKLX0KLQotLSAoQk9P
TClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICByZXR1cm4g
X2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVdLV2ViVmlldyAqUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OndlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtX2luc3BlY3Rv
clZpZXcuZ2V0KCkud2ViVmlldzsKLX0KLQotV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIG1f
b2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFw
dGVyIGFsbG9jXSBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsKLQotICAg
IG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIGFs
bG9jXSBpbml0V2l0aEluc3BlY3RlZFBhZ2U6bnVsbHB0cl0pOwotICAgIFttX2luc3BlY3RvclZp
ZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBtX3dpbmRv
dyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhOU1plcm9SZWN0LCBX
ZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZSk7Ci0gICAgW21f
d2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotICAgIFttX3dpbmRvdyBz
ZXRGcmFtZUF1dG9zYXZlTmFtZTpAIldLUmVtb3RlV2ViSW5zcGVjdG9yV2luZG93RnJhbWUiXTsK
LQotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBtX3dpbmRvdy5nZXQoKS5jb250ZW50VmlldzsK
LSAgICBbd2ViVmlldygpIHNldEZyYW1lOmNvbnRlbnRWaWV3LmJvdW5kc107Ci0gICAgW2NvbnRl
bnRWaWV3IGFkZFN1YnZpZXc6d2ViVmlldygpXTsKLQotICAgIHJldHVybiB3ZWJWaWV3KCktPl9w
YWdlLmdldCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAg
ICAgW21fd2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3dpbmRvdyBjbG9zZV07
Ci0gICAgICAgIG1fd2luZG93ID0gbmlsOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvclZp
ZXcpIHsKLSAgICAgICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwot
ICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqQ0Fk
YXB0ZXIpCi0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAgW05TV2luZG93IHJl
bW92ZUZyYW1lVXNpbmdOYW1lOlttX3dpbmRvdyBmcmFtZUF1dG9zYXZlTmFtZV1dOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0g
ICAgW21fd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci0gICAgW21fd2luZG93IG1h
a2VGaXJzdFJlc3BvbmRlcjp3ZWJWaWV3KCldOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0
cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykK
LXsKLSAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KLQotICAg
IEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgTlNVUkwgKnBsYXRm
b3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQo
KTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Ci0gICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKLSAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBj
b25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCi0gICAgICAg
IGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChwbGF0Zm9y
bVVSTCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
TmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCi0gICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENv
cHkgPSBzdWdnZXN0ZWRVUkw7Ci0gICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVudDsKLQot
ICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7Ci0gICAgICAgIEFTU0VS
VChhY3R1YWxVUkwpOwotCi0gICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1
Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQp
IHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2
NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250
ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxl
bmd0aDpvdXQuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDph
Y3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtj
b250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpO
U1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKLQotICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkU2F2
ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlE
KCkpOwotICAgIH07Ci0KLSAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgewotICAgICAgICBzYXZl
VG9VUkwocGxhdGZvcm1VUkwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNTYXZl
UGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07Ci0gICAgcGFuZWwubmFtZUZp
ZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVudDsKLQotICAgIC8v
IElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMgZmlsZSB0byBh
IHBhdGggYW5kCi0gICAgLy8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0byBzaG93LiBP
dGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKLSAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGZvciB0
aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgotICAgIGlmIChwbGF0
Zm9ybVVSTC5pc0ZpbGVVUkwpCi0gICAgICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9IFtwbGF0Zm9y
bVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOwotCi0gICAgYXV0byBjb21wbGV0
aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0ID09
IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7Ci0gICAgICAgIHNhdmVUb1VSTChwYW5l
bC5VUkwpOwotICAgIH07Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gbV93aW5kb3cgPyBtX3dp
bmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOwotICAgIGlmICh3aW5kb3cpCi0gICAgICAg
IFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5kbGVy
OmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFtwYW5lbCBydW5Nb2RhbF0pOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBj
b250ZW50KQotewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFj
LgotCi0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBSZXRh
aW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1
Z2dlc3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFs
cmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlmICghYWN0dWFs
VVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0Zp
bGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6
TlVMTF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5kbGUgd3JpdGVE
YXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0g
ICAgW2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdl
ID0gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKLSAgICBpbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJM
IGFic29sdXRlU3RyaW5nXSksIGluc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIHdl
YlZpZXcoKS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKLXsK
LSAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpbTlNVUkwgVVJMV2l0
aFN0cmluZzp1cmxdXTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8p
Ci17Ci0gICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKLQotICAgIFJldGFp
blB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtbU0ZD
ZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7Ci0KLSAgICBBU1NFUlQobV93aW5kb3cpOwot
I2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0gICAgW2NlcnRpZmljYXRlUGFuZWwg
YmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRF
bmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZv
LnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJl
Z2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5k
U2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNBcnJheSAq
KWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107Ci0jZW5k
aWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVsIGhh
cyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNuJ3QgZXhp
c3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVWaWV3ID0g
W2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2VydGlmaWNhdGVWaWV3
IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFibGVU
cnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZRVNdOwot
ICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDhiZDA4ZmY5ZDQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbXBvcnQg
PFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgotCi0jaWYg
UExBVEZPUk0oTUFDKQotCi1PQkpDX0NMQVNTIFdLV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLUBwcm90b2NvbCBXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyRGVsZWdhdGU7Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLUBpbnRlcmZh
Y2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3ICp3ZWJWaWV3OwotQHByb3BlcnR5IChub25hdG9t
aWMsIHdlYWspIGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRl
OwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJL
aXQ6OldlYlBhZ2VQcm94eT4paW5zcGVjdGVkUGFnZTsKLQotKyAoQk9PTCl2aWV3SXNJbnNwZWN0
b3JXZWJWaWV3OihOU1ZpZXcgKil2aWV3OwotCi1AZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWlu
c3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLS0gKEJPT0wpaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJv
bGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVy
IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93OwotLSAodm9pZClpbnNwZWN0
b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9F
TkQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjYzZTBmZDZlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCi0KLSNpZiBQTEFURk9STShN
QUMpCi0KLSNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKLSNpbXBvcnQgIlZlcnNpb25DaGVja3Mu
aCIKLSNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmll
dy5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW1wb3J0ICJXS05hdmlnYXRp
b25EZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCi0jaW1wb3J0
ICJXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tQcm9jZXNzUG9vbEludGVybmFs
LmgiCi0jaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdD
b25maWd1cmF0aW9uUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgotI2lt
cG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbXBvcnQgIldlYkluc3BlY3RvclV0aWxpdGll
cy5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0IDx3dGYvV2Vha09iakNQdHIu
aD4KLQotQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICgpIDxXS1VJRGVsZWdh
dGUsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPgot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB7Ci0gICAg
TmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9pbnNwZWN0ZWRQYWdlOwotICAgIFJldGFp
blB0cjxXS0luc3BlY3RvcldLV2ViVmlldz4gX3dlYlZpZXc7Ci0gICAgV2Vha09iakNQdHI8aWQg
PFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQ
YWdlUHJveHk+KWluc3BlY3RlZFBhZ2UKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFRoZSAobG9jYWwpIGluc3BlY3RlZCBw
YWdlIGlzIG5pbCBpZiB0aGUgY29udHJvbGxlciBpcyBob3N0aW5nIGEgUmVtb3RlIFdlYiBJbnNw
ZWN0b3Igdmlldy4KLSAgICBfaW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgaWYgKF93ZWJWaWV3KSB7
Ci0gICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5pbF07Ci0gICAgICAgIFtfd2ViVmll
dyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW193ZWJWaWV3IHNldEluc3Bl
Y3RvcldLV2ViVmlld0RlbGVnYXRlOm5pbF07Ci0gICAgICAgIF93ZWJWaWV3ID0gbmlsOwotICAg
IH0KLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaWQgPFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX2RlbGVnYXRlLmdldEF1
dG9yZWxlYXNlZCgpOwotfQotCi0tIChXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgLy8gQ29u
c3RydWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIGRlbGVnYXRlIGJlZm9yZSB0
aGUgV2ViVmlldyBpcyBjcmVhdGVkLgotICAgIGlmICghX3dlYlZpZXcpIHsKLSAgICAgICAgTlNS
ZWN0IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0
aWFsV2luZG93SGVpZ2h0KTsKLSAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0
b3JXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1lIGNvbmZpZ3VyYXRp
b246W3NlbGYgY29uZmlndXJhdGlvbl1dKTsKLSAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdh
dGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6c2VsZl07
Ci0gICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTpzZWxmXTsK
LSAgICAgICAgW193ZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6
Tk9dOwotICAgICAgICBbX3dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6WUVTXTsKLSAg
ICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwg
TlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIF93ZWJWaWV3LmdldCgp
OwotfQotCi0tICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0t
IChXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgotewotICAgIGF1dG8gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7Ci0KLSAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0
KCkucHJlZmVyZW5jZXM7Ci0gICAgcHJlZmVyZW5jZXMuX2FsbG93RmlsZUFjY2Vzc0Zyb21GaWxl
VVJMcyA9IFlFUzsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHM6WUVTXTsKLSAgICBwcmVmZXJlbmNlcy5fc3RvcmFnZUJsb2NraW5nUG9saWN5
ID0gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QWxsb3dBbGw7Ci0gICAgcHJlZmVyZW5jZXMuX2ph
dmFTY3JpcHRSdW50aW1lRmxhZ3MgPSAwOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIC8vIEFsbG93
IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMg
d2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy5fZGV2ZWxvcGVyRXh0
cmFzRW5hYmxlZCA9IFlFUzsKLSAgICBwcmVmZXJlbmNlcy5fbG9nc1BhZ2VNZXNzYWdlc1RvU3lz
dGVtQ29uc29sZUVuYWJsZWQgPSBZRVM7Ci0jZW5kaWYKLQotICAgIHByZWZlcmVuY2VzLl9kaWFn
bm9zdGljTG9nZ2luZ0VuYWJsZWQgPSBZRVM7Ci0KLSAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9s
bGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KV0pIHsKLSAgICAgICAgaWYgKFtfZGVsZWdhdGUgaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpzZWxmXSkgewotICAgICAg
ICAgICAgcHJlZmVyZW5jZXMuX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID0g
Tk87Ci0gICAgICAgICAgICBwcmVmZXJlbmNlcy5fcGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NT
dXBwcmVzc2lvbkVuYWJsZWQgPSBOTzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFtjb25maWd1
cmF0aW9uIHNldFByb2Nlc3NQb29sOndyYXBwZXIoV2ViS2l0OjppbnNwZWN0b3JQcm9jZXNzUG9v
bChXZWJLaXQ6Omluc3BlY3RvckxldmVsRm9yUGFnZShfaW5zcGVjdGVkUGFnZSkpKV07Ci0gICAg
W2NvbmZpZ3VyYXRpb24gX3NldEdyb3VwSWRlbnRpZmllcjpXZWJLaXQ6Omluc3BlY3RvclBhZ2VH
cm91cElkZW50aWZpZXJGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKV07Ci0KLSAgICByZXR1cm4gY29u
ZmlndXJhdGlvbi5hdXRvcmVsZWFzZSgpOwotfQotCi0rIChCT09MKXZpZXdJc0luc3BlY3Rvcldl
YlZpZXc6KE5TVmlldyAqKXZpZXcKLXsKLSAgICByZXR1cm4gW3ZpZXcgaXNLaW5kT2ZDbGFzczpb
V0tJbnNwZWN0b3JXS1dlYlZpZXcgY2xhc3NdXTsKLX0KLQotLy8gTUFSSzogV0tVSURlbGVnYXRl
IG1ldGhvZHMKLQotLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZXRXaW5k
b3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQ0dSZWN0KSljb21wbGV0aW9u
SGFuZGxlcgotewotICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDR1JlY3RaZXJvKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKE5TUmVjdFRvQ0dSZWN0KFt3ZWJWaWV3IGZyYW1lXSkpOwotfQotCi0tICh2b2lkKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOihDR1JlY3QpZnJhbWUK
LXsKLSAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW193ZWJWaWV3LmdldCgpLndpbmRvdyBzZXRGcmFtZTpOU1JlY3RGcm9tQ0dSZWN0KGZyYW1l
KSBkaXNwbGF5OllFU107Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczooV0tPcGVuUGFuZWxQYXJhbWV0ZXJzICopcGFy
YW1ldGVycyBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVVJMICo+ICpVUkxzKSljb21wbGV0aW9uSGFuZGxl
cgotewotICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFuZWwgb3BlblBhbmVs
XTsKLSAgICBvcGVuUGFuZWwuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBwYXJhbWV0ZXJzLmFs
bG93c011bHRpcGxlU2VsZWN0aW9uOwotCi0gICAgYXV0byByZXBvcnRTZWxlY3RlZEZpbGVzID0g
XihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3Bv
bnNlT0spCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihvcGVuUGFuZWwuVVJMcyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0gICAgfTsK
LQotICAgIGlmIChfd2ViVmlldy5nZXQoKS53aW5kb3cpCi0gICAgICAgIFtvcGVuUGFuZWwgYmVn
aW5TaGVldE1vZGFsRm9yV2luZG93Ol93ZWJWaWV3LmdldCgpLndpbmRvdyBjb21wbGV0aW9uSGFu
ZGxlcjpyZXBvcnRTZWxlY3RlZEZpbGVzXTsKLSAgICBlbHNlCi0gICAgICAgIHJlcG9ydFNlbGVj
dGVkRmlsZXMoW29wZW5QYW5lbCBydW5Nb2RhbF0pOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoo
V0tTZWN1cml0eU9yaWdpbiAqKXNlY3VyaXR5T3JpZ2luIGN1cnJlbnRRdW90YToodW5zaWduZWQg
bG9uZyBsb25nKWN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6KHVuc2lnbmVkIGxvbmcg
bG9uZyljdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6KHVuc2lnbmVkIGxv
bmcgbG9uZyljdXJyZW50VXNhZ2UgZXhwZWN0ZWRVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWV4
cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKSh1bnNpZ25lZCBsb25nIGxvbmcg
bmV3UXVvdGEpKWRlY2lzaW9uSGFuZGxlcgotewotICAgIGRlY2lzaW9uSGFuZGxlcihzdGQ6Om1h
eDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2FnZSAqIDEuMjUp
KTsKLX0KLQotLSAoTlNNZW51ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY29udGV4
dE1lbnU6KE5TTWVudSAqKW1lbnUgZm9yRWxlbWVudDooX1dLQ29udGV4dE1lbnVFbGVtZW50SW5m
byAqKWVsZW1lbnQKLXsKLSAgICBmb3IgKE5TSW50ZWdlciBpID0gbWVudS5udW1iZXJPZkl0ZW1z
IC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqaXRlbSA9IFttZW51IGl0
ZW1BdEluZGV4OmldOwotICAgICAgICBzd2l0Y2ggKGl0ZW0udGFnKSB7Ci0gICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKLSAgICAgICAgY2Fz
ZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgY2Fz
ZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6Ci0gICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgICAgIFtt
ZW51IHJlbW92ZUl0ZW1BdEluZGV4OmldOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gbWVudTsKLX0KLQotLy8gTUFSSzogV0tOYXZpZ2F0aW9uRGVs
ZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKXdlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1p
bmF0ZTooV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJJbnNwZWN0b3JEaWRDcmFzaDopXSkKLSAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOnNlbGZdOwotfQotCi0tICh2b2lkKXdlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tO
YXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQg
KF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCi17Ci0gICAgLy8g
QWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgotICAgIGlmICghbmF2
aWdhdGlvbkFjdGlvbi50YXJnZXRGcmFtZS5pc01haW5GcmFtZSkgewotICAgICAgICBkZWNpc2lv
bkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmls
ZS4KLSAgICBpZiAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVj
dG9yUGFnZShuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMKSkgewotICAgICAgICBkZWNpc2lv
bkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UuCi0gICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7Ci0gICAgCi0gICAgLy8gQW5k
IGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgaWYgKF9pbnNwZWN0
ZWRQYWdlKQotICAgICAgICBfaW5zcGVjdGVkUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlvbkFj
dGlvbi5yZXF1ZXN0KTsKLX0KLQotLy8gTUFSSzogV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZSBtZXRob2RzCi0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3Rv
cldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBPcHRpb25TZXQ8V2ViQ29yZTo6UmVsb2FkT3B0aW9uPiByZWxvYWRP
cHRpb25zOwotICAgIGlmIChXZWJLaXQ6OmxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6OlNES1ZlcnNp
b246OkZpcnN0V2l0aEV4cGlyZWRPbmx5UmVsb2FkQmVoYXZpb3IpKQotICAgICAgICByZWxvYWRP
cHRpb25zLmFkZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KTsKLQotICAgIF9p
bnNwZWN0ZWRQYWdlLT5yZWxvYWQocmVsb2FkT3B0aW9ucyk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVj
dG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJW
aWV3Ci17Ci0gICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X2luc3BlY3RlZFBhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkZyb21PcmlnaW4p
OwotfQotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JXS1dlYlZpZXcg
Kil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Ci17Ci0gICAg
aWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjp3aWxsTW92ZVRvV2luZG93OildKQotICAgICAgICBb
X2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyOnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpu
ZXdXaW5kb3ddOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRv
dzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRl
ICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzopXSkKLSAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0
b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzpzZWxmXTsKLX0KLQotQGVuZAotCi0jZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tJbnNwZWN0b3JXS1dlYlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3
ZTc3Y2ZlN2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVn
YXRlOwotCi1AaW50ZXJmYWNlIFdLSW5zcGVjdG9yV0tXZWJWaWV3IDogV0tXZWJWaWV3Ci1AcHJv
cGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+
IGluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOwotQGVuZAotCi1AcHJvdG9jb2wgV0tJbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZQotQHJlcXVpcmVkCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmll
d1JlbG9hZDooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OwotLSAodm9pZClpbnNwZWN0
b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZp
ZXc7Ci0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3
ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93OwotLSAodm9pZClp
bnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICop
d2ViVmlldzsKLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmZWY0YTAxYmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNp
bXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgotI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRy
Lmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvcldLV2ViVmlldyB7Ci0gICAgV2Vha09i
akNQdHI8aWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+PiBfaW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGU7Ci19Ci0KLS0gKE5TUmVjdClfb3BhcXVlUmVjdEZvcldpbmRvd01vdmVXaGVu
SW5UaXRsZWJhcgotewotICAgIC8vIFRoaXMgY29udmluY2VzIEFwcEtpdCB0byBhbGxvdyB3aW5k
b3cgbW92ZXMgd2hlbiBjbGlja2luZyBhbnl3aGVyZSBpbiB0aGUgdGl0bGViYXIgKHRvcCAyMnB0
KQotICAgIC8vIHdoZW4gdGhpcyB2aWV3J3MgY29udGVudHMgY292ZXIgdGhlIGVudGlyZSB3aW5k
b3cncyBjb250ZW50cywgaW5jbHVkaW5nIHRoZSB0aXRsZWJhci4KLSAgICByZXR1cm4gTlNaZXJv
UmVjdDsKLX0KLQotLSAoTlNJbnRlZ2VyKXRhZwotewotICAgIHJldHVybiBXS0luc3BlY3RvclZp
ZXdUYWc7Ci19Ci0KLS0gKGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilpbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZQotewotICAgIHJldHVybiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVs
ZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilkZWxlZ2F0ZQot
ewotICAgIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0tIChJ
QkFjdGlvbilyZWxvYWQ6KGlkKXNlbmRlcgotewotICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZDpzZWxmXTsKLX0KLQotLSAoSUJBY3Rp
b24pcmVsb2FkRnJvbU9yaWdpbjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYuaW5zcGVjdG9yV0tX
ZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjpzZWxmXTsK
LX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cK
LXsKLSAgICBbc3VwZXIgdmlld1dpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKLSAgICBbc2Vs
Zi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXc6c2VsZiB3aWxs
TW92ZVRvV2luZG93Om5ld1dpbmRvd107Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRv
dwotewotICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKLSAgICBbc2VsZi5pbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6c2Vs
Zl07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJiZTcyOGQ0MzVjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4MDYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJXS0luc3Bl
Y3RvclByaXZhdGVNYWMuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIK
LSNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUGFnZUdy
b3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3Rvcklu
dGVybmFsLmgiCi0jaW1wb3J0ICJfV0tJbnNwZWN0b3JXaW5kb3cuaCIKLSNpbXBvcnQgPFNlY3Vy
aXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJpdHlJbnRl
cmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJ
bmZvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8d3RmL3RleHQv
QmFzZTY0Lmg+Ci0KLXN0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0eWxlTWFzayA9IE5T
V2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9zYWJsZSB8IE5TV2lu
ZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFza1Jlc2l6YWJsZSB8
IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVDb250ZW50VmlldzsKLQotLy8gVGhlIHRpbWUgd2Ug
a2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQgaXRzIHByb2Nlc3Mu
Ci0vLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRpbWUgZm9yIHBlb3Bs
ZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0aGUgSW5zcGVjdG9yLgotc3RhdGljIGNvbnN0IFNl
Y29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7IDFfbWluIH07Ci0KLXN0YXRpYyB2b2lkKiBrV2lu
ZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCA9ICZrV2luZG93Q29udGVudExheW91dE9i
c2VydmVyQ29udGV4dDsKLQotQGludGVyZmFjZSBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0
ZXIgKCkgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZT4KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6
V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OwotLSAodm9pZClpbnZhbGlkYXRlOwot
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIg
ewotICAgIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKLX0KLQot
LSAoV0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9yUmVmCi17Ci0gICAgcmV0dXJuIHRvQVBJKF9pbnNw
ZWN0b3JQcm94eSk7Ci19Ci0KLS0gKF9XS0luc3BlY3RvciAqKWluc3BlY3RvcgotewotICAgIGlm
IChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyKCpfaW5zcGVjdG9yUHJv
eHkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYklu
c3BlY3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQot
ewotICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yUHJveHksIGluc3BlY3RvclByb3h5KTsKLQotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
Ly8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBfaW5zcGVjdG9y
UHJveHkgPSBpbnNwZWN0b3JQcm94eTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWludmFsaWRhdGUKLXsKLSAgICBfaW5zcGVjdG9yUHJveHkgPSBudWxscHRyOwotfQotCi0tIChO
U1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5k
b3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQ
cm94eSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVl
dFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAw
KTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRNb3ZlOihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAg
ICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9p
ZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFt
ZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBf
aW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxs
U2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVj
dG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENo
YW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVuOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAg
IF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2
b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmlj
YXRpb24KLXsKLSAgICAvLyBSZXNpemluZyB0aGUgdmlld3Mgd2hpbGUgaW5zaWRlIHRoaXMgbm90
aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIHdoZW4gZW50ZXJpbmcKLSAgICAvLyBv
ciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSB0
aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBvbmx5Ci0gICAgLy8gZGVwZW5kIG9uIHRoaXMgZm9y
IGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxsIGRlbGF5IGlzbid0
IHRlcnJpYmxlLiBNb3N0Ci0gICAgLy8gb2YgdGhlIHRpbWUgdGhlIHZpZXdzIHdpbGwgYWxyZWFk
eSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNpemluZyBtYXNrcy4K
LQotICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICAgICAg
X2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB9KTsK
LX0KLQotLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGgg
b2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZhbHVlQ2hhbmdl
S2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKLXsKLSAgICBpZiAoY29u
dGV4dCAhPSBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCkgewotICAgICAgICBb
c3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0Om9iamVjdCBjaGFu
Z2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0OwotICAgIEFTU0VSVChbd2luZG93IGlzS2luZE9m
Q2xhc3M6W05TV2luZG93IGNsYXNzXV0pOwotICAgIGlmICh3aW5kb3cuaW5MaXZlUmVzaXplKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKLSAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hh
bmdlKCk7Ci0gICAgfSk7Ci19Ci0KLS8vIE1BUks6IFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0
b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250
cm9sbGVyCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclBy
b3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0KLS0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3Bl
Y3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9pbnNwZWN0b3JQcm94eSA/IF9pbnNw
ZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6IGZhbHNlOwotfQotCi0tICh2b2lkKWluc3BlY3Rv
clZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAg
ICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1l
bnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5k
b3cpOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93
OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsK
LSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFj
aG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5k
b3cpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdl
KE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KQotewotICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQo
KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpvbGRWaWV3XTsK
LSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1f
b2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURp
ZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5l
d1ZpZXddOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkKLSAgICAgICAgYXR0YWNoKG1fYXR0YWNo
bWVudFNpZGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50V2lsbE1v
dmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpCi17Ci0gICAgaWYgKG1faXNPYnNlcnZp
bmdDb250ZW50TGF5b3V0UmVjdCkgewotICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91
dFJlY3QgPSBmYWxzZTsKLSAgICAgICAgW29sZFdpbmRvdyByZW1vdmVPYnNlcnZlcjptX29iakNB
ZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgY29udGV4dDprV2lu
ZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07Ci0gICAgfQotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5k
b3cpCi17Ci0gICAgaWYgKG1faXNBdHRhY2hlZCAmJiAhIW5ld1dpbmRvdykgewotICAgICAgICBt
X2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSB0cnVlOwotICAgICAgICBbbmV3V2luZG93
IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlv
dXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29u
dGV4dF07Ci0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwotICAgIH0KLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBj
b25zdAotewotICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVjdGlvbkxldmVsKCk7Ci0gICAgaWYgKGxldmVsID4g
MSkgewotICAgICAgICBOU1N0cmluZyAqZGVidWdUaXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3IgWyVkXSDigJQgJUAiLCAiV2ViIElu
c3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBpbnNwZWN0aW5nIFdlYiBJbnNwZWN0b3IiKSwgbGV2
ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93
IHNldFRpdGxlOmRlYnVnVGl0bGVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TU3RyaW5nICp0
aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNw
ZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAq
KW1fdXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOnRpdGxl
XTsKLSAgICB9Ci19Ci0KLVJldGFpblB0cjxOU1dpbmRvdz4gV2ViSW5zcGVjdG9yUHJveHk6OmNy
ZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFy
Z2V0VHlwZSB0YXJnZXRUeXBlKQotewotICAgIE5TUmVjdCB3aW5kb3dGcmFtZSA9ICFOU0lzRW1w
dHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2ZWRXaW5kb3dGcmFtZSA6IE5TTWFrZVJlY3Qo
MCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0KTsKLSAgICBhdXRv
IHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0b3JXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29u
dGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNrOndpbmRvd1N0eWxlTWFzayBiYWNraW5nOk5T
QmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKLSAgICBbd2luZG93IHNldE1pblNpemU6
TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKLSAg
ICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0gICAgW3dpbmRvdyBzZXRDb2xs
ZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29s
bGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1hcnkpXTsKLQotICAgIGJvb2wgZm9yUmVtb3Rl
VGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlOwotICAg
IFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZvclJlbW90ZVRhcmdldF07Ci0KLSAgICBDR0Zs
b2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSA9IChbd2luZG93IHNjcmVlbl0uZnJhbWUu
c2l6ZS53aWR0aCAvIDIpIC0gNDsKLSAgICBDR0Zsb2F0IG1pbmltdW1GdWxsU2NyZWVuV2lkdGgg
PSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSk7Ci0g
ICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29udGVudFNpemU6TlNNYWtlU2l6ZShtaW5pbXVt
RnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07Ci0gICAgW3dpbmRvdyBzZXRD
b2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93
Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFsbG93c1RpbGluZyldOwotCi0gICAgW3dpbmRv
dyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVudDpZRVNdOwotCi0gICAgLy8gQ2VudGVyIHRo
ZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdhcyBlbXB0eS4KLSAgICBpZiAoTlNJc0VtcHR5
UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKLSAgICAgICAgW3dpbmRvdyBjZW50ZXJdOwotCi0gICAg
cmV0dXJuIHdpbmRvdzsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkp
OwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1fY2xvc2VGcm9udGVuZEFm
dGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250
cm9sbGVyKSB7Ci0gICAgICAgIEFTU0VSVChtX29iakNBZGFwdGVyKTsKLSAgICAgICAgcmV0dXJu
IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKLSAgICB9
Ci0KLSAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLV2ViSW5zcGVjdG9yUHJveHlPYmpD
QWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7Ci0gICAgTlNW
aWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50
VmlldygpOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmll
d0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBv
YmplY3Q6aW5zcGVjdGVkVmlld107Ci0KLSAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0g
YWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVj
dGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsKLSAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgIFdlYlBhZ2VQ
cm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXdd
LT5fcGFnZS5nZXQoKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0KLSAgICByZXR1cm4g
aW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVh
dGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7Ci0K
LSAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3BlY3RlZFBhZ2UoKS0+
cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotICAgIE5T
UmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRvd0ZyYW1l
U3RyaW5nKTsKLQotICAgIG1faW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNy
ZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBl
OjpMb2NhbCk7Ci0gICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0
ZXIuZ2V0KCldOwotCi0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFttX2lu
c3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107Ci0gICAgaW5zcGVjdG9yVmlldy5mcmFtZSA9IFtj
b250ZW50VmlldyBib3VuZHNdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Omluc3BlY3Rv
clZpZXddOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVCghbV9p
c0F0dGFjaGVkIHx8ICFtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlcikgewotICAgICAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQo
KSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0g
bmlsOwotICAgIH0KLQotICAgIGlmIChtX29iakNBZGFwdGVyKSB7Ci0gICAgICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRl
ci5nZXQoKV07Ci0KLSAgICAgICAgW21fb2JqQ0FkYXB0ZXIgaW52YWxpZGF0ZV07Ci0gICAgICAg
IG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpCi17Ci0gICAgY2xvc2VG
cm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7
Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBb
bV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5p
bDsKLSAgICB9Ci0KLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdGFy
dE9uZVNob3Qod2ViVmlld0Nsb3NlVGltZW91dCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbV9jbG9zZUZyb250ZW5kQWZ0
ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBt
X2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBjbG9zZUZy
b250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUo
KQotewotICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewot
ICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21f
aW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7
Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUo
KQotewotICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5kZWxl
dGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0b3IgaXMg
bm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdpbmRvdyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcsCi0gICAg
Ly8gdGhlbiB3ZSBuZWVkIHRvIHJlb3BlbiB0aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBhdHRhY2hl
ZCB0byB0aGUgcmlnaHQgd2luZG93LgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGRyYWdn
aW5nIHRhYnMgdG8gYW5vdGhlciB3aW5kb3cgaW4gU2FmYXJpLgotICAgIGlmIChtX2lzQXR0YWNo
ZWQgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93ICE9IGluc3Bl
Y3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSkgewotICAgICAgICBvcGVuKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+
OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBm
cm9udCwgb25seSBpdHMgd2luZG93LgotICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3
ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLSAgICBbW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpbbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XV07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgW2luc3Bl
Y3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwot
fQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIC8v
IEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgcmV0dXJuIGZh
bHNlIGZvciBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSwgb25seSBhIGJhY2tncm91bmQgd2lu
ZG93LgotICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3ZWJWaWV3XS53aW5kb3cuaXNNYWluV2luZG93OwotfQotCi1ib29sIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpCi17Ci0gICAg
TlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2ht
ZW50VmlldygpOwotICAgIGlmIChbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3SXNJbnNw
ZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZpZXddKQotICAgICAgICByZXR1cm4gd2ViUHJvY2Vzc0Nh
bkF0dGFjaDsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQg
PSAyNTA7Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlv
ID0gMC43NTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1
MDA7Ci0KLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVkVmlldy5mcmFt
ZTsKLQotICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodCA9IE5TSGVpZ2h0KGluc3BlY3Rl
ZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICByZXR1cm4gbWlu
aW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0
YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2
YWlsYWJsZSkKLXsKLSAgICAvLyBEbyBub3RoaW5nLgotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
Ci17Ci0gICAgbV91cmxTdHJpbmcgPSB1cmxTdHJpbmc7Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JX
aW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dD
ZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAg
ICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWluUHRyPFNG
Q2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmlj
YXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIE5TV2luZG93ICp3aW5kb3c7Ci0gICAgaWYg
KG1faW5zcGVjdG9yV2luZG93KQotICAgICAgICB3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5n
ZXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpbmRvdyA9IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XSB3aW5kb3ddOwotCi0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHdpbmRv
dyA9IFtOU0FwcCBrZXlXaW5kb3ddOwotCi0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElP
TikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2Rh
bERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1
c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAgIFtj
ZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6
bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6
KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZ
RVNdOwotI2VuZGlmCi0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVz
dCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBk
b2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCi0gICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmlj
YXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107Ci0gICAgW2NlcnRp
ZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNl
dEVkaXRhYmxlVHJ1c3Q6Tk9dOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFp
bHM6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Ym9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0
eSgpKTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFs
VVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOwotICAgIGlmICghcGxhdGZvcm1VUkwpIHsK
LSAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxd
OwotICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUg
d2UgY2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJM
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxv
dy4KLSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKLSAgICBTdHJp
bmcgY29udGVudENvcHkgPSBjb250ZW50OwotCi0gICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJM
ICphY3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgbV9z
dWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsK
LQotICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJh
c2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9j
XSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKLSAgICAgICAg
ICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFs
VVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5V
TExdOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0gICAgfTsKLQotICAgIGlmICghZm9yY2VTYXZl
RGlhbG9nKSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBh
bmVsXTsKLSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQ
YXRoQ29tcG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVh
ZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKLSAgICAvLyBjYW4gcHJvdmlkZSBhIGdv
b2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAgIC8v
IGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRo
ZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKLSAgICAgICAgcGFuZWwu
ZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVu
dF07Ci0KLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7
Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsK
LSAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0gICAgfTsKLQotICAgIE5TV2luZG93ICp3
aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVjdG9yV2luZG93LmdldCgpIDogW05T
QXBwIGtleVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3BhbmVsIGJlZ2luU2hl
ZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRs
ZXJdOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFs
XSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgQVNTRVJU
KCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGFj
dHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0g
ICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVk
IHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlmICghYWN0dWFsVVJMKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhh
bmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hh
bmRsZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRh
dGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW2hhbmRsZSBjbG9z
ZUZpbGVdOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1f
aW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
Ojp3aW5kb3dGcmFtZURpZENoYW5nZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOwot
ICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsK
LQotICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3Rvcldp
bmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5nID0gTlNT
dHJpbmdGcm9tUmVjdChbbV9pbnNwZWN0b3JXaW5kb3cgZnJhbWVdKTsKLSAgICBpbnNwZWN0ZWRQ
YWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yV2luZG93RnJhbWUo
ZnJhbWVTdHJpbmcpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGdWxsU2Ny
ZWVuRGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7Ci0gICAgQVNTRVJU
KG1faXNWaXNpYmxlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgaWYg
KG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2Fu
QXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uKQotewot
ICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0F0
dGFjaGVkKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhdHRhY2ggYXZhaWxhYmlsaXR5IGNo
YW5nZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIGluIGNhc2UKLSAgICAgICAgLy8gdGhlIGF0
dGFjaG1lbnQgdmlldyBpcyBub3QgdGhlIFdLVmlldy4KLSAgICAgICAgYXR0YWNoQXZhaWxhYmls
aXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9y
QXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3
RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOwotICAgIE5TUmVjdCBvbGRJbnNwZWN0b3JWaWV3
RnJhbWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1lOwotICAgIE5TUmVjdCBuZXdJbnNwZWN0b3JWaWV3
RnJhbWUgPSBOU1plcm9SZWN0OwotICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNwZWN0ZWRW
aWV3LnN1cGVydmlldy5ib3VuZHM7Ci0gICAgQ0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9wID0gTlNN
YXhZKGluc3BlY3RlZFZpZXdGcmFtZSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUp
IHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKLSAgICAgICAgaWYgKCFjdXJy
ZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TSGVpZ2h0KG9s
ZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRIZWlnaHQgPSBO
U0hlaWdodChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvckhlaWdodCA9
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dI
ZWlnaHQoY3VycmVudERpbWVuc2lvbiwgcGFyZW50SGVpZ2h0KTsKLQotICAgICAgICAvLyBQcmVz
ZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGlu
IFNhZmFyaSBzdGlsbCB3b3JrLgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VS
ZWN0KDAsIGluc3BlY3RvckhlaWdodCwgTlNXaWR0aChwYXJlbnRCb3VuZHMpLCBpbnNwZWN0ZWRW
aWV3VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1l
ID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSksIGluc3BlY3Rv
ckhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OlJpZ2h0OiB7Ci0gICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKLSAgICAgICAgICAg
IGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAg
ICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKLSAgICAg
ICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRX
aWR0aCk7Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5z
cGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVz
ZSB0aGF0Ci0gICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNp
bmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmll
dy4KLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBwYXJlbnRX
aWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAgICAgICAgbmV3SW5z
cGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdChwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRo
LCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7Ci0KLSAgICAgICAg
aWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgewot
ICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3Vw
ZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9t
VmlldzpuaWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNl
Y3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OkxlZnQ6IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3Vy
cmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAg
ICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOwotICAgICAgICBD
R0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29u
c3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRo
KTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0
ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRo
YXQKLSAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2Ug
dGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3Lgot
ICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KGluc3BlY3RvcldpZHRoLCAw
LCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAgICAg
ICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0b3JXaWR0
aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNw
ZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0
IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0
Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAg
ICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoTlNFcXVhbFJlY3RzKG9sZEluc3BlY3RvclZp
ZXdGcmFtZSwgbmV3SW5zcGVjdG9yVmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVjdHMoW2luc3BlY3Rl
ZFZpZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3RnJhbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJzIGZvciBi
b3RoIHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgotICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBkaXNh
YmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOwotCi0gICAgW2luc3BlY3RvclZpZXcgc2V0RnJh
bWU6bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsKLSAgICBbaW5zcGVjdGVkVmlldyBzZXRGcmFtZTpp
bnNwZWN0ZWRWaWV3RnJhbWVdOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmll
dyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBOU1Jl
Y3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdodCk7Ci19
Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dp
ZHRoKCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmlu
c3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0g
W2luc3BlY3RlZFZpZXcgZnJhbWVdOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQXR0YWNoKCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNw
ZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgV0tXZWJWaWV3ICpp
bnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0KLSAg
ICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNl
dERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAg
ICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAgIH0KLQotICAgIFtpbnNwZWN0b3JWaWV3
IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uOwot
ICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OkJvdHRvbToKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1Zp
ZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVu
c2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgotICAg
ICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFi
bGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgW2luc3BlY3Rv
clZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWF4
WE1hcmdpbl07Ci0gICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVy
ZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShjdXJyZW50RGltZW5zaW9uKTsKLQot
ICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXcgcG9z
aXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86aW5zcGVjdGVkVmlld107Ci0gICAgW2lu
c3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3XTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIE5TVmll
dyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZp
ZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZp
ZXddOwotCi0gICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0
aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHdlIHNpemUgdGhlIGluc3BlY3RlZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5nIHNvIHRo
YXQgaXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRoYXQgdGhlCi0gICAgLy8gYXR0YWNoZWQgaW5zcGVj
dG9yIHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2
aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCi0KLSAgICBpbnNwZWN0ZWRWaWV3
LmZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3
LmJvdW5kcyksIE5TTWF4WShpbnNwZWN0ZWRWaWV3LmZyYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4g
ZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2Fz
IGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBh
bmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAg
IGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0ZWRWaWV3
RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlmICgh
bV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVE
aWRDaGFuZ2Uod2lkdGgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNl
dFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSBy
ZWN0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJh
ZygpCi17Ci0gICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLT5z
dGFydFdpbmRvd0RyYWcoKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JQYWdlVVJMKCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdp
dGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0gICAgaWYgKCFidW5k
bGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5nICpwYXRoID0gW2J1
bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJNYWluIiBvZlR5cGU6QCJodG1sIl07Ci0gICAgQVNTRVJU
KHBhdGggJiYgcGF0aC5sZW5ndGgpOwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVj
dG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5k
bGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAg
ICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gV2UgbWln
aHQgbm90IGhhdmUgYSBUZXN0Lmh0bWwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCi0gICAgTlNTdHJp
bmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIlRlc3QiIG9mVHlwZTpAImh0bWwi
XTsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVy
biBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3Ry
aW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQot
ewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6
QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgTlNTdHJpbmcgKnBhdGggPSBidW5kbGUucmVzb3VyY2VQ
YXRoOwotICAgIEFTU0VSVChwYXRoICYmIHBhdGgubGVuZ3RoKTsKLQotICAgIHJldHVybiBbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6WUVTXS5hYnNvbHV0ZVN0cmluZzsK
LX0KLQotc3RhdGljIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvblBsaXN0KCkKLXsKLSAgICBO
U1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJ
bkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlFUykgb2Jq
ZWN0QXRJbmRleDowXTsKLSAgICBOU1N0cmluZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0aCA9IFtz
eXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb3JlU2Vy
dmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJdOwotICAgIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVy
c2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZpbGU6c3lz
dGVtVmVyc2lvblBsaXN0UGF0aF07Ci0gICAgcmV0dXJuIHN5c3RlbVZlcnNpb25JbmZvOwotfQot
Ci1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVn
Z2FibGUoKQotewotICAgIE5TRGljdGlvbmFyeSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9uUGxpc3Qo
KTsKLQotICAgIERlYnVnZ2FibGVJbmZvRGF0YSByZXN1bHQ7Ci0gICAgcmVzdWx0LmRlYnVnZ2Fi
bGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKLSAgICByZXN1bHQu
dGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1hY09TIl9zOwotICAgIHJlc3VsdC50YXJnZXRCdWlsZFZl
cnNpb24gPSBwbGlzdFtAIlByb2R1Y3RCdWlsZFZlcnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0
UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24iXTsKLSAg
ICByZXN1bHQudGFyZ2V0SXNTaW11bGF0b3IgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlZTVjZGZmMzgu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rv
ckNsaWVudC5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJB
UElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Lmgi
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZp
bmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJl
bW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCBDb25uZWN0aW9uSUQgY29ubmVj
dGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1
Z2dhYmxlVHlwZSkKLSAgICAgICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpj
cmVhdGUoKSkKLSAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCi0g
ICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQotICAgICAgICAsIG1fdGFyZ2V0
SUQodGFyZ2V0SUQpCi0gICAgICAgICwgbV9kZWJ1Z2dhYmxlVHlwZShkZWJ1Z2dhYmxlVHlwZSkK
LSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICB9Ci0KLSAgICB+
UmVtb3RlSW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50
KG51bGxwdHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAg
dm9pZCBsb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcv
Yi8yMDU1Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBk
ZWJ1ZyB0YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1Z2dhYmxl
SW5mbyA9IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVt
cHR5KCkpOwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUobV9kZWJ1
Z2dhYmxlVHlwZSk7Ci0gICAgICAgIG1fcHJveHktPmxvYWQoV1RGTW92ZShkZWJ1Z2dhYmxlSW5m
byksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21tYW5kc1VSTCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2hvdygpOwotICAgIH0KLQot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAg
ICB7Ci0gICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNzYWdl
VG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdlKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1f
aW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlvbklELCBtX3Rhcmdl
dElEKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5
PiBtX3Byb3h5OwotICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7
Ci0gICAgQ29ubmVjdGlvbklEIG1fY29ubmVjdGlvbklEOwotICAgIFRhcmdldElEIG1fdGFyZ2V0
SUQ7Ci0gICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBtX2RlYnVnZ2FibGVUeXBlOwotfTsK
LQotUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoVVJMIHVybCwg
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQotICAgIDogbV9vYnNlcnZlcihvYnNl
cnZlcikKLXsKLSAgICBpZiAoIXVybC5ob3N0KCkgfHwgIXVybC5wb3J0KCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJJbnZhbGlkIGluc3BlY3RvciB1cmw6ICVzIiwgdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uSUQg
PSBjb25uZWN0SW5ldCh1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5wb3J0KCkudmFsdWUo
KSk7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb25JRCkgewotICAgICAgICBMT0dfRVJST1IoIkluc3Bl
Y3RvciBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGFydEluaXRpYWxDb21t
dW5pY2F0aW9uKCk7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUluc3BlY3Rv
ckNsaWVudCgpCi17Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kV2ViSW5z
cGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25JRC5oYXNWYWx1ZSgpKTsKLSAgICBhdXRv
IG1lc3NhZ2UgPSBldmVudC51dGY4KCk7Ci0gICAgc2VuZChtX2Nvbm5lY3Rpb25JRC52YWx1ZSgp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRhdGEoKSksIG1lc3Nh
Z2UubGVuZ3RoKCkpOwotfQotCi1IYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6ZGlzcGF0Y2hNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFu
ZGxlcj4oewotICAgICAgICB7ICJCYWNrZW5kQ29tbWFuZHMiX3MsIHN0YXRpY19jYXN0PENhbGxI
YW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpIH0sCi0g
ICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KSB9LAotICAgICAgICB7ICJTZW5kTWVz
c2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCi0gICAgfSk7Ci0KLSAgICByZXR1
cm4gZGlzcGF0Y2hNYXA7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzdGFydElu
aXRpYWxDb21tdW5pY2F0aW9uKCkKLXsKLSAgICBhdXRvIGV2ZW50ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBldmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwSW5zcGVjdG9y
Q2xpZW50Il9zKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25DbG9zZWQo
KQotewotICAgIG1fdGFyZ2V0cy5jbGVhcigpOwotICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xl
YXIoKTsKLSAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOwotICAgIG1fb2Jz
ZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKQotewotICAgIGNhbGxPbk1haW5UaHJlYWQo
W3RoaXNdIHsKLSAgICAgICAgY29ubmVjdGlvbkNsb3NlZCgpOwotICAgIH0pOwotfQotCi12b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklE
LCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxl
VHlwZSkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5zdXJl
KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVjdGlv
bklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGVdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBk
ZWJ1Z2dhYmxlVHlwZSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5
KSB7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3coKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2V0dXBFdmVudCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwIl9zKTsK
LSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25J
RCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsK
LSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoc2V0dXBFdmVudC0+dG9KU09OU3RyaW5nKCkpOwot
Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOwotfQotCi12b2lkIFJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklEIGNvbm5l
Y3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBhdXRvIGJhY2tlbmRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgYmFja2Vu
ZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiX3MpOwot
ICAgIGJhY2tlbmRFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9u
SUQpOwotICAgIGJhY2tlbmRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElE
KTsKLSAgICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSk7Ci0g
ICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGJhY2tlbmRFdmVudC0+dG9KU09OU3RyaW5nKCkpOwot
fQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVj
dGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCi17Ci0gICAgYXV0byBjbG9z
ZWRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgY2xvc2VkRXZlbnQtPnNldFN0
cmluZygiZXZlbnQiX3MsICJGcm9udGVuZERpZENsb3NlIl9zKTsKLSAgICBjbG9zZWRFdmVudC0+
c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOwotICAgIGNsb3NlZEV2
ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAgIHNlbmRXZWJJbnNw
ZWN0b3JFdmVudChjbG9zZWRFdmVudC0+dG9KU09OU3RyaW5nKCkpOwotCi0gICAgbV9pbnNwZWN0
b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkp
OwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNv
bnN0IEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVz
c2FnZS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2JhY2tlbmRDb21tYW5k
c1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRF
bmNvZGUoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWV2
ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSwgbWVzc2FnZVZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdlQXJyYXk7Ci0gICAg
aWYgKCFtZXNzYWdlVmFsdWUtPmFzQXJyYXkobWVzc2FnZUFycmF5KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVmVjdG9yPFRhcmdldD4gdGFyZ2V0TGlzdDsKLSAgICBmb3IgKGF1dG8mIGl0ZW1W
YWx1ZSA6ICptZXNzYWdlQXJyYXkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRl
bU9iamVjdDsKLSAgICAgICAgaWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVGFyZ2V0IHRhcmdldDsKLSAgICAgICAg
aWYgKCFpdGVtT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0LmlkKQotICAg
ICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygibmFtZSJfcywgdGFyZ2V0Lm5hbWUp
Ci0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHRhcmdldC51
cmwpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0YXJn
ZXQudHlwZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB0YXJnZXRMaXN0LmFw
cGVuZChXVEZNb3ZlKHRhcmdldCkpOwotICAgIH0KLQotICAgIGF1dG8gY29ubmVjdGlvbklEID0g
ZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCk7Ci0KLSAgICAvLyBGaW5kIGNsb3NlZCB0YXJnZXRz
IHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3RvcjxUYXJnZXRJRCwgND4gdGFyZ2V0c1RvUmVtb3Zl
OwotICAgIGZvciAoYXV0byYgcGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5cygpKSB7Ci0g
ICAgICAgIGlmIChwYWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0
YXJnZXQgOiB0YXJnZXRMaXN0KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IHBhaXIu
c2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZCkK
LSAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5hcHBlbmQocGFpci5zZWNvbmQpOwotICAgIH0K
LSAgICBmb3IgKGF1dG8mIHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQotICAgICAgICBtX2lu
c3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdl
dElEKSk7Ci0KLSAgICBtX3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRM
aXN0KSk7Ci0gICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZv
aWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZl
bnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC50YXJn
ZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcm94
eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rp
b25JRC52YWx1ZSgpLCBldmVudC50YXJnZXRJRC52YWx1ZSgpKSk7Ci0gICAgaWYgKCFwcm94eSkg
ewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZXZlbnQubWVzc2FnZS52YWx1ZSgp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1
MWQ2M2RlYTAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRyb2xsYWJsZVRhcmdl
dC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25D
bGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OwotY2xhc3MgUmVtb3Rl
SW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50Jikg
PSAwOwotfTsKLQotdXNpbmcgQ29ubmVjdGlvbklEID0gSW5zcGVjdG9yOjpDb25uZWN0aW9uSUQ7
Ci11c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rvcjo6VGFyZ2V0SUQ7Ci0KLWNsYXNzIFJlbW90ZUlu
c3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNv
bm5lY3Rpb25DbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6
Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIm
KTsKLSAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHVwZGF0ZSB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHRvIHVzZSBEZWJ1Z2dhYmxlVHlwZSBp
bnN0ZWFkIG9mIFN0cmluZyBmb3IgdGhlIHRhcmdldCB0eXBlLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNDcKLSAgICBzdHJ1Y3QgVGFyZ2V0IHsK
LSAgICAgICAgVGFyZ2V0SUQgaWQ7Ci0gICAgICAgIFN0cmluZyB0eXBlOwotICAgICAgICBTdHJp
bmcgbmFtZTsKLSAgICAgICAgU3RyaW5nIHVybDsKLSAgICB9OwotCi0gICAgY29uc3QgSGFzaE1h
cDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0czsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KLQotICAgIHZvaWQgaW5zcGVjdChD
b25uZWN0aW9uSUQsIFRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlKTsKLSAgICB2
b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0IFN0
cmluZyYpOwotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklELCBUYXJnZXRJ
RCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlbW90ZUlu
c3BlY3RvckNsaWVudD47Ci0KLSAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKTsK
LSAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKLQotICAgIHZvaWQgc2V0VGFyZ2V0TGlzdChj
b25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2ZW50
Jik7Ci0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmKTsKLQotICAgIHZv
aWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBmaW5hbDsKLSAgICBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIGZpbmFsOwotCi0gICAgdm9pZCBzZW5kV2ViSW5zcGVj
dG9yRXZlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNV
Ukw7Ci0gICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7Ci0gICAgT3B0aW9u
YWw8Q29ubmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKLSAgICBIYXNoTWFwPENvbm5lY3Rpb25J
RCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPHN0ZDo6cGFpcjxDb25u
ZWN0aW9uSUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5
Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmM0NTVkM2U2Mi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
LQotI2luY2x1ZGUgIkFQSUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24u
aCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudFdvcmxkLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViU2NyaXB0TWVz
c2FnZUhhbmRsZXIuaCIKLSNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jbGFzcyBTY3JpcHRNZXNzYWdlQ2xpZW50
IGZpbmFsIDogcHVibGljIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpDbGllbnQgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFNjcmlwdE1lc3NhZ2VDbGllbnQo
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIp
Ci0gICAgICAgIDogbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyKSB7IH0KLQotICAgIH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9Ci0KLSAgICB2b2lk
IGRpZFBvc3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZvRGF0YSYmLCBXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIGF1dG8gdG9rZW5zID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlLnRv
U3RyaW5nKCkuc3BsaXQoIjoiKTsKLSAgICAgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBVUkwgcmVxdWVzdFVSTCB7IHsgfSwgcGFnZS5w
YWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIuaW5zcGVjdChyZXF1ZXN0VVJMLmhvc3RBbmRQb3J0KCksIHRva2Vuc1swXS50b1VJbnRTdHJp
Y3QoKSwgdG9rZW5zWzFdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMl0pOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1faW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyOwotfTsKLQotY2xhc3MgTG9hZGVyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQ
STo6TG9hZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBMb2FkZXJDbGllbnQoRnVuY3Rpb248dm9pZCgpPiYmIGxvYWRlZENhbGxiYWNrKQotICAg
ICAgICA6IG1fbG9hZGVkQ2FsbGJhY2sgeyBXVEZNb3ZlKGxvYWRlZENhbGxiYWNrKSB9IHsgfQot
Ci0gICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBX
ZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCopIGZp
bmFsCi0gICAgewotICAgICAgICBtX2xvYWRlZENhbGxiYWNrKCk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9sb2FkZWRDYWxsYmFjazsKLX07Ci0KLXN0YXRpYyBP
cHRpb25hbDxJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlPiBwYXJzZURlYnVnZ2FibGVUeXBlRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmIGRlYnVnZ2FibGVUeXBlU3RyaW5nKQotewotICAgIGlmIChk
ZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAiamF2YXNjcmlwdCJfcykKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OkphdmFTY3JpcHQ7Ci0gICAgaWYgKGRlYnVnZ2FibGVU
eXBlU3RyaW5nID09ICJwYWdlIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dh
YmxlVHlwZTo6UGFnZTsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInNlcnZpY2Ut
d29ya2VyIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6U2Vy
dmljZVdvcmtlcjsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gIndlYi1wYWdlIl9z
KQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKLQot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyOjppbnNwZWN0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25J
RCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpCi17
Ci0gICAgYXV0byBkZWJ1Z2dhYmxlVHlwZSA9IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5n
KHR5cGUpOwotICAgIGlmICghZGVidWdnYWJsZVR5cGUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJV
bmtub3duIGRlYnVnZ2FibGUgdHlwZTogXCIlc1wiIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvckNsaWVudCkKLSAgICAg
ICAgbV9pbnNwZWN0b3JDbGllbnQtPmluc3BlY3QoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVi
dWdnYWJsZVR5cGUudmFsdWUoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyOjpydW5TY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCi17Ci0gICAgbV9wYWdlLnJ1
bkphdmFTY3JpcHRJbk1haW5GcmFtZSh7IHNjcmlwdCwgZmFsc2UsIFdURjo6bnVsbG9wdCwgZmFs
c2UgfSwgCi0gICAgICAgIFtdKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgT3B0aW9uYWw8
V2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscz4gZXhjZXB0aW9uRGV0YWlscywgQ2FsbGJhY2tCYXNl
OjpFcnJvcikgewotICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpCi0gICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gcnVubmluZyBzY3JpcHQgXCIlc1wiIiwgZXhjZXB0
aW9uRGV0YWlscy0+bWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUlu
c3BlY3RvckNsaWVudCYgY2xpZW50KQotewotICAgIFN0cmluZ0J1aWxkZXIgaHRtbDsKLSAgICBp
ZiAoY2xpZW50LnRhcmdldHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGh0bWwuYXBwZW5kKCI8cD5O
byB0YXJnZXRzIGZvdW5kPC9wPiJfcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGh0bWwuYXBwZW5k
KCI8dGFibGU+Iik7Ci0gICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50LnRh
cmdldHMoKS5rZXlzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogY2xpZW50
LnRhcmdldHMoKS5nZXQoY29ubmVjdGlvbklEKSkgewotICAgICAgICAgICAgICAgIGh0bWwuYXBw
ZW5kKG1ha2VTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRyPiIKLSAgICAg
ICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0bmFt
ZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVybFwiPiIsIHRh
cmdldC51cmwsICI8L2Rpdj48L3RkPiIKLSAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1c
ImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNsaWNr
PVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdlKFxc
JyIsIGNvbm5lY3Rpb25JRCwgIjoiLCB0YXJnZXQuaWQsICI6IiwgdGFyZ2V0LnR5cGUsICJcXCcp
O1wiPjwvdGQ+IgotICAgICAgICAgICAgICAgICAgICAiPC90cj48L3Rib2R5PiIKLSAgICAgICAg
ICAgICAgICApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBodG1sLmFwcGVu
ZCgiPC90YWJsZT4iKTsKLSAgICB9Ci0gICAgbV90YXJnZXRMaXN0c0h0bWwgPSBodG1sLnRvU3Ry
aW5nKCk7Ci0gICAgaWYgKG1fcGFnZUxvYWRlZCkKLSAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgp
OwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6dXBkYXRlVGFyZ2V0
TGlzdCgpCi17Ci0gICAgaWYgKCFtX3RhcmdldExpc3RzSHRtbC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgcnVuU2NyaXB0KG1ha2VTdHJpbmcoInVwZGF0ZVRhcmdldHMoYCIsIG1fdGFyZ2V0TGlzdHNI
dG1sLCAiYCk7IikpOwotICAgICAgICBtX3RhcmdldExpc3RzSHRtbCA9IHsgfTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpwbGF0Zm9ybVN0YXJ0VGFz
ayhXZWJQYWdlUHJveHkmIHBhZ2VQcm94eSwgV2ViVVJMU2NoZW1lVGFzayYgdGFzaykKLXsKLSAg
ICBhdXRvJiByZXF1ZXN0VVJMID0gdGFzay5yZXF1ZXN0KCkudXJsKCk7Ci0KLSAgICAvLyBEZXN0
cm95IHRoZSBjbGllbnQgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24gc28gaXQgY2Fu
IGNvbm5lY3QgdG8gdGhlIHNhbWUgcG9ydAotICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbnVsbHB0
cjsKLSAgICBtX2luc3BlY3RvckNsaWVudCA9IG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50PihyZXF1ZXN0VVJMLCAqdGhpcyk7Ci0KLSAgICAvLyBTZXR1cCB0YXJnZXQgcG9zdE1lc3Nh
Z2UgbGlzdGVuZXIKLSAgICBhdXRvIGhhbmRsZXIgPSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6
Y3JlYXRlKG1ha2VVbmlxdWU8U2NyaXB0TWVzc2FnZUNsaWVudD4oKnRoaXMpLCAiaW5zcGVjdG9y
IiwgQVBJOjpVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKLSAgICBwYWdlUHJveHku
cGFnZUdyb3VwKCkudXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdE1lc3NhZ2VI
YW5kbGVyKGhhbmRsZXIuZ2V0KCkpOwotCi0gICAgLy8gU2V0dXAgbG9hZGVyIGNsaWVudCB0byBn
ZXQgbm90aWZpZWQgb2YgcGFnZSBsb2FkCi0gICAgbV9wYWdlLnNldExvYWRlckNsaWVudChtYWtl
VW5pcXVlPExvYWRlckNsaWVudD4oW3RoaXNdIHsKLSAgICAgICAgbV9wYWdlTG9hZGVkID0gdHJ1
ZTsKLSAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOwotICAgIH0pKTsKLSAgICBtX3BhZ2VMb2Fk
ZWQgPSBmYWxzZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7Ci0gICAgaHRtbEJ1
aWxkZXIuYXBwZW5kKAotICAgICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0
b3I8L3RpdGxlPiIKLSAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBj
b250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz4iCi0gICAgICAgICI8c3R5bGU+
IgotICAgICAgICAiICBoMSB7IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3
aGl0ZTsgbWFyZ2luLWJvdHRvbTogMDsgfSIKLSAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5
OiAtd2Via2l0LXN5c3RlbS1mb250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBw
YWRkaW5nOiAyMHB4IDIwcHggMCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCi0g
ICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1z
dG9wKDEsICNmNmY2ZjQpKTsiCi0gICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEw
MCUgNWVtOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IgotICAgICAgICAiICB0YWJs
ZSB7IHdpZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB0YWJsZS1sYXlvdXQ6
IGZpeGVkOyB9IgotICAgICAgICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNk
N2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9IgotICAgICAgICAi
ICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKLSAgICAgICAgIiAgdGQgeyBwYWRkaW5nOiAx
NXB4OyB9IgotICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9IgotICAgICAgICAi
ICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0
ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9IgotICAgICAgICAiICAu
dGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IGJhY2tncm91bmQ6ICNlZWU7IHdvcmQtd3JhcDog
YnJlYWstd29yZDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgfSIKLSAgICAgICAgIiAgdGQu
aW5wdXQgeyB3aWR0aDogNjRweDsgfSIKLSAgICAgICAgIiAgaW5wdXQgeyB3aWR0aDogMTAwJTsg
cGFkZGluZzogOHB4OyB9IgotICAgICAgICAiPC9zdHlsZT4iCi0gICAgICAgICI8L2hlYWQ+PGJv
ZHk+PGgxPkluc3BlY3RhYmxlIHRhcmdldHM8L2gxPiIKLSAgICAgICAgIjxkaXYgaWQ9XCJ0YXJn
ZXRsaXN0XCI+PHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD48L2Rpdj48L2JvZHk+IgotICAgICAgICAi
PHNjcmlwdD4iCi0gICAgICAgICJmdW5jdGlvbiB1cGRhdGVUYXJnZXRzKHN0cikgeyIKLSAgICAg
ICAgICAgICJsZXQgdGFyZ2V0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldGxp
c3QnKTsiCi0gICAgICAgICAgICAidGFyZ2V0RGl2LmlubmVySFRNTCA9IHN0cjsiCi0gICAgICAg
ICJ9IgotICAgICAgICAiPC9zY3JpcHQ+Iik7Ci0gICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8L2h0
bWw+Iik7Ci0KLSAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsK
LSAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShodG1sLmRhdGEoKSwgaHRtbC5s
ZW5ndGgoKSk7Ci0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4
dC9odG1sIl9zLCBodG1sLmxlbmd0aCgpLCAiVVRGLTgiX3MpOwotICAgIHRhc2suZGlkUmVjZWl2
ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICB0YXNrLmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoZGF0
YSkpOwotICAgIHRhc2suZGlkQ29tcGxldGUoUmVzb3VyY2VFcnJvcigpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQ
cm90b2NvbEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGY2MDBlZmRlZDQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgot
I2luY2x1ZGUgIldlYlVSTFNjaGVtZUhhbmRsZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFz
cyBVUkw7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJVUkxTY2hlbWVUYXNr
OwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMg
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIsIHB1YmxpYyBXZWJVUkxTY2hlbWVIYW5kbGVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcj4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIocGFnZSkpOyB9Ci0KLSAgICB2b2lkIGluc3BlY3QoY29uc3Qg
U3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3RyaW5n
JiB0eXBlKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIo
V2ViUGFnZVByb3h5JiBwYWdlKQotICAgICAgICA6IG1fcGFnZShwYWdlKSB7IH0KLQotICAgIC8v
IFJlbW90ZUluc3BlY3Rvck9ic2VydmVyCi0gICAgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1v
dGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVt
b3RlSW5zcGVjdG9yQ2xpZW50JikgZmluYWwgeyB9Ci0KLSAgICAvLyBXZWJVUkxTY2hlbWVIYW5k
bGVyCi0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmLCBXZWJVUkxTY2hl
bWVUYXNrJikgZmluYWw7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0b3BUYXNrKFdlYlBhZ2VQcm94eSYs
IFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KLSAgICB2b2lkIHBsYXRmb3JtVGFza0NvbXBs
ZXRlZChXZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRhcmdl
dExpc3QoKTsKLQotICAgIHZvaWQgcnVuU2NyaXB0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvckNsaWVudD4gbV9pbnNwZWN0b3JDbGllbnQ7Ci0g
ICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAgYm9vbCBtX3BhZ2VMb2FkZWQgeyBmYWxzZSB9
OwotICAgIFN0cmluZyBtX3RhcmdldExpc3RzSHRtbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkwYzJiOTRmMmYuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiQVBJUGFn
ZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUg
IldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXN0YXRpYyBMUENUU1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclBy
b3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIiKTsKLWNvbnN0IExQQ1dT
VFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUgPSBMIlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Q2xhc3MiOwotCi1MUkVTVUxUIENBTExCQUNLIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCi17Ci0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqPig6OkdldFByb3AoaHduZCwgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOwotCi0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBj
YXNlIFdNX1NJWkU6Ci0gICAgICAgIHJldHVybiBjbGllbnQtPnNpemVDaGFuZ2UoKTsKLSAgICBj
YXNlIFdNX0NMT1NFOgotICAgICAgICByZXR1cm4gY2xpZW50LT5vbkNsb3NlKCk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJv
Yyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIEFUT00gcmVnaXN0ZXJX
aW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFz
cyA9IGZhbHNlOwotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNp
emVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gMDsKLSAgICB3Y2V4
LmxwZm5XbmRQcm9jICAgID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2M7Ci0gICAg
d2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0g
ICAgd2NleC5oSW5zdGFuY2UgICAgICA9IDA7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7
Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAg
ICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsK
LSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05h
bWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0KLSAgICBoYXZlUmVnaXN0ZXJlZFdp
bmRvd0NsYXNzID0gdHJ1ZTsKLSAgICByZXR1cm4gOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOwot
fQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaXplQ2hhbmdlKCkKLXsKLSAg
ICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0g
ICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyZWN0KTsKLSAgICA6OlNldFdp
bmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygpLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIp
OwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpv
bkNsb3NlKCkKLXsKLSAgICA6OlNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfSElERSk7
Ci0gICAgZnJvbnRlbmREaWRDbG9zZSgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJQYWdlUHJv
eHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpCi17Ci0gICAgUmVmUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlcyA9IFdl
YlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwot
ICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0K
LSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3Bl
ckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2Fn
ZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8V2Vi
UGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdl
R3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7Ci0KLSAgICBhdXRvIHBhZ2VDb25maWd1
cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JM
ZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVy
ZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdl
R3JvdXAocGFnZUdyb3VwLmdldCgpKTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCg2MCwg
MjAwLCAxNTAwLCAxMDAwKTsKLSAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgbV9mcm9u
dGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlD
bGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAwKTsKLQotICAgIDo6
U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxlLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQ
cm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNob3dXaW5kb3cobV9m
cm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7Ci0KLSAgICBSRUNUIHI7Ci0gICAgOjpHZXRDbGllbnRS
ZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyKTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVh
dGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1fZnJvbnRlbmRIYW5kbGUpOwotICAgIHJldHVybiBt
X3dlYlZpZXctPnBhZ2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQot
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Ci12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJp
bmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRp
ZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkK
LXsKLSAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhhbmRsZSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4u
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlYWM5NzMxNzkuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRl
ICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgotI2lu
Y2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudEltcGwu
aCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2Vi
Vmlldy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUJ1bmRsZVdpbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KLSNpbmNsdWRlIDxXZWJLaXQvV0tQ
YWdlLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCBMUENXU1RSIFdlYklu
c3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYkluc3BlY3RvclByb3h5UG9pbnRlciI7Ci1z
dGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiV2ViSW5z
cGVjdG9yUHJveHlDbGFzcyI7Ci0KLXN0cnVjdCBJbnNwZWN0ZWRXaW5kb3dJbmZvIHsKLSAgICBp
bnQgbGVmdDsKLSAgICBpbnQgdG9wOwotICAgIGludCB2aWV3V2lkdGg7Ci0gICAgaW50IHZpZXdI
ZWlnaHQ7Ci0gICAgaW50IHBhcmVudFdpZHRoOwotICAgIGludCBwYXJlbnRIZWlnaHQ7Ci19Owot
Ci1zdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKEhXTkQg
aW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRvdykKLXsKLSAgICBSRUNUIHJlY3Q7Ci0g
ICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRvdywgJnJlY3QpOwotICAgIDo6TWFwV2lu
ZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50V2luZG93LCAoTFBQT0lOVCkmcmVjdCwg
Mik7Ci0KLSAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KHBhcmVudFdp
bmRvdywgJnBhcmVudFJlY3QpOwotICAgIHJldHVybiB7IHJlY3QubGVmdCwgcmVjdC50b3AsIHJl
Y3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIHBhcmVudFJlY3Qu
cmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJlY3QuYm90dG9tIC0gcGFyZW50UmVjdC50
b3AgfTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93UmVjZWl2ZWRNZXNzYWdl
KEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0
Y2ggKG1zZykgewotICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6IHsKLSAgICAgICAgaWYg
KCFtX2lzQXR0YWNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byB3aW5k
b3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJhbSk7Ci0KLSAgICAgICAg
aWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOwotICAgICAgICBSRUNUIHBh
cmVudFJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3QocGFyZW50LCAmcGFyZW50UmVjdCk7Ci0K
LSAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgICAgICBHZXRDbGllbnRSZWN0KG1faW5z
cGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3QpOwotCi0gICAgICAgIHN3aXRjaCAobV9h
dHRhY2htZW50U2lkZSkgewotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaW5z
cGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcCwgd2luZG93UG9zLT5jeSk7Ci0g
ICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKLSAgICAgICAgICAg
IDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93UG9zLT54LCB3
aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWln
aHQsIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpSaWdodDogewotICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9yV2lkdGggPSBXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93
V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3RvclJlY3QubGVmdCwgd2luZG93UG9z
LT5jeCk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09IGluc3BlY3RvcldpZHRoOwotICAg
ICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQ
b3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnksIGluc3BlY3RvcldpZHRoLCB3aW5k
b3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LUxSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJveHk6OnduZFByb2MoSFdORCBod25kLCBV
SU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBXZWJJbnNwZWN0
b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KDo6
R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7Ci0gICAgc3dpdGNo
IChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIDo6U2V0V2luZG93UG9zKGNsaWVu
dC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBMT1dPUkQobFBhcmFtKSwgSElXT1JE
KGxQYXJhbSksIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgV01f
Q0xPU0U6Ci0gICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiA6OkRlZldpbmRvd1By
b2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJv
eHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQotewotICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3Rl
cmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKLQotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0Ns
YXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
ID0gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVv
ZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlID0gMDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9j
ID0gd25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAwOwotICAgIHdjZXguY2JXbmRFeHRy
YSA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOwot
ICAgIHdjZXguaEljb24gPSAwOwotICAgIHdjZXguaEN1cnNvciA9IExvYWRDdXJzb3IoMCwgSURD
X0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgPSAwOwotICAgIHdjZXgubHBzek1lbnVO
YW1lID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNwZWN0b3JQcm94eUNsYXNz
TmFtZTsKLSAgICB3Y2V4LmhJY29uU20gPSAwOwotICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NF
eCgmd2NleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0
aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMg
dG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lID0g
dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOwotICAgIGlmIChzb3Vy
Y2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKLSAgICAgICAgdG9JbXBs
KGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
b25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxj
b25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOwotICAgIEFTU0VSVCh3ZWJJbnNw
ZWN0b3JQcm94eSk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRv
SW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOwotCi0gICAgLy8gQWxsb3cgbG9h
ZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2ViSW5zcGVjdG9yUHJv
eHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAg
dG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGluc3Bl
Y3RvcidzIHBhZ2UuCi0gICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7Ci0KLSAgICAv
LyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICB3ZWJJbnNw
ZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3Qp
KTsKLX0KLQotc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9y
UHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGNsaWVudEluZm8pKTsKLSAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotICAgIHdlYklu
c3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQo
aW5zcGVjdGVkUGFnZSgpKTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNl
czo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBFTkFCTEUo
REVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBX
ZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgot
ICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgIHBy
ZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVl
KTsKLSNlbmRpZgotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THModHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoeyB9
KTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBh
Z2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwotICAgIGF1dG8gcGFn
ZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBw
YWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGlu
c3BlY3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2Vz
KHByZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3Vw
KHBhZ2VHcm91cC5wdHIoKSk7Ci0KLSAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdh
dGlvbkNsaWVudCA9IHsKLSAgICAgICAgeyAwLCB0aGlzIH0sCi0gICAgICAgIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24sCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25SZXNwb25zZQotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQ
bHVnaW5Mb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0
aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBk
aWRGYWlsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxM
b2FkSW5TdWJmcmFtZQotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQK
LSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbgotICAgICAgICBu
dWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZQotICAgICAgICBudWxscHRyLCAv
LyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCi0gICAgICAgIG51bGxwdHIs
IC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQotICAgICAgICB3ZWJQcm9jZXNz
RGlkQ3Jhc2gsCi0gICAgICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKLQot
ICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51
bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyBk
aWRFbmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZp
Z2F0aW9uR2VzdHVyZVNuYXBzaG90Ci0gICAgfTsKLQotICAgIFJFQ1QgciA9IHsgMCwgMCwgc3Rh
dGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5p
dGlhbFdpbmRvd0hlaWdodCkgfTsKLSAgICBhdXRvIHBhZ2UgPSBpbnNwZWN0ZWRQYWdlKCk7Ci0g
ICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmlld1dpZGdldCgpOwotICAgIG1faW5z
cGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KG1faW5zcGVjdGVkVmlld1dpbmRv
dyk7Ci0gICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9u
LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIG1faW5zcGVjdG9yVmlldyA9ICZ2
aWV3LmxlYWtSZWYoKTsKLSAgICBhdXRvIGluc3BlY3RvclBhZ2UgPSBtX2luc3BlY3RvclZpZXct
PnBhZ2UoKTsKLSAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBpbnNwZWN0b3JQYWdlLT52aWV3
V2lkZ2V0KCk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVj
dG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3Rv
clBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQotewotICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rl
cjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKLSAgICBtX2lu
c3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0g
ICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgewotICAgICAgICA6OkRlc3Ryb3lXaW5kb3co
bV9pbnNwZWN0b3JWaWV3V2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0g
bnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAg
ICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJv
eHlQb2ludGVyUHJvcCk7Ci0gICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvckRldGFj
aFdpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gbnVsbHB0cjsKLSAg
ICB9Ci0gICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3Rl
ZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3RvclBhZ2VVUkwoKQotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNv
cmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigi
V2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVm
LmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1TdHJpbmcgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0g
ICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlS
ZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRlc3QiKSwgQ0ZTVFIo
Imh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRT
dHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYK
LX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSNp
ZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJMUmVmID0gYWRvcHRDRihD
RkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIldl
Ykluc3BlY3RvclVJIiksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRT
dHJpbmcoYmFzZVVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYK
LX0KLQotRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxE
ZWJ1Z2dhYmxlKCkKLXsKLSAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3
PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KLSAgICByZXR1cm4gRGVidWdn
YWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6
OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7Ci0gICAgcmV0dXJu
IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAg
OjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOwotICAgIHJldHVy
biByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRh
Y2hlZFNpemUgPSAzMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hl
ZFdpZHRoID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQgPSAyNTA7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgJiYgOjpHZXRQ
YXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRldGFjaFdpbmRvdykg
ewotICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVjdGVk
Vmlld1BhcmVudFdpbmRvdyk7Ci0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFj
aFdpbmRvdywgU1dfSElERSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJy
b2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0g
ICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgewotICAg
ICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdp
bmRvd0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0
YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d1dpZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRT
aXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9Ci0gICAgOjpTaG93V2luZG93KG1f
aW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVu
bmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2luc3BlY3RvckRl
dGFjaFdpbmRvdykgewotICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgICAgIG1f
aW5zcGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAgICAgIENXX1VT
RURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRv
d0hlaWdodCwKLSAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDAp
OwotICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3Rv
clByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAg
fQotCi0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5l
cihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0gICAgUkVDVCByZWN0OwotICAgIDo6
R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgJnJlY3QpOwotICAgIGF1dG8g
d2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93
LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0UGFyZW50KG1faW5zcGVj
dG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOwotICAgIDo6U2V0V2luZG93
UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVjdC5yaWdodCAtIHJlY3QubGVm
dCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdpbmRv
d1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5m
by50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0lu
Zm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci0KLSAgICBp
ZiAobV9pc1Zpc2libGUpCi0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdp
bmRvdywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGF1dG8gd2luZG93
SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2lu
c3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9y
Vmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAt
IGhlaWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgaGVpZ2h0
LCBTV1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRv
dywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRX
aWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJ
bmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGF1dG8g
d2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93
LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5z
cGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpZHRoLCB3aW5k
b3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50
b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2lu
ZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVu
dFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRv
d0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNG
cm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiAvKiB1cmwgKi8pCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxh
YmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWlsYWJsZSAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
V2luZG93KCkKLXsKLSAgICBwbGF0Zm9ybURldGFjaCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDg0YjA5MGZkYzcyLi45NTgyY2NlZTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NDIxLDggKzQ0MjEsOCBAQAogCQlBNTEzRjUz
RjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNTE4QjVEMDFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0
b3JXS1dlYlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNwZWN0b3JXS1dlYlZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUxOEI1RDExRkUxRDU1QjAwRjlGQTI4IC8qIFdL
SW5zcGVjdG9yV0tXZWJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0b3JX
S1dlYlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDI5M0EyMTk1QTQz
QzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oOyBw
YXRoID0gaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDI5M0EzMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0lu
c3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9z
L1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1
cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
NDNFMzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDYyMTVBRDEyRTAw
Mjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NDNFMzA4MjE1QzhBODMwMDI3OUNEOSAv
KiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2NTQsMTAgKzY2NTQs
NiBAQAogCQkJCUY0REI1NEU1MjMxOUU3MzMwMDlFMzE1NSAvKiBXS0hpZ2hsaWdodExvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyLm1tICovLAogCQkJCTkzM0RGODJEMUIzQkMwOTAwMEFFQTlFMyAv
KiBXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzREY4MkYxQjNCQzBC
NDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0gKi8sCi0JCQkJMEYz
QzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovLAot
CQkJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW0gKi8sCi0JCQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8sCi0JCQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3
IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovLAogCQkJCTJE
RDVFMTI3MjEwQURDN0EwMERCNjAxMiAvKiBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCAq
LywKIAkJCQkyREQ1RTEyNjIxMEFEQzdBMDBEQjYwMTIgLyogV0tLZXlib2FyZFNjcm9sbGluZ0Fu
aW1hdG9yLm1tICovLAogCQkJCTJEQjk0Mjk3MjM0RTdBN0YwMEU3NzZBRCAvKiBXS01vdXNlR2Vz
dHVyZVJlY29nbml6ZXIuaCAqLywKQEAgLTc5ODMsNiArNzk3OSw5OSBAQAogCQkJcGF0aCA9IGNv
Y29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJOTFEOTcwRDQyM0RBNkQy
NTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJOTFEOTcwRDUyM0RBNkQ1MDAwNTdEQkMzIC8qIEFnZW50cyAqLywKKwkJ
CQk5MUQ5NzBENzIzREE2RDVCMDA1N0RCQzMgLyogaW9zICovLAorCQkJCTkxRDk3MEQ2MjNEQTZE
NTUwMDU3REJDMyAvKiBtYWMgKi8sCisJCQkJQTVFMzkxRkIyMTgzQzFFOTAwQzhGQjMxIC8qIElu
c3BlY3RvclRhcmdldFByb3h5LmNwcCAqLywKKwkJCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEg
LyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCAqLywKKwkJCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0Qz
M0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwICovLAorCQkJCUE1NUJBODE5MUJBMjVC
MUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oICovLAorCQkJCUE1NUJBODFB
MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAq
LywKKwkJCQkxQzhFMjgzMzEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuY3Bw
ICovLAorCQkJCTFDOEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5o
ICovLAorCQkJCTFDNzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAvKiBXZWJJbnNwZWN0b3JQcm94eS5t
ZXNzYWdlcy5pbiAqLywKKwkJCQlBNTVCQTgyNzFCQTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVj
dG9yVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlBNTVCQTgyODFCQTM4RTFFMDA3Q0QzM0QgLyogV2Vi
SW5zcGVjdG9yVXRpbGl0aWVzLmggKi8sCisJCQkJQTVFQzZBRDIyMTUxQkQ2OTAwNjc3RDE3IC8q
IFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLywKKwkJCQlBNUVDNkFEMzIxNTFCRDY5MDA2NzdEMTcg
LyogV2ViUGFnZURlYnVnZ2FibGUuaCAqLywKKwkJCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEg
LyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAorCQkJCUE1MTNGNTNFMjE1NEE1
Q0MwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSBJbnNwZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5
MUQ5NzBENTIzREE2RDUwMDA1N0RCQzMgLyogQWdlbnRzICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCSk7CisJCQlwYXRoID0gQWdlbnRzOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRDYyM0RBNkQ1NTAwNTdEQkMzIC8qIG1h
YyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTVEMzUw
NEQxRDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAor
CQkJCTFDQThCOTM1MTI3Qzc3NEUwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAq
LywKKwkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5oICovLAorCQkJCTk5NEJBREYyMUY3RDc3RUIwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyLm1tICovLAorCQkJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0lu
c3BlY3RvcldLV2ViVmlldy5oICovLAorCQkJCUE1MThCNUQxMUZFMUQ1NUIwMEY5RkEyOCAvKiBX
S0luc3BlY3RvcldLV2ViVmlldy5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWFjOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRDcyM0RBNkQ1QjAwNTdEQkMzIC8q
IGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYz
QzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovLAor
CQkJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW0gKi8sCisJCQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8sCisJCQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3
IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovLAorCQkJKTsK
KwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5
NzBFMDIzREE2RkIxMDA1N0RCQzMgLyogSW5zcGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5MUQ5NzBFNTIzREE3MDQ3MDA1N0RCQzMgLyogbWFj
ICovLAorCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAgKi8sCisJCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclVJLmggKi8sCisJCQkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAorCQkJCTFDOEUyODFGMTI3NUQxNTQwMEJDN0JEMCAv
KiBXZWJJbnNwZWN0b3IuY3BwICovLAorCQkJCTFDOEUyODFFMTI3NUQxNTQwMEJDN0JEMCAvKiBX
ZWJJbnNwZWN0b3IuaCAqLywKKwkJCQkxQzhFMkExQzEyNzc4MzNGMDBCQzdCRDAgLyogV2ViSW5z
cGVjdG9yLm1lc3NhZ2VzLmluICovLAorCQkJCUJDMTExQTU5MTEyRjRGQkIwMDMzN0JBQiAvKiBX
ZWJJbnNwZWN0b3JDbGllbnQuY3BwICovLAorCQkJCUJDMDMyRDZEMTBGNDM3OEQwMDU4QzE1QSAv
KiBXZWJJbnNwZWN0b3JDbGllbnQuaCAqLywKKwkJCQlBNTVCQTgzMjFCQTNFNkZBMDA3Q0QzM0Qg
LyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcCAqLywKKwkJCQlBNTVCQTgz
MzFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgg
Ki8sCisJCQkJRkVFNDNGRDAxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIuY3BwICovLAorCQkJCUZFRTQzRkQxMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggKi8sCisJCQkJRkVFNDNGRDIxRTY3QUZDNjAw
NzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8s
CisJCQkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmNwcCAqLywK
KwkJCQkxQzg5MUQ2MzE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCAqLywKKwkJ
CQkxQzg5MUQ2NDE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4g
Ki8sCisJCQkJQTU0M0UzMEEyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQuY3BwICovLAorCQkJCUE1NDNFMzA4MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmggKi8sCisJCQkJQTU0M0UzMDkyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCAqLywKKwkJCQlBNTQzRTMwQjIxNUM4QTg0MDAy
NzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAqLywKKwkJCQlBNTQz
RTMwNjIxNUFEMTJFMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5jcHAgKi8sCisJCQkJQTU0M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gSW5zcGVj
dG9yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRTUyM0RBNzA0
NzAwNTdEQkMzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJTWFjLm1t
ICovLAorCQkJKTsKKwkJCXBhdGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk5MzkyODhFMDIxNDA0REYwMDBFQkJBMzMgLyogSW5kZXhlZERCICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTgxOTYsNiArODI4NSw3IEBACiAJ
CQkJQkMwRTVGQ0IxMkQ2OTZERDAwMTJBNzJBIC8qIEdlb2xvY2F0aW9uICovLAogCQkJCTJEN0U0
M0JGMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFUgKi8sCiAJCQkJQkMyMDRFREYxMUM4M0U3MjAwOEYz
Mzc1IC8qIEluamVjdGVkQnVuZGxlICovLAorCQkJCTkxRDk3MEUwMjNEQTZGQjEwMDU3REJDMyAv
KiBJbnNwZWN0b3IgKi8sCiAJCQkJMzNEM0EzQkQxMzM5NjA5ODAwNzA5QkU0IC8qIE1lZGlhQ2Fj
aGUgKi8sCiAJCQkJNEE0MTBGNDExOUFGN0IyNzAwMkVCQUI1IC8qIE1lZGlhU3RyZWFtICovLAog
CQkJCTUxMDVCMEQyMTYyRjdBNUUwMEUyNzcwOSAvKiBOZXR3b3JrICovLApAQCAtODI0Niw4ICs4
MzM2LDYgQEAKIAkJCQlCQzAzMkQ2QTEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRnJhbWVMb2FkZXJD
bGllbnQuaCAqLywKIAkJCQlCQzFCRTFERjEyRDU0QTQxMDAwNEEyMjggLyogV2ViR2VvbG9jYXRp
b25DbGllbnQuY3BwICovLAogCQkJCUJDMUJFMURFMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9s
b2NhdGlvbkNsaWVudC5oICovLAotCQkJCUJDMTExQTU5MTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJJ
bnNwZWN0b3JDbGllbnQuY3BwICovLAotCQkJCUJDMDMyRDZEMTBGNDM3OEQwMDU4QzE1QSAvKiBX
ZWJJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQk1MTNGRkI4RTIwMTQ1OUMyMDAyNTk2RUEgLyog
V2ViTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwICovLAogCQkJCTUxM0ZGQjhGMjAxNDU5
QzIwMDI1OTZFQSAvKiBXZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oICovLAogCQkJCTMx
MDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwICovLApA
QCAtODI5Niw5ICs4Mzg0LDYgQEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmlu
ZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJh
bm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIu
aCAqLywKLQkJCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9y
VUkuY3BwICovLAotCQkJCUE1NUJBODEzMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JVSS5oICovLAotCQkJCUE1NUJBODE0MUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJ
bnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEg
LyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJCQkJMkQ4MTlCOUExODYy
NzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuaCAqLywKIAkJCQky
RDgxOUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5t
ZXNzYWdlcy5pbiAqLywKQEAgLTgzMTgsMTcgKzg0MDMsNiBAQAogCQkJCTFBNUIxQzUzMTg5ODdF
REYwMDRGQ0Y5QiAvKiBXZWJEb2N1bWVudExvYWRlci5oICovLAogCQkJCUJDMTExQURDMTEyRjVC
OTMwMDMzN0JBQiAvKiBXZWJGcmFtZS5jcHAgKi8sCiAJCQkJQkMwMzJEODkxMEY0MzdBMDAwNThD
MTVBIC8qIFdlYkZyYW1lLmggKi8sCi0JCQkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8qIFdl
Ykluc3BlY3Rvci5jcHAgKi8sCi0JCQkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYklu
c3BlY3Rvci5oICovLAotCQkJCTFDOEUyQTFDMTI3NzgzM0YwMEJDN0JEMCAvKiBXZWJJbnNwZWN0
b3IubWVzc2FnZXMuaW4gKi8sCi0JCQkJQTU1QkE4MzIxQkEzRTZGQTAwN0NEMzNEIC8qIFdlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgKi8sCi0JCQkJQTU1QkE4MzMxQkEzRTZG
QTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oICovLAotCQkJ
CUZFRTQzRkQwMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLmNwcCAqLywKLQkJCQlGRUU0M0ZEMTFFNjdBRkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5oICovLAotCQkJCUZFRTQzRkQyMUU2N0FGQzYwMDc3RDZEMSAv
KiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluICovLAotCQkJCTFD
ODkxRDYyMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5jcHAgKi8sCi0JCQkJMUM4
OTFENjMxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmggKi8sCi0JCQkJMUM4OTFE
NjQxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAogCQkJ
CUJDODU3Rjg0MTJCODJEMEIwMEVERUIyRSAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5j
cHAgKi8sCiAJCQkJQkM4NTdGODMxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyLmggKi8sCiAJCQkJQkM5NjNENkExMTNERDE5MjAwNTc0QkUyIC8qIFdlYlBhZ2Uu
Y3BwICovLApAQCAtODMzNiwxMiArODQxMCw2IEBACiAJCQkJQzBDRTcyNTgxMjQ3RTREQTAwQkMw
RUM0IC8qIFdlYlBhZ2UubWVzc2FnZXMuaW4gKi8sCiAJCQkJQkM3QjYyMTQxMkE0MjE5QTAwRDE3
NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCAqLywKIAkJCQlCQzdCNjIxMzEyQTQyMTlBMDBE
MTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCAqLywKLQkJCQlBNTQzRTMwQTIxNUM4QTg0MDAy
NzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgKi8sCi0JCQkJQTU0M0UzMDgyMTVD
OEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLywKLQkJCQlBNTQzRTMw
OTIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3Bw
ICovLAotCQkJCUE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlci5oICovLAotCQkJCUE1NDNFMzA2MjE1QUQxMkUwMDI3OUNEOSAvKiBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCAqLywKLQkJCQlBNTQzRTMwNTIx
NUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5o
ICovLAogCQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAg
Ki8sCiAJCQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8s
CiAJCQkJQkNBMEVGN0UxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVwLmNwcCAqLywKQEAg
LTgzNjUsNiArODQzMyw3IEBACiAJCQkJMUFCN0Q0QzcxMjg4QUE5QTAwQ0ZEMDhDIC8qIERvd25s
b2FkcyAqLywKIAkJCQk1MTVCRTE3QjFENTRFRjVBMDBERDdDNjggLyogR2FtZXBhZCAqLywKIAkJ
CQkyRDdFNDNCQjIzNzUyQ0M0MDBFQTVDQTAgLyogR1BVICovLAorCQkJCTkxRDk3MEQ0MjNEQTZE
MjUwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8sCiAJCQkJMkRBOTQ0QTgxODg0RTlBQjAwRUQ4NkRC
IC8qIGlvcyAqLywKIAkJCQlCQzExMUIxODExMkY1RkI0MDAzMzdCQUIgLyogTGF1bmNoZXIgKi8s
CiAJCQkJQkNDRjA4NUMxMTNGM0I3NTAwQzY1MEM1IC8qIG1hYyAqLywKQEAgLTgzOTQsOCArODQ2
Myw2IEBACiAJCQkJMkRENUE3MkExRUJGMDlBNzAwOUJBNTk3IC8qIEhpZGRlblBhZ2VUaHJvdHRs
aW5nQXV0b0luY3JlYXNlc0NvdW50ZXIuaCAqLywKIAkJCQk4MzlBMkYyRjFFMjA2NzM5MDAzOTA1
N0UgLyogSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuY3BwICovLAogCQkJCTgz
OUEyRjMwMUUyMDY3MzkwMDM5MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlci5oICovLAotCQkJCUE1RTM5MUZCMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJn
ZXRQcm94eS5jcHAgKi8sCi0JCQkJQTVFMzkxRkMyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3Rv
clRhcmdldFByb3h5LmggKi8sCiAJCQkJNUNFQUJBMkIyMzMzMjUxNDAwNzk3Nzk3IC8qIExlZ2Fj
eUdsb2JhbFNldHRpbmdzLmNwcCAqLywKIAkJCQk1Q0VBQkEyQTIzMzMyNDc3MDA3OTc3OTcgLyog
TGVnYWN5R2xvYmFsU2V0dGluZ3MuaCAqLywKIAkJCQkzMTYwN0YzODE5NjI3MDAyMDA5Qjg3REEg
LyogTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmggKi8sCkBAIC04NDExLDkgKzg0NzgsNiBAQAog
CQkJCTgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgzMiAvKiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50Lmgg
Ki8sCiAJCQkJNDY4MzU2OUIyMUU4MUNDNzAwNkUyN0EzIC8qIFByb3Zpc2lvbmFsUGFnZVByb3h5
LmNwcCAqLywKIAkJCQk0NjgzNTY5QTIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdl
UHJveHkuaCAqLywKLQkJCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkuY3BwICovLAotCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5oICovLAotCQkJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQlCQzExMUIwODEx
MkY1RTNDMDAzMzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8sCiAJCQkJMUEzMDA2
NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKIAkJCQk1Q0E5
ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oICovLApAQCAtODQ5
MywxMSArODU1Nyw2IEBACiAJCQkJQkMxQkUxRjExMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xv
Y2F0aW9uUHJvdmlkZXIuY3BwICovLAogCQkJCUJDMUJFMUYwMTJENTREQkQwMDA0QTIyOCAvKiBX
ZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggKi8sCiAJCQkJNTFDOEUxOUIxRjIxNjE3MjAwQkY3MzFC
IC8qIFdlYkljb25EYXRhYmFzZS5oICovLAotCQkJCTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAv
KiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQw
IC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJG
IC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCUE1NUJBODI3MUJBMzhF
MUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwICovLAotCQkJCUE1NUJBODI4
MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLywKIAkJCQlDOThD
NDhBMzFCNkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcCAq
LywKIAkJCQlDOThDNDhBNDFCNkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNN
YW5hZ2VyLmggKi8sCiAJCQkJQzlDMTgzMzcxQjczRkQ2QTAwNzAzNkE3IC8qIFdlYk1lZGlhU2Vz
c2lvbkZvY3VzTWFuYWdlckNsaWVudC5jcHAgKi8sCkBAIC04NTA4LDE2ICs4NTY3LDEyIEBACiAJ
CQkJN0NDQ0M4RjkxQTVGNTBGRDAwOEZCMERBIC8qIFdlYk5hdmlnYXRpb25TdGF0ZS5oICovLAog
CQkJCUJDMURGRUEzMTJCMzFGODcwMDVERjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5LmNwcCAqLywKIAkJCQlCQzFERkVBMjEyQjMxRjg3MDA1REY3MzAgLyogV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oICovLAotCQkJCUE1RUM2QUQyMjE1MUJENjkwMDY3N0Qx
NyAvKiBXZWJQYWdlRGVidWdnYWJsZS5jcHAgKi8sCi0JCQkJQTVFQzZBRDMyMTUxQkQ2OTAwNjc3
RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmggKi8sCiAJCQkJODM3MkRCMjYxQTY3NTYyODAwQzY5
N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8sCiAJCQkJODM3MkRC
MjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICov
LAogCQkJCUJDN0I2MjA1MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3BwICovLAog
CQkJCUJDN0I2MjA0MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCAqLywKIAkJCQky
RDlFQTMxMDFBOTZEOUVCMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNw
cCAqLywKIAkJCQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVu
ZGxlQ2xpZW50LmggKi8sCi0JCQkJQTUxM0Y1M0YyMTU0QTVDRDAwNjYyODQxIC8qIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKLQkJCQlBNTEzRjUzRTIxNTRBNUNDMDA2NjI4NDEg
LyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKIAkJCQlCQzExMUIwQjExMkY1RTRG
MDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNwcCAqLywKIAkJCQlCQzAzMkRDQjEwRjQzODlGMDA1
OEMxNUEgLyogV2ViUGFnZVByb3h5LmggKi8sCiAJCQkJQkNCRDM4RkExMjVCQUI5QTAwRDJDMjlG
IC8qIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTkxODMsNyArOTIzOCw2IEBACiAJ
CQkJN0M2RDM3RkExNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gKi8sCiAJCQkJ
MUFBRjI2MzcxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
LmggKi8sCiAJCQkJMUFBRjI2MzYxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tICovLAotCQkJCTFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJ
bnNwZWN0b3JVSU1hYy5tbSAqLywKIAkJCQlCQzk2M0Q2RDExM0REMUE1MDA1NzRCRTIgLyogV2Vi
UGFnZU1hYy5tbSAqLywKIAkJCQkyOUNENTVBODEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCAqLywKIAkJCQkyOUNENTVBOTEyOEUyOTRGMDAxMzND
ODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UubW0gKi8sCkBAIC05MjYwLDcg
KzkzMTQsNiBAQAogCQkJCTFBRkRFNjVCMTk1NEU4RDUwMEM0OEZGQSAvKiBMZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmcuY3BwICovLAogCQkJCTBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdl
Q2xpZW50SW1wbE1hYy5oICovLAogCQkJCTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdl
Q2xpZW50SW1wbE1hYy5tbSAqLywKLQkJCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCiAJCQkJRTE4RTY5MDkxNjlCNTYzRjAwOUI2
NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuY3BwICovLAogCQkJCUUxOEU2OTBBMTY5QjU2M0YwMDlC
NjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmggKi8sCiAJCQkJRTE4RTY5MEQxNjlCNTdERjAwOUI2
NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05MjgxLDcgKzkzMzQs
NiBAQAogCQkJCUY2RDYzMkJBMTMzRDE4MUIwMDc0M0Q3NyAvKiBXZWJDb29raWVNYW5hZ2VyUHJv
eHlNYWMubW0gKi8sCiAJCQkJRTU2OEI5MjAyMEEzQUM2QTAwRTNDODU2IC8qIFdlYkRhdGFMaXN0
U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5oICovLAogCQkJCUU1NjhCOTIxMjBBM0FDNkEwMEUzQzg1
NiAvKiBXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0gKi8sCi0JCQkJMUNBOEI5
MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAogCQkJCUJD
ODU3RTg1MTJCNzFFQkIwMEVERUIyRSAvKiBXZWJQYWdlUHJveHlNYWMubW0gKi8sCiAJCQkJQkM1
NzUwOTUxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5TWFjLmggKi8sCiAJCQkJ
QkM1NzUwOTYxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5TWFjLm1tICovLApA
QCAtOTI5MiwxMCArOTM0NCw2IEBACiAJCQkJQ0RDQTg1QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTMyMUQ1ODUxQTM4RUUzQzAw
ODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMjFENTg3
MUEzOEVFNzQwMDgwNTJCRSAvKiBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gKi8sCi0J
CQkJOTk0QkFERjExRjdENzdFQTAwQjU3MUU3IC8qIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
aCAqLywKLQkJCQk5OTRCQURGMjFGN0Q3N0VCMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlci5tbSAqLywKLQkJCQlBNTE4QjVEMDFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0
b3JXS1dlYlZpZXcuaCAqLywKLQkJCQlBNTE4QjVEMTFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNw
ZWN0b3JXS1dlYlZpZXcubW0gKi8sCiAJCQkJMEZDQjRFNUMxOEJCRTNEOTAwMEZDRkM5IC8qIFdL
UHJpbnRpbmdWaWV3LmggKi8sCiAJCQkJMEZDQjRFNUQxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJp
bnRpbmdWaWV3Lm1tICovLAogCQkJCTUxM0U0NjJCMUFEODM3NTYwMDE2MjM0QSAvKiBXS1NoYXJp
bmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU1OGQ4ZjBjMjQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNw
ZWN0b3JVSS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgIlJl
bW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNw
ZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK1JlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90
ZVdlYkluc3BlY3RvclVJKHBhZ2UpKTsKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yVUk6OlJlbW90
ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAs
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRhJiYgZGVidWdnYWJsZUluZm8s
IGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQoreworICAgIG1fZGVidWdnYWJsZUlu
Zm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9
IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7CisKKyAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB0cnVlKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCkKK3sK
KyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNhdmVkVVJMIl9z
LCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQoY29uc3Qg
U3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21t
YW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3NhZ2UpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsK
K30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7
CisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29u
bmVjdENsaWVudCgpOworCisgICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhv
c3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7CisgICAgbV9mcm9udGVuZEhvc3Qt
PmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9zLCB0cnVlKTsK
KworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpj
aGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1fcGFnZS5pZGVudGlm
aWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRvd0RyYWco
KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTdGFydFdpbmRvd0Ry
YWcoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZsb2F0UmVjdCBmcmFt
ZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOworICAgIGZy
YW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS5zZXRX
aW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK1dlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbigpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpicmlu
Z1RvRnJvbnQoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpCcmlu
Z1RvRnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmNsb3NlV2luZG93KCkKK3sKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIpOworCisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kRGlkQ2xvc2UoKSwg
bV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnJl
b3BlbigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlb3Blbigp
LCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
cmVzZXRTdGF0ZSgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJl
c2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3VGFiKHVybCksIG1fcGFnZS5pZGVu
dGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVk
LCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyks
IG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjph
cHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNv
bnRlbnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAg
ICAvLyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2FuIGtub3cgaWYgdGhlIG1haW4gcmVz
b3VyY2UgY2hhbmdlZC4KK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRp
ZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNh
dGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK0luc3BlY3Rvcjo6RGVidWdnYWJs
ZVR5cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2FibGVUeXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxlVHlwZTsKK30KKworU3RyaW5nIFJl
bW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKK30KKworU3RyaW5nIFJl
bW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKK30KKworU3RyaW5nIFJl
bW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Cit9CisKK2Jvb2wg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxhdG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVsYXRvcjsKK30KKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c3VwcG9y
dHNEaWFnbm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT5z
ZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUs
ICBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9u
YXJ5KQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgp
LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5hbWUsICJSZW1v
dGUgV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hv
dWxkU2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIEluc3BlY3Rv
cidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNz
IHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgorICAgIEFTU0VSVCghYXZhaWxhYmxl
IHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7CisgICAgbV9kaWFnbm9zdGljTG9nZ2lu
Z0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25v
c3RpY0xvZ2dpbmdBdmFpbGFibGUpOworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorU3RyaW5nIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorI2VuZGlmIC8vICFQTEFURk9STShN
QUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iNGFlMWMxZGFhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaApAQCAtMCwwICsxLDExOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVidWdnYWJsZUluZm9E
YXRhLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JG
cm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
Lmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIEZsb2F0UmVjdDsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJIGZpbmFs
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5zcGVjdG9yVUk+LCBwdWJsaWMgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdl
YlBhZ2UmKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gQ2FsbGVk
IGJ5IFJlbW90ZVdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCisgICAgdm9pZCBpbml0aWFsaXplKERl
YnVnZ2FibGVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7Cisg
ICAgdm9pZCBkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIGRpZEFwcGVuZChj
b25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJik7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICB2b2lkIHNl
dERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOworI2VuZGlmCisKKyAgICAvLyBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudAorICAgIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJl
ZCgpIG92ZXJyaWRlOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNoYW5nZVNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOworICAgIHZvaWQgbW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlbW90ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VS
TCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQorICAgIEluc3BlY3Rvcjo6
RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJp
bmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdl
dEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0
VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBj
b25zdCBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
dm9pZCBicmluZ1RvRnJvbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsb3NlV2luZG93KCkgb3Zl
cnJpZGU7CisgICAgdm9pZCByZW9wZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc2V0U3RhdGUo
KSBvdmVycmlkZTsKKworICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKSBvdmVycmlkZTsK
KyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb250ZW50
KSBvdmVycmlkZTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQor
ICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOworICAgIGJvb2wg
ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlOyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50
OjpWYWx1ZURpY3Rpb25hcnkmKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgYm9vbCBjYW5TYXZl
KCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIDE7IH0KKyAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShE
b2NrU2lkZSkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dp
ZHRoKHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZW1v
dGVXZWJJbnNwZWN0b3JVSShXZWJQYWdlJik7CisKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAg
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
OworICAgIFJlZlB0cjxXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRI
b3N0OworICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOworICAgIFN0cmlu
ZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZ
KQorICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJiZjdl
NGM4NzhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM0IEBACisj
IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4g
UmVtb3RlV2ViSW5zcGVjdG9yVUkgeworICAgIEluaXRpYWxpemUoc3RydWN0IFdlYktpdDo6RGVi
dWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJM
KQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgU2V0RGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCisjZW5kaWYKKworICAgIERpZFNhdmUoU3Ry
aW5nIHVybCkKKyAgICBEaWRBcHBlbmQoU3RyaW5nIHVybCkKKworICAgIFNlbmRNZXNzYWdlVG9G
cm9udGVuZChTdHJpbmcgbWVzc2FnZSkKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMzMyMjVkMTNkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKQEAgLTAsMCArMSwzMjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJJbnNwZWN0b3IuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2Vi
SW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlBh
Z2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvclBh
Z2VBZ2VudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1dpbmRvd0ZlYXR1cmVzLmg+CisKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQgPSAyNTA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0
aW8gPSAwLjc1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAw
OworCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8
V2ViSW5zcGVjdG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBwYWdlKQoreworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Cit9CisKK1dlYkluc3Bl
Y3Rvcjo6V2ViSW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKK3sK
K30KKworV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBpZiAobV9mcm9udGVu
ZENvbm5lY3Rpb24pCisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29s
IHVuZGVyVGVzdCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkxvY2Fs
SW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1fcGFnZS0+
aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250ZW5kQ29ubmVj
dGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAg
IC8vIFdlIG1pZ2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlzIHdlYiBwcm9jZXNz
IGdvdCBzd2FwcGVkIGludG8gYSBXZWJQYWdlUHJveHkKKyAgICAvLyBzaG9ydGx5IGFmdGVyIGFu
b3RoZXIgcHJvY2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVjdGlvbi4KKyAgICBpZiAobV9mcm9u
dGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRh
dGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKwor
I2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucmVs
ZWFzZUZpbGVEZXNjcmlwdG9yKCkpOworI2VsaWYgT1MoREFSV0lOKQorICAgIElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIucG9ydCgpKTsKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgSVBDOjpDb25uZWN0aW9u
OjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRp
Zmllci5oYW5kbGUoKSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
OworI2VuZGlmCisKKyAgICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQo
Y29ubmVjdGlvbklkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Zyb250ZW5k
Q29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29ubmVjdGlvbihjb25u
ZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5vcGVu
KCk7CisKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rp
b25zKQorICAgICAgICBjYWxsYmFjaygpOworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9u
cy5jbGVhcigpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZENvbm5lY3Rp
b24oKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX3Bh
Z2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICAvLyBJZiB3ZSB0cmllZCB0byBjbG9zZSB0aGUgZnJv
bnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rpb24gZXhpc3RzIHll
dC4KKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9mcm9udGVuZENv
bm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBu
dWxscHRyOworICAgIH0KKworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVhcigp
OworCisgICAgbV9hdHRhY2hlZCA9IGZhbHNlOworICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBm
YWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UtPmlkZW50aWZp
ZXIoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0
YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChtX2Zyb250
ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVuZChXVEZNb3ZlKGNh
bGxiYWNrKSk7Cit9CisKKy8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVzc2FnZXMKK3ZvaWQg
V2ViSW5zcGVjdG9yOjpzaG93KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuc2hvdygpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQoreworICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9zZSBj
b3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3duLgorICAgIGlmICgh
bV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGNsb3NlRnJvbnRl
bmRDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuSW5OZXdUYWIoY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNh
dG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CisKKyAgICBQYWdlKiBpbnNwZWN0ZWRQYWdl
ID0gbV9wYWdlLT5jb3JlUGFnZSgpOworICAgIGlmICghaW5zcGVjdGVkUGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRnJhbWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGluc3BlY3RlZFBhZ2Ut
Pm1haW5GcmFtZSgpOworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICpp
bnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZyYW1lLmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0cmluZyB9LCAiX2Js
YW5rIl9zLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNl
bmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3Bl
bmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90
QWxsb3csIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07CisKKyAgICBOYXZpZ2F0aW9u
QWN0aW9uIGFjdGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5pbml0aWF0ZWRCeU1h
aW5GcmFtZSgpLCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKKyAgICBQYWdlKiBuZXdQ
YWdlID0gaW5zcGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGluc3BlY3RlZE1haW5G
cmFtZSwgZnJhbWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24pOworICAgIGlmICghbmV3UGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbmV3UGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkubG9h
ZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OmV2
YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBpZiAoIW1f
cGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFn
ZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChzY3Jp
cHQpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQoreworICAgIGlmICgh
bV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQ
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRlbmRD
b25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93Q29uc29sZSgpLCAwKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQoreworICAgIGlmICgh
bV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQ
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRlbmRD
b25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93UmVzb3VyY2VzKCksIDApOworICAg
IH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCit7CisgICAgV2ViRnJhbWUq
IGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJZGVudGlmaWVy
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGFnZS0+
Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAgU3RyaW5nIGluc3BlY3RvckZyYW1l
SWRlbnRpZmllciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmVu
c3VyZVBhZ2VBZ2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsKKworICAgIHdoZW5G
cm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dNYWluUmVzb3VyY2VG
b3JGcmFtZShpbnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAwKTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygpCit7CisgICAgaWYgKCFtX3BhZ2Ut
PmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rp
b25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygpLCAwKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBp
ZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5j
b3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAgd2hlbkZyb250
ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0
aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQcm9maWxpbmcoKSwg
MCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVsZW1lbnRTZWxlY3Rp
b24oKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9m
cm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdGFydEVs
ZW1lbnRTZWxlY3Rpb24oKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpz
dG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChb
PV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDApOworICAgIH0pOworfQorCit2b2lk
IFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCit7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFj
dGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnRp
bWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+
aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNldE1vY2tDYXB0dXJlRGV2
aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoZW5hYmxlZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKworYm9vbCBXZWJJbnNwZWN0
b3I6OmNhbkF0dGFjaFdpbmRvdygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERvbid0IGFsbG93IGF0dGFjaGluZyB0byBh
bm90aGVyIGluc3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2luZG93IGlzIHRvbyBt
dWNoIQorICAgIGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwgYWxsb3cgYXR0YWNo
aW5nIGFnYWluIHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4KKyAgICBpZiAobV9hdHRhY2hlZCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYXR0YWNoIGlm
IHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZSBtaW5pbXVt
IGluc3BlY3RvciBzaXplLgorICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX3Bh
Z2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworICAg
IHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkudmlldygpLT52aXNpYmxlV2lkdGgoKTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNo
ZWRIZWlnaHQgPSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0
aW87CisgICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRI
ZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFnZVdpZHRoOworfQor
Cit2b2lkIFdlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpCit7CisgICAg
aWYgKG1fYXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgY2FuQXR0YWNoV2lu
ZG93ID0gdGhpcy0+Y2FuQXR0YWNoV2luZG93KCk7CisgICAgaWYgKG1fcHJldmlvdXNDYW5BdHRh
Y2ggPT0gY2FuQXR0YWNoV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZXZpb3Vz
Q2FuQXR0YWNoID0gY2FuQXR0YWNoV2luZG93OworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93KSwgbV9wYWdl
LT5pZGVudGlmaWVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNmI4OWU1MjI3NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmgKQEAg
LTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lSWRlbnRpZmllci5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3Mg
V2ViSW5zcGVjdG9yIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6
QnVuZGxlSW5zcGVjdG9yPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3I+IGNyZWF0ZShXZWJQYWdlKik7CisKKyAg
ICBXZWJQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisKKyAgICB2b2lkIHVw
ZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVy
YXRlZCBXZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5l
Y3Rpb24mKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQorCisgICAgdm9pZCBzaG93KCk7Cisg
ICAgdm9pZCBjbG9zZSgpOworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpOworCisgICAgdm9pZCBjYW5BdHRhY2hXaW5kb3coYm9vbCYgcmVzdWx0KTsKKwor
ICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKworICAg
IHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcik7
CisKKyAgICB2b2lkIHNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpIHsgbV9hdHRhY2hlZCA9IGF0
dGFjaGVkOyB9CisKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcm
IHNjcmlwdCk7CisKKyAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOworICAgIHZvaWQgc3Rv
cFBhZ2VQcm9maWxpbmcoKTsKKworICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Cisg
ICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOworICAgIHZvaWQgZWxlbWVudFNlbGVjdGlv
bkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCk7
CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8
Ym9vbD4pOworCisgICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50
KTsKKworICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBjbG9zZSgpOyB9CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFdlYkluc3BlY3RvckNsaWVudDsKKworICAgIGV4cGxpY2l0
IFdlYkluc3BlY3RvcihXZWJQYWdlKik7CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yKCk7CisK
KyAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpOworCisgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5z
cGVjdG9yQ2xpZW50CisgICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIHVu
ZGVyVGVzdCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpOworCisgICAgdm9p
ZCBicmluZ1RvRnJvbnQoKTsKKworICAgIHZvaWQgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFi
bGlzaGVkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICBXZWJQYWdlKiBtX3BhZ2U7CisKKyAg
ICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Zyb250ZW5kQ29ubmVjdGlvbjsKKyAgICBWZWN0
b3I8RnVuY3Rpb248dm9pZCgpPj4gbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zOworCisgICAg
Ym9vbCBtX2F0dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcHJldmlvdXNDYW5BdHRhY2gg
eyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2Vz
LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYWY3NGI1ZTZiMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yIHsK
KyAgICBTaG93KCkKKyAgICBDbG9zZSgpCisKKyAgICBTZXRBdHRhY2hlZChib29sIGF0dGFjaGVk
KQorCisgICAgU2hvd0NvbnNvbGUoKQorICAgIFNob3dSZXNvdXJjZXMoKQorCisgICAgU2hvd01h
aW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZp
ZXIpCisKKyAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkKKworICAgIFN0YXJ0UGFnZVByb2Zp
bGluZygpCisgICAgU3RvcFBhZ2VQcm9maWxpbmcoKQorCisgICAgU3RhcnRFbGVtZW50U2VsZWN0
aW9uKCkKKyAgICBTdG9wRWxlbWVudFNlbGVjdGlvbigpCisKKyAgICBTZXRGcm9udGVuZENvbm5l
Y3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGll
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYjA2ODAxOWVm
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JDbGll
bnQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
LmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5o
PgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
ck92ZXJsYXkuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQgZmluYWwgOiBw
dWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KFdlYkluc3BlY3RvckNs
aWVudCYgaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICA6IG1faW5zcGVjdG9yQ2xpZW50KGluc3Bl
Y3RvckNsaWVudCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflJlcGFpbnRJbmRpY2F0b3JM
YXllckNsaWVudCgpIHsgfQorcHJpdmF0ZToKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvbkVuZGVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuYW5pbWF0aW9uRW5kZWRGb3JMYXllcihsYXll
cik7CisgICAgfQorICAgIAorICAgIFdlYkluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGll
bnQ7Cit9OworCitXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVudChXZWJQYWdl
KiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2hpZ2hsaWdodE92ZXJsYXkobnVs
bHB0cikKK3sKK30KKworV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KCkK
K3sKKyAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9wYWludFJlY3RMYXllcnMpCisgICAgICAgIGxh
eWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgCisgICAgbV9wYWludFJlY3RMYXllcnMuY2xl
YXIoKTsKKworICAgIGlmIChtX3BhaW50UmVjdE92ZXJsYXkgJiYgbV9wYWdlLT5jb3JlUGFnZSgp
KQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVu
aW5zdGFsbFBhZ2VPdmVybGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRl
TW9kZTo6RmFkZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRQYWdl
RGVzdHJveWVkKCkKK3sKKyAgICBpZiAoV2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSBtX3BhZ2Ut
Pmluc3BlY3RvcihXZWJQYWdlOjpMYXp5Q3JlYXRpb25Qb2xpY3k6OlVzZUV4aXN0aW5nT25seSkp
CisgICAgICAgIGluc3BlY3Rvci0+Y2xvc2UoKTsKKworICAgIGRlbGV0ZSB0aGlzOworfQorCit2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZnJvbnRlbmRDb3VudENoYW5nZWQodW5zaWduZWQgY291
bnQpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3JGcm9udGVuZENvdW50Q2hhbmdlZChjb3VudCk7
Cit9CisKK0luc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBXZWJJbnNwZWN0b3JDbGllbnQ6Om9w
ZW5Mb2NhbEZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAg
bV9wYWdlLT5pbnNwZWN0b3IoKS0+b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY29udHJvbGxl
ci0+aXNVbmRlclRlc3QoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmJyaW5nRnJvbnRlbmRUb0Zyb250KCkKK3sKKyAgICBpZiAobV9wYWdl
LT5pbnNwZWN0b3IoKSkKKyAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+YnJpbmdUb0Zyb250
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRSZXNpemVNYWluRnJhbWUoRnJh
bWUqKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmlu
c3BlY3RvcigpLT51cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICghbV9oaWdobGlnaHRP
dmVybGF5KSB7CisgICAgICAgIGF1dG8gaGlnaGxpZ2h0T3ZlcmxheSA9IFBhZ2VPdmVybGF5Ojpj
cmVhdGUoKnRoaXMpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBoaWdobGlnaHRPdmVy
bGF5LnB0cigpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJv
bGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShXVEZNb3ZlKGhpZ2hsaWdodE92ZXJsYXkpLCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNl
dE5lZWRzRGlzcGxheSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGlnaGxpZ2h0T3Zlcmxh
eS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5z
ZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB9CisjZWxzZQorICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7
CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZ2V0SGlnaGxp
Z2h0KGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0ZVN5c3RlbTo6RG9jdW1l
bnQpOworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdobGlnaHQpOworI2Vu
ZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAobV9oaWdobGlnaHRPdmVybGF5KQorICAg
ICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFs
bFBhZ2VPdmVybGF5KCptX2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6
RmFkZSk7CisjZWxzZQorICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOworI2Vu
ZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fcGFpbnRSZWN0T3ZlcmxheSkgeworICAgICAgICBtX3BhaW50UmVjdE92ZXJsYXkg
PSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KKworICAgIGlmICghbV9wYWludEluZGljYXRv
ckxheWVyQ2xpZW50KQorICAgICAgICBtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQgPSBtYWtl
VW5pcXVlPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4oKnRoaXMpOworCisgICAgYXV0byBw
YWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+
Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKm1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCk7Cisg
ICAgCisgICAgcGFpbnRMYXllci0+c2V0TmFtZSgicGFpbnQgcmVjdCIpOworICAgIHBhaW50TGF5
ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBwYWludExheWVyLT5zZXRQ
b3NpdGlvbihyZWN0LmxvY2F0aW9uKCkpOworICAgIHBhaW50TGF5ZXItPnNldFNpemUocmVjdC5z
aXplKCkpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigxLjBmLCAw
LjBmLCAwLjBmLCAwLjJmKSk7CisKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBmYWRlS2V5ZnJhbWVz
KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKKyAgICBmYWRlS2V5ZnJhbWVzLmluc2VydChtYWtl
VW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAsIDEpKTsKKworICAgIGZhZGVLZXlmcmFtZXMu
aW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMC4yNSwgMCkpOworICAgIAor
ICAgIGF1dG8gb3BhY2l0eUFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgb3Bh
Y2l0eUFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMC4yNSk7CisKKyAgICBwYWludExheWVyLT5hZGRB
bmltYXRpb24oZmFkZUtleWZyYW1lcywgRmxvYXRTaXplKCksIG9wYWNpdHlBbmltYXRpb24ucHRy
KCksICJvcGFjaXR5Il9zLCAwKTsKKyAgICAKKyAgICBHcmFwaGljc0xheWVyJiByYXdMYXllciA9
IHBhaW50TGF5ZXIuZ2V0KCk7CisgICAgbV9wYWludFJlY3RMYXllcnMuYWRkKFdURk1vdmUocGFp
bnRMYXllcikpOworCisgICAgR3JhcGhpY3NMYXllciYgb3ZlcmxheVJvb3RMYXllciA9IG1fcGFp
bnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKKyAgICBvdmVybGF5Um9vdExheWVyLmFkZENoaWxkKHJh
d0xheWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmFuaW1hdGlvbkVuZGVkRm9y
TGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllciog
bm9uQ29uc3RMYXllciA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NMYXllcio+KGxheWVyKTsKKyAgICBu
b25Db25zdExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWludFJlY3RMYXllcnMu
cmVtb3ZlKCpub25Db25zdExheWVyKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd0luc3BlY3RvckluZGljYXRpb24oKQoreworICAg
IG1fcGFnZS0+c2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCkKK3sKKyAgICBtX3BhZ2UtPmhpZGVJ
bnNwZWN0b3JJbmRpY2F0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRT
ZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZW5hYmxlZCkKKyAg
ICAgICAgbV9wYWdlLT5lbmFibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7CisgICAgZWxzZQorICAg
ICAgICBtX3BhZ2UtPmRpc2FibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7Cit9CisjZW5kaWYKKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0
aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmlu
c3BlY3RvcigpLT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChhY3RpdmUpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQor
eworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3Rv
cigpLT50aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25h
bDxib29sPiBlbmFibGVkKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAg
ICBtX3BhZ2UtPmluc3BlY3RvcigpLT5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvUGFn
ZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5nIGF3YXkgZnJvbSB0aGUg
d2ViIHBhZ2UsIHJlc2V0IGl0LgorICAgIEFTU0VSVChtX2hpZ2hsaWdodE92ZXJsYXkpOworICAg
IG1faGlnaGxpZ2h0T3ZlcmxheSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCit7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgLypkaXJ0eVJlY3QqLykK
K3sKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kcmF3SGln
aGxpZ2h0KGNvbnRleHQpOworfQorCitib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVu
dChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yN2MzZWUxNDJlMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xp
ZW50LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2Ns
YXNzIEludFJlY3Q7CitjbGFzcyBQYWdlT3ZlcmxheTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CisK
K2NsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGll
bnQsIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitmcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50
OworcHVibGljOgorICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7CisgICAgdmlydHVh
bCB+V2ViSW5zcGVjdG9yQ2xpZW50KCk7CisKK3ByaXZhdGU6CisgICAgLy8gV2ViQ29yZTo6SW5z
cGVjdG9yQ2xpZW50CisgICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBmcm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGU7CisKKyAg
ICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogb3BlbkxvY2FsRnJvbnRlbmQoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlciopIG92ZXJyaWRlOworICAgIHZvaWQgYnJpbmdGcm9udGVuZFRv
RnJvbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlc2l6ZU1haW5GcmFtZShXZWJDb3JlOjpG
cmFtZSopIG92ZXJyaWRlOworCisgICAgdm9pZCBoaWdobGlnaHQoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGhpZGVIaWdobGlnaHQoKSBvdmVycmlkZTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgdm9pZCBzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOworICAgIHZvaWQg
aGlkZUluc3BlY3RvckluZGljYXRpb24oKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGlkU2V0U2Vh
cmNoaW5nRm9yTm9kZShib29sKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCBlbGVtZW50
U2VsZWN0aW9uQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHRpbWVsaW5lUmVjb3Jk
aW5nQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKworICAgIGJvb2wgb3ZlcnJpZGVzU2hvd1BhaW50
UmVjdHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzaG93UGFp
bnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBz
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pIGZpbmFs
OworCisgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAorICAgIHZvaWQgd2lsbE1vdmVUb1BhZ2Uo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFuaW1hdGlvbkVuZGVk
Rm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworCisgICAgV2ViUGFnZSog
bV9wYWdlOworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7Cisg
ICAgCisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWlu
dEluZGljYXRvckxheWVyQ2xpZW50OworICAgIEhhc2hTZXQ8UmVmPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+PiBtX3BhaW50UmVjdExheWVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTg5ZTk4MjVhZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURp
c3BhdGNoZXIuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TY3JpcHRTdGF0ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViSW5zcGVj
dG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNo
ZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCit2b2lkIFdlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6cmVzZXQoKQoreworICAgIG1fZnJvbnRlbmRM
b2FkZWQgPSBmYWxzZTsKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworICAgIG1fcXVldWUuY2xl
YXIoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmZyb250
ZW5kTG9hZGVkKCkKK3sKKyAgICBtX2Zyb250ZW5kTG9hZGVkID0gdHJ1ZTsKKworICAgIGV2YWx1
YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXI6OnN1c3BlbmQoKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kTG9hZGVkKTsK
KyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKKyAgICBBU1NFUlQobV9xdWV1ZS5pc0VtcHR5KCkp
OworCisgICAgbV9zdXNwZW5kZWQgPSB0cnVlOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6dW5zdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQobV9zdXNwZW5kZWQp
OworCisgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKKworICAgIGV2YWx1YXRlUXVldWVkRXhwcmVz
c2lvbnMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRp
c3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpCit7CisgICAgZXZhbHVhdGVPclF1
ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChb
XCIiLCBjb21tYW5kLCAiXCJdKSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0
IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtl
U3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCIs
IFwiIiwgYXJndW1lbnQsICJcIl0pIikpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9v
bCBhcmd1bWVudCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmco
Ikluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgIiwgYXJn
dW1lbnQgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiXSkiKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJ
bnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaE1lc3NhZ2VBc3luYygiLCBtZXNzYWdlLCAiKSIp
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRl
T3JRdWV1ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQoreworICAgIGlmICgh
bV9mcm9udGVuZExvYWRlZCB8fCBtX3N1c3BlbmRlZCkgeworICAgICAgICBtX3F1ZXVlLmFwcGVu
ZChleHByZXNzaW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX3F1
ZXVlLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1l
KCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihleHByZXNzaW9uKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlUXVl
dWVkRXhwcmVzc2lvbnMoKQoreworICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24gOiBtX3F1ZXVlKSB7
CisgICAgICAgIEFTU0VSVCghbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgp
LmlzUGF1c2VkKCkpOworICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2Ny
aXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOworICAgIH0K
KworICAgIG1fcXVldWUuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZjVjNDI0ZTJkODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOworCisgICAgdm9pZCByZXNldCgpOwor
ICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZv
aWQgdW5zdXNwZW5kKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmQpOworICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoTWVz
c2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBl
dmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZXZhbHVh
dGVRdWV1ZWRFeHByZXNzaW9ucygpOworCisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIERlcXVl
PFN0cmluZz4gbV9xdWV1ZTsKKyAgICBib29sIG1fZnJvbnRlbmRMb2FkZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzAxNzg1MWY2ODcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5o
IgorCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1v
blZNLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IFdlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcik7Cit9CisKK1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXI6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKQorICAgIDogbV9x
dWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyIikpCit7Cit9CisKK1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXI6On5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCkKK3sKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7CisgICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCkK
K3sKKyAgICAvLyBJZiB0aGUgd2ViIHByb2Nlc3MgaGFzIG5vdCBiZWVuIGZ1bGx5IGluaXRpYWxp
emVkIHlldCwgdGhlbiB0aGVyZQorICAgIC8vIGlzIG5vIFZNIHRvIGJlIG5vdGlmaWVkIGFuZCB0
aHVzIG5vIGluZmluaXRlIGxvb3AgdG8gYnJlYWsuIEJhaWwgb3V0LgorICAgIGlmICghV2ViQ29y
ZTo6Y29tbW9uVk1Pck51bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDOjpWTSYgdm0g
PSBXZWJDb3JlOjpjb21tb25WTSgpOworICAgIHZtLm5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDhmNmJk
MDIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
IDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IGNy
ZWF0ZSgpOworICAgIH5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7CisgICAgCisg
ICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKKyAgICAKK3By
aXZhdGU6CisgICAgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpOworICAgIC8vIElQ
Qzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgorICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Cisg
ICAgCisgICAgdm9pZCBub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpOworICAgIAorICAgIFJlZjxX
b3JrUXVldWU+IG1fcXVldWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTg3MGU1MmI3M2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyNSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyIHsKKyAgICBOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clVJLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmFhNmY2ZWRl
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yVUkuY3BwCkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rvck1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9D
ZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8V2ViSW5zcGVjdG9yVUk+
IFdlYkluc3BlY3RvclVJOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JVSShwYWdlKSk7Cit9CisKK1dlYkluc3BlY3RvclVJOjpX
ZWJJbnNwZWN0b3JVSShXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBt
X2Zyb250ZW5kQVBJRGlzcGF0Y2hlcihwYWdlKQorICAgICwgbV9kZWJ1Z2dhYmxlSW5mbyhEZWJ1
Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpCit7CisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHRydWUpOworICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SW1hZ2VCaXRtYXBF
bmFibGVkKHRydWUpOworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJHTDJFbmFibGVkKHRydWUpOworI2VuZGlmCit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5
SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9E
YXRhJiBkZWJ1Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25M
ZXZlbCkKK3sKKyAgICBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyID0gaW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXI7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IGRlYnVnZ2FibGVJbmZvOworICAgIG1f
dW5kZXJUZXN0ID0gdW5kZXJUZXN0OworICAgIG1faW5zcGVjdGlvbkxldmVsID0gaW5zcGVjdGlv
bkxldmVsOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIucmVzZXQoKTsKKworICAgIG1f
ZnJvbnRlbmRDb250cm9sbGVyID0gJm1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCk7CisgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KHRoaXMpOworCisgICAgdXBkYXRlQ29ubmVjdGlvbigpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjp1cGRhdGVDb25uZWN0aW9uKCkKK3sKKyAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlv
bikgeworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7CisgICAgICAg
IG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKworI2lmIFVTRShVTklYX0RP
TUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlvbjo6U29ja2V0UGFpciBzb2NrZXRQYWly
ID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVQbGF0Zm9ybUNvbm5lY3Rpb24oKTsKKyAgICBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoc29ja2V0UGFpci5z
ZXJ2ZXIpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChzb2NrZXRQ
YWlyLmNsaWVudCk7CisjZWxpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbGlzdGVuaW5n
UG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90
YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KSAhPSBL
RVJOX1NVQ0NFU1MpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAobWFjaF9wb3J0X2luc2Vy
dF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0ZW5pbmdQb3J0LCBN
QUNIX01TR19UWVBFX01BS0VfU0VORCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICBDUkFTSCgp
OworCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
KGxpc3RlbmluZ1BvcnQpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9y
dChsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7CisjZWxpZiBQTEFURk9S
TShXSU4pCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlm
aWVyLCBjb25uQ2xpZW50OworICAgIElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQW5kQ2xp
ZW50SWRlbnRpZmllcnMoY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGllbnQpOworICAgIElQ
Qzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChjb25uQ2xpZW50KTsKKyNlbHNlCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKKworI2lmIFVTRShVTklY
X0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhEQVJXSU4pIHx8IFBMQVRGT1JNKFdJTikKKyAgICBtX2Jh
Y2tlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0aW9u
KGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7CisgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+
b3BlbigpOworI2VuZGlmCisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0RnJv
bnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25DbGllbnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OndpbmRvd09iamVjdENsZWFyZWQo
KQoreworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRp
c2Nvbm5lY3RDbGllbnQoKTsKKworICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpjcmVhdGUodGhpcywgbV9wYWdlLmNvcmVQYWdlKCkpOworICAgIG1fZnJvbnRlbmRI
b3N0LT5hZGRTZWxmVG9HbG9iYWxPYmplY3RJbldvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmZyb250ZW5kTG9hZGVkKCk7CisKKyAgICAvLyBUZWxsIHRo
ZSBuZXcgZnJvbnRlbmQgYWJvdXQgdGhlIGN1cnJlbnQgZG9jayBzdGF0ZS4gSWYgdGhlIHdpbmRv
dyBvYmplY3QKKyAgICAvLyBjbGVhcmVkIGR1ZSB0byBhIHJlbG9hZCwgdGhlIGRvY2sgc3RhdGUg
d29uJ3QgYmUgcmVzZW50IGZyb20gVUlQcm9jZXNzLgorICAgIHNldERvY2tpbmdVbmF2YWlsYWJs
ZShtX2RvY2tpbmdVbmF2YWlsYWJsZSk7CisgICAgc2V0RG9ja1NpZGUobV9kb2NrU2lkZSk7Cisg
ICAgc2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpGcm9udGVuZExvYWRlZCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKwor
ICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRv
d0RyYWcoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTdGFydFdpbmRvd0Ry
YWcoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZsb2F0UmVjdCBmcmFt
ZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOworICAgIGZy
YW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS5zZXRX
aW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9G
cm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6
Y2xvc2VXaW5kb3coKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9z
ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKworICAgIGlmIChtX2JhY2tlbmRDb25u
ZWN0aW9uKSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAg
ICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1f
ZnJvbnRlbmRDb250cm9sbGVyKSB7CisgICAgICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9mcm9udGVuZENvbnRy
b2xsZXIgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAgICAg
ICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKworICAgIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIgPSB7IH07CisgICAgbV91bmRlclRlc3QgPSBmYWxzZTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6UmVvcGVuKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6UmVzZXRTdGF0ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKworV2Vi
Q29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBXZWJJbnNwZWN0b3JVSTo6dXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3Jl
UGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUk6OnJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQoreworICAgIGF1dG8m
IHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKKyAgICBzd2l0Y2ggKHNpZGUp
IHsKKyAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIERvY2tTaWRlOjpSaWdodDoKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoUmln
aHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRG9ja1NpZGU6OkxlZnQ6CisgICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaExlZnQoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9j
a1NpZGU6OkJvdHRvbToKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCit7CisgICAgQVND
SUlMaXRlcmFsIHNpZGVTdHJpbmcgeyBBU0NJSUxpdGVyYWw6Om51bGwoKSB9OworCisgICAgc3dp
dGNoIChzaWRlKSB7CisgICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6CisgICAgICAgIHNpZGVT
dHJpbmcgPSAidW5kb2NrZWQiX3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEb2NrU2lk
ZTo6UmlnaHQ6CisgICAgICAgIHNpZGVTdHJpbmcgPSAicmlnaHQiX3M7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKKyAgICAgICAgc2lkZVN0cmluZyA9ICJsZWZ0
Il9zOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKKyAgICAg
ICAgc2lkZVN0cmluZyA9ICJib3R0b20iX3M7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IG1fZG9ja1NpZGUgPSBzaWRlOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJzZXREb2NrU2lkZSJfcywgU3RyaW5nKHNpZGVTdHJpbmcpKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wgdW5hdmFpbGFibGUp
Cit7CisgICAgbV9kb2NraW5nVW5hdmFpbGFibGUgPSB1bmF2YWlsYWJsZTsKKworICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxl
Il9zLCB1bmF2YWlsYWJsZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldElzVmlzaWJs
ZShib29sIHZpc2libGUpCit7CisgICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOworCisgICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHZp
c2libGUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OlNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChy
ZWN0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAobV9iYWNrZW5k
Q29ubmVjdGlvbikgeworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6Ok9wZW5Jbk5ld1RhYih1cmwpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzYXZl
KGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKK3sKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwg
Zm9yY2VTYXZlQXMpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6YXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RG
OjpTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkFw
cGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0ZWRV
UkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZv
JiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNo
b3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKK30KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9vbCBXZWJJbnNwZWN0
b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0dXJuIG1fcGFnZS5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUsIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRp
Y3Rpb25hcnkpCit7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwg
IldlYiBJbnNwZWN0b3IgRnJvbnRlbmQgRGlhZ25vc3RpY3MiX3MsIGRpY3Rpb25hcnksIFNob3Vs
ZFNhbXBsZTo6Tm8pOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyAgICAvLyBJbnNwZWN0b3IncyBkaWFn
bm9zdGljIGxvZ2dpbmcgY2xpZW50IHNob3VsZCBuZXZlciBiZSB1c2VkIHVubGVzcyB0aGUgcGFn
ZSBzZXR0aW5nIGlzIGFsc28gZW5hYmxlZC4KKyAgICBBU1NFUlQoIWF2YWlsYWJsZSB8fCBzdXBw
b3J0c0RpYWdub3N0aWNMb2dnaW5nKCkpOworICAgIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUgPSBhdmFpbGFibGU7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIl9zLCBtX2RpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q29u
c29sZSgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJz
aG93Q29uc29sZSJfcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dSZXNvdXJjZXMo
KQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd1Jl
c291cmNlcyJfcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dNYWluUmVzb3VyY2VG
b3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcikKK3sKKyAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSJf
cywgZnJhbWVJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRQYWdl
UHJvZmlsaW5nKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1h
bmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywgdHJ1ZSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnN0b3BQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywg
ZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydEVsZW1lbnRTZWxlY3Rpb24o
KQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RWxl
bWVudFNlbGVjdGlvbkVuYWJsZWQiX3MsIHRydWUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
OjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJfcywgZmFsc2UpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3Ms
IHVybCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFw
cGVuZGVkVG9VUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnBhZ2VQYXVzZWQoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LnN1c3BlbmQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVVucGF1c2VkKCkKK3sK
KyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci51bnN1c3BlbmQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZW5kTWVzc2FnZVRvQmFja2VuZCht
ZXNzYWdlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JVSTo6dGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1
Z2dhYmxlSW5mby50YXJnZXRQbGF0Zm9ybU5hbWU7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JV
STo6dGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxl
SW5mby50YXJnZXRCdWlsZFZlcnNpb247Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFy
Z2V0UHJvZHVjdFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZv
LnRhcmdldFByb2R1Y3RWZXJzaW9uOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJp
bmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisjZW5kaWYgLy8g
IVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclVJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjYzOWYyMWM5YjYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9u
dGVuZEFQSURpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnNw
ZWN0b3JDb250cm9sbGVyOworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworY2xhc3MgRmxvYXRSZWN0
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2Vi
SW5zcGVjdG9yVUkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJJbnNwZWN0b3JVST4sIHByaXZhdGUg
SVBDOjpDb25uZWN0aW9uOjpDbGllbnQsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JVST4gY3JlYXRl
KFdlYlBhZ2UmKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0
b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJy
aWRlIHsgLyogRG8gbm90aGluZywgdGhlIGluc3BlY3RlZCBwYWdlIHByb2Nlc3MgbWF5IGhhdmUg
Y3Jhc2hlZCBhbmQgbWF5IGJlIGdldHRpbmcgcmVwbGFjZWQuICovIH0KKyAgICB2b2lkIGRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2VXaW5kb3coKTsgfQorCisg
ICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCisgICAgdm9pZCBlc3RhYmxp
c2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYsIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBp
bnNwZWN0aW9uTGV2ZWwpOworICAgIHZvaWQgdXBkYXRlQ29ubmVjdGlvbigpOworCisgICAgdm9p
ZCBzaG93Q29uc29sZSgpOworICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOworCisgICAgdm9pZCBz
aG93TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpOwor
CisgICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0b3BQYWdlUHJvZmls
aW5nKCk7CisKKyAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVjdGlvbigpOworICAgIHZvaWQgc3Rv
cEVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIHZvaWQgYXR0YWNoZWRCb3R0b20oKSB7IHNldERv
Y2tTaWRlKERvY2tTaWRlOjpCb3R0b20pOyB9CisgICAgdm9pZCBhdHRhY2hlZFJpZ2h0KCkgeyBz
ZXREb2NrU2lkZShEb2NrU2lkZTo6UmlnaHQpOyB9CisgICAgdm9pZCBhdHRhY2hlZExlZnQoKSB7
IHNldERvY2tTaWRlKERvY2tTaWRlOjpMZWZ0KTsgfQorICAgIHZvaWQgZGV0YWNoZWQoKSB7IHNl
dERvY2tTaWRlKERvY2tTaWRlOjpVbmRvY2tlZCk7IH0KKworICAgIHZvaWQgc2V0RG9ja1NpZGUo
RG9ja1NpZGUpOworICAgIHZvaWQgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wpOworCisgICAg
dm9pZCBzZXRJc1Zpc2libGUoYm9vbCk7CisKKyAgICB2b2lkIGRpZFNhdmUoY29uc3QgU3RyaW5n
JiB1cmwpOworICAgIHZvaWQgZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKTsKKworICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOworCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9URUxFTUVUUlkpCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZShib29sIGF2YWxpYWJsZSk7CisjZW5kaWYKKworICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50CisgICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBzdGFydFdpbmRv
d0RyYWcoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5
KSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNSZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorICAgIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0
cmluZygpOyB9CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7
IH0KKyAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
U3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0
YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgdGFyZ2V0SXNT
aW11bGF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVkIGlu
c3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5zcGVjdGlvbkxldmVs
OyB9CisKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xvc2VX
aW5kb3coKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlb3BlbigpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVzZXRTdGF0ZSgpIG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZTsKKworICAg
IHZvaWQgY2hhbmdlU2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwor
CisgICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZlKGNvbnN0IFdURjo6
U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdU
Rjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSBv
dmVycmlkZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgc3Vw
cG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOworICAgIGJvb2wgZGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlOyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgV1RGOjpTdHJpbmcm
IGV2ZW50TmFtZSwgY29uc3QgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVl
RGljdGlvbmFyeSYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9C
YWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdm9pZCBwYWdlUGF1c2VkKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBwYWdlVW5wYXVzZWQoKSBvdmVycmlkZTsKKworICAgIGJvb2wg
aXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclVJKFdlYlBhZ2UmKTsKKworICAgIFdlYlBhZ2Um
IG1fcGFnZTsKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9z
dD4gbV9mcm9udGVuZEhvc3Q7CisgICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9iYWNrZW5k
Q29ubmVjdGlvbjsKKworICAgIC8vIEtlZXAgYSBwb2ludGVyIHRvIHRoZSBmcm9udGVuZCdzIGlu
c3BlY3RvciBjb250cm9sbGVyIHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2gKKyAgICAvLyBjb3Jl
UGFnZSgpLCBzaW5jZSB3ZSBtYXkgbmVlZCBpdCBhZnRlciB0aGUgZnJvbnRlbmQncyBwYWdlIGhh
cyBzdGFydGVkIGRlc3RydWN0aW9uLgorICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIq
IG1fZnJvbnRlbmRDb250cm9sbGVyIHsgbnVsbHB0ciB9OworCisgICAgV2ViUGFnZVByb3h5SWRl
bnRpZmllciBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyOworICAgIGJvb2wgbV91bmRlclRlc3Qg
eyBmYWxzZSB9OworICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOworICAg
IGJvb2wgbV9kb2NraW5nVW5hdmFpbGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Zpc2li
bGUgeyBmYWxzZSB9OworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wg
bV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07CisjZW5kaWYKKworICAgIERv
Y2tTaWRlIG1fZG9ja1NpZGUgeyBEb2NrU2lkZTo6VW5kb2NrZWQgfTsKKyAgICB1bnNpZ25lZCBt
X2luc3BlY3Rpb25MZXZlbCB7IDEgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JV
SS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVUkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjk0ZjEzODVkNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDUzIEBA
CisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2Vz
IC0+IFdlYkluc3BlY3RvclVJIHsKKyAgICBFc3RhYmxpc2hDb25uZWN0aW9uKFdlYktpdDo6V2Vi
UGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgc3RydWN0IFdlYktp
dDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5z
aWduZWQgaW5zcGVjdGlvbkxldmVsKQorICAgIFVwZGF0ZUNvbm5lY3Rpb24oKQorCisgICAgQXR0
YWNoZWRCb3R0b20oKQorICAgIEF0dGFjaGVkUmlnaHQoKQorICAgIEF0dGFjaGVkTGVmdCgpCisg
ICAgRGV0YWNoZWQoKQorICAgIFNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVuYXZhaWxhYmxl
KQorICAgIFNldElzVmlzaWJsZShib29sIHZpc2libGUpCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X1RFTEVNRVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWls
YWJsZSkKKyNlbmRpZgorCisgICAgU2hvd0NvbnNvbGUoKQorICAgIFNob3dSZXNvdXJjZXMoKQor
CisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmluZyBmcmFtZUlkZW50aWZpZXIpCisK
KyAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQorICAgIFN0b3BQYWdlUHJvZmlsaW5nKCkKKworICAg
IFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCisgICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQorCisg
ICAgRGlkU2F2ZShTdHJpbmcgdXJsKQorICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQorCisgICAg
U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE3MGY2ZmQ1
MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKworI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdl
YlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKK3sKK30KKworU3RyaW5nIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiB0b1Rhcmdl
dElEKG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNv
bm5lY3Rpb25UeXBlKQoreworICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NoYW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWw+KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7CisgICAgaWYgKG1f
cGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKK30KKwordm9pZCBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1fY2hhbm5lbCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKKyAgICAgICAgbV9wYWdl
LmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKm1f
Y2hhbm5lbCk7CisgICAgbV9jaGFubmVsLnJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldDo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQoreworICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKKyAgICAgICAgbV9wYWdlLmNvcmVQ
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQo
bWVzc2FnZSk7Cit9CisKK1N0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElE
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmlu
ZygicGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi42Y2JkN2ZhZDVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOworCitjbGFzcyBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0KTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0KFdlYlBhZ2UmKTsKKyAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVm
YXVsdDsKKworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9CisK
KyAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBjb25uZWN0
KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBTdHJpbmcg
dG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgV2Vi
UGFnZSYgbV9wYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsPiBtX2NoYW5uZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY5MDE3YzRlZGFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6
OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBt
X3BhZ2UocGFnZSkKKyAgICAsIG1fcGFnZVRhcmdldChwYWdlKQoreworICAgIC8vIERvIG5vdCBz
ZW5kIHRoZSBwYWdlIHRhcmdldCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2ViUGFnZVByb3h5IHdp
bGwgbWFuYWdlciB0aGlzIGZvciB1cy4KKyAgICBtX3RhcmdldHMuc2V0KG1fcGFnZVRhcmdldC5p
ZGVudGlmaWVyKCksICZtX3BhZ2VUYXJnZXQpOworfQorCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlcjo6fldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCkKK3sKK30KKwor
dm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFyZ2V0KEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Rh
cmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyKCksICZ0YXJnZXQpOworICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50
aWZpZXIoKSwgdGFyZ2V0LnR5cGUoKSkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmIHRh
cmdldCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVudGlmaWVyKCkgIT0g
bV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1vdmUgdGhlIG1haW4g
dGFyZ2V0LiIpOworCisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVz
dHJveUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpKSk7CisKKyAgICBtX3Rhcmdl
dHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9u
VHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOworICAg
IGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPmNvbm5lY3QoY29u
bmVjdGlvblR5cGUpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
OjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit7CisgICAgYXV0
byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKKyAgICBpZiAoIXRhcmdldCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5k
KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBh
dXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQor
ICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5k
KG1lc3NhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uN2M5MzFkYWQxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViUGFn
ZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3MgSW5z
cGVjdG9yVGFyZ2V0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsK
KworY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyKFdlYlBhZ2UmKTsKKyAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIo
KTsKKworICAgIHZvaWQgYWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Jik7Cisg
ICAgdm9pZCByZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKKworICAg
IHZvaWQgY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOworICAgIHZvaWQgZGlzY29ubmVjdElu
c3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQgbV9wYWdlVGFyZ2V0OworICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldCo+IG1fdGFyZ2V0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUxYjVmNzEzNzMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCisgICAg
OiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fdGFyZ2V0SWQodGFyZ2V0SWQpCisgICAgLCBtX2Nvbm5l
Y3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKQoreworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2Vu
ZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3NhZ2UpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44
MTg0YWM1YmRhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCkBAIC0wLDAg
KzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKK3B1YmxpYzoKKyAgICBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwor
ICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRl
ZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9CisgICAgdm9pZCBzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKworICAg
IFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBTdHJpbmcgbV90YXJnZXRJZDsKKyAgICBJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI0Zjk3ZmU4ZDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSUd0
ay5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAg
TW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgorI2luY2x1
ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQorewor
ICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0
cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93
ZWJraXQvaW5zcGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5q
cyIpOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NV
UkwoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQv
aW5zcGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjllNTVmM2Q1OGExCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9y
VUlNYWMubW0KQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSS5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5z
cGVjdG9yVUkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQoreworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgU3RyaW5nIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpCit7Cisg
ICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNv
bS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOworICAgIGlmICghYnVuZGxlKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291
cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMiXTsKKyAgICBpZiAoIXBhdGgpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAKKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKK30KKworU3RyaW5n
IFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisKK1N0cmluZyBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDY4MDE5ZWY4Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvckNsaWVudC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRlICJX
ZWJJbnNwZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9B
bmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yT3ZlcmxheS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVu
dCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQoV2Vi
SW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQpCi0gICAgICAgIDogbV9pbnNwZWN0b3JD
bGllbnQoaW5zcGVjdG9yQ2xpZW50KQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+UmVwYWlu
dEluZGljYXRvckxheWVyQ2xpZW50KCkgeyB9Ci1wcml2YXRlOgotICAgIHZvaWQgbm90aWZ5QW5p
bWF0aW9uRW5kZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlCi0gICAgewotICAgICAgICBtX2luc3BlY3RvckNsaWVudC5hbmltYXRpb25FbmRlZEZv
ckxheWVyKGxheWVyKTsKLSAgICB9Ci0gICAgCi0gICAgV2ViSW5zcGVjdG9yQ2xpZW50JiBtX2lu
c3BlY3RvckNsaWVudDsKLX07Ci0KLVdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xp
ZW50KFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1faGlnaGxpZ2h0
T3ZlcmxheShudWxscHRyKQotewotfQotCi1XZWJJbnNwZWN0b3JDbGllbnQ6On5XZWJJbnNwZWN0
b3JDbGllbnQoKQotewotICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX3BhaW50UmVjdExheWVycykK
LSAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAKLSAgICBtX3BhaW50UmVj
dExheWVycy5jbGVhcigpOwotCi0gICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSAmJiBtX3BhZ2Ut
PmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250
cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92
ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQotewotICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
ciA9IG1fcGFnZS0+aW5zcGVjdG9yKFdlYlBhZ2U6OkxhenlDcmVhdGlvblBvbGljeTo6VXNlRXhp
c3RpbmdPbmx5KSkKLSAgICAgICAgaW5zcGVjdG9yLT5jbG9zZSgpOwotCi0gICAgZGVsZXRlIHRo
aXM7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpmcm9udGVuZENvdW50Q2hhbmdlZCh1
bnNpZ25lZCBjb3VudCkKLXsKLSAgICBtX3BhZ2UtPmluc3BlY3RvckZyb250ZW5kQ291bnRDaGFu
Z2VkKGNvdW50KTsKLX0KLQotSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIFdlYkluc3BlY3Rv
ckNsaWVudDo6b3BlbkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxl
cikKLXsKLSAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5vcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVu
ZChjb250cm9sbGVyLT5pc1VuZGVyVGVzdCgpKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YnJpbmdGcm9udGVuZFRvRnJvbnQoKQotewotICAg
IGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5i
cmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFJlc2l6ZU1h
aW5GcmFtZShGcmFtZSopCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAgICAg
IG1fcGFnZS0+aW5zcGVjdG9yKCktPnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCi17Ci0gICAgaWYgKCFtX3BhZ2Ut
PmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKCFt
X2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAgYXV0byBoaWdobGlnaHRPdmVybGF5ID0gUGFn
ZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IGhp
Z2hsaWdodE92ZXJsYXkucHRyKCk7Ci0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KFdURk1vdmUoaGlnaGxpZ2h0T3Zl
cmxheSksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7Ci0gICAgICAgIG1faGlnaGxpZ2h0
T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9oaWdo
bGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOwotICAgICAgICBtX2hpZ2hsaWdo
dE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwotICAgIH0KLSNlbHNlCi0gICAgSGlnaGxpZ2h0
IGhpZ2hsaWdodDsKLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lz
dGVtOjpEb2N1bWVudCk7Ci0gICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGhpZ2hs
aWdodCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGln
aHQoKQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChtX2hpZ2hsaWdodE92
ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVy
KCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpGYWRlKTsKLSNlbHNlCi0gICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySGlnaGxp
Z2h0KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAgICAgIG1fcGFpbnRS
ZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVy
bGF5VHlwZTo6RG9jdW1lbnQpOwotICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgqbV9wYWludFJlY3RPdmVybGF5LCBQ
YWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX3Bh
aW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCi0gICAgICAgIG1fcGFpbnRJbmRpY2F0b3JMYXllckNs
aWVudCA9IG1ha2VVbmlxdWU8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PigqdGhpcyk7Ci0K
LSAgICBhdXRvIHBhaW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLT5kcmF3
aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqbV9wYWludEluZGljYXRvckxheWVy
Q2xpZW50KTsKLSAgICAKLSAgICBwYWludExheWVyLT5zZXROYW1lKCJwYWludCByZWN0Iik7Ci0g
ICAgcGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwotICAgIHBhaW50
TGF5ZXItPnNldFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKLQotICAgIEtleWZyYW1lVmFsdWVMaXN0IGZh
ZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIGZhZGVLZXlmcmFtZXMu
aW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMCwgMSkpOwotCi0gICAgZmFk
ZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLjI1LCAw
KSk7Ci0gICAgCi0gICAgYXV0byBvcGFjaXR5QW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUo
KTsKLSAgICBvcGFjaXR5QW5pbWF0aW9uLT5zZXREdXJhdGlvbigwLjI1KTsKLQotICAgIHBhaW50
TGF5ZXItPmFkZEFuaW1hdGlvbihmYWRlS2V5ZnJhbWVzLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFu
aW1hdGlvbi5wdHIoKSwgIm9wYWNpdHkiX3MsIDApOwotICAgIAotICAgIEdyYXBoaWNzTGF5ZXIm
IHJhd0xheWVyID0gcGFpbnRMYXllci5nZXQoKTsKLSAgICBtX3BhaW50UmVjdExheWVycy5hZGQo
V1RGTW92ZShwYWludExheWVyKSk7Ci0KLSAgICBHcmFwaGljc0xheWVyJiBvdmVybGF5Um9vdExh
eWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5sYXllcigpOwotICAgIG92ZXJsYXlSb290TGF5ZXIu
YWRkQ2hpbGQocmF3TGF5ZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YW5pbWF0
aW9uRW5kZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBHcmFw
aGljc0xheWVyKiBub25Db25zdExheWVyID0gY29uc3RfY2FzdDxHcmFwaGljc0xheWVyKj4obGF5
ZXIpOwotICAgIG5vbkNvbnN0TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX3BhaW50
UmVjdExheWVycy5yZW1vdmUoKm5vbkNvbnN0TGF5ZXIpOwotfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93SW5zcGVjdG9ySW5kaWNhdGlv
bigpCi17Ci0gICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUluc3BlY3RvckluZGljYXRpb24oKQotewotICAgIG1f
cGFnZS0+aGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChl
bmFibGVkKQotICAgICAgICBtX3BhZ2UtPmVuYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fcGFnZS0+ZGlzYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKLX0K
LSNlbmRpZgotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZWxlbWVudFNlbGVjdGlvbkNoYW5n
ZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAgICAg
IG1fcGFnZS0+aW5zcGVjdG9yKCktPmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9v
bCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFn
ZS0+aW5zcGVjdG9yKCktPnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChhY3RpdmUpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJy
aWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9y
KCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnNldE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWRPdmVycmlkZShlbmFibGVkKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Ondp
bGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKLXsKLSAgICBpZiAocGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdh
eSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCi0gICAgQVNTRVJUKG1faGlnaGxpZ2h0T3Zl
cmxheSk7Ci0gICAgbV9oaWdobGlnaHRPdmVybGF5ID0gbnVsbHB0cjsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKLXsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiAvKmRp
cnR5UmVjdCovKQotewotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yQ2xpZW50
Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2MzZWUxNDJlMS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0
b3JDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotY2xhc3MgR3JhcGhpY3NMYXllcjsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBQYWdlT3Zl
cmxheTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBS
ZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0KLWNsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6
IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92
ZXJsYXk6OkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1mcmllbmQgY2xh
c3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwotcHVibGljOgotICAgIFdlYkluc3BlY3Rv
ckNsaWVudChXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yQ2xpZW50KCk7Ci0K
LXByaXZhdGU6Ci0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50Ci0gICAgdm9pZCBpbnNw
ZWN0ZWRQYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9udGVuZENvdW50Q2hh
bmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0KLSAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bCogb3BlbkxvY2FsRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopIG92ZXJy
aWRlOwotICAgIHZvaWQgYnJpbmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRpZFJlc2l6ZU1haW5GcmFtZShXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBoaWdobGlnaHQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZGVIaWdobGlnaHQoKSBvdmVycmlk
ZTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzaG93SW5zcGVjdG9ySW5k
aWNhdGlvbigpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUluc3BlY3RvckluZGljYXRpb24oKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShib29sKSBvdmVycmlk
ZTsKLSNlbmRpZgotCi0gICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKSBvdmVycmlkZTsK
LQotICAgIGJvb2wgb3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
T3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pIGZpbmFsOwotCi0gICAgLy8gUGFnZU92ZXJsYXk6OkNs
aWVudAotICAgIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJD
b3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBh
Z2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1JlY3Qo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6
OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFdlYkNvcmU6OlBhZ2VP
dmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7Ci0gICAgCi0gICAgUmVmUHRyPFdlYkNvcmU6OlBh
Z2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OwotICAg
IEhhc2hTZXQ8UmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX3BhaW50UmVjdExheWVyczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1NThkOGYwYzI0Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQotI2luY2x1ZGUgIlJlbW90
ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0
b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShHVEspICYmICFQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLVJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNy
ZWF0ZShXZWJQYWdlJiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdl
Ykluc3BlY3RvclVJKHBhZ2UpKTsKLX0KLQotUmVtb3RlV2ViSW5zcGVjdG9yVUk6OlJlbW90ZVdl
Ykluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRhJiYgZGVidWdnYWJsZUluZm8sIGNv
bnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQotewotICAgIG1fZGVidWdnYWJsZUluZm8g
PSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJh
Y2tlbmRDb21tYW5kc1VSTDsKLQotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7Ci0KLSAgICBtX2Zyb250
ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOwotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB0cnVlKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNhdmVkVVJMIl9zLCB1
cmwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQoY29uc3QgU3Ry
aW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3NhZ2UpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0g
ICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVj
dENsaWVudCgpOwotCi0gICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6
OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7Ci0gICAgbV9mcm9udGVuZEhvc3QtPmFk
ZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCi17Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKLQotICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9zLCB0cnVlKTsKLQot
ICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpjaGFu
Z2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1fcGFnZS5pZGVudGlmaWVy
KCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRvd0RyYWcoKQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTdGFydFdpbmRvd0RyYWco
KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIEZsb2F0UmVjdCBmcmFtZVJl
Y3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOwotICAgIGZyYW1l
UmVjdC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS5zZXRXaW5k
b3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24o
KSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbigpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpicmluZ1Rv
RnJvbnQoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpCcmluZ1Rv
RnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OmNsb3NlV2luZG93KCkKLXsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIpOwotCi0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kRGlkQ2xvc2UoKSwgbV9w
YWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnJlb3Bl
bigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlb3BlbigpLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVz
ZXRTdGF0ZSgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0
U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3VGFiKHVybCksIG1fcGFnZS5pZGVudGlm
aWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZUFzKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjphcHBl
bmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRl
bnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
STo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICAv
LyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2FuIGtub3cgaWYgdGhlIG1haW4gcmVzb3Vy
Y2UgY2hhbmdlZC4KLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmlj
YXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJ
bmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLUluc3BlY3Rvcjo6RGVidWdnYWJsZVR5
cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2FibGVUeXBlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxlVHlwZTsKLX0KLQotU3RyaW5nIFJlbW90
ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKLX0KLQotU3RyaW5nIFJlbW90
ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKLX0KLQotU3RyaW5nIFJlbW90
ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Ci19Ci0KLWJvb2wgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxhdG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVsYXRvcjsKLX0KLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfVEVMRU1FVFJZKQotYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNE
aWFnbm9zdGljTG9nZ2luZygpCi17Ci0gICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT5zZXR0
aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOwotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsICBj
b25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5
KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxv
Z0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5hbWUsICJSZW1vdGUg
V2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxk
U2FtcGxlOjpObyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNldERpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotICAgIC8vIEluc3BlY3Rvcidz
IGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRo
ZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgotICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8
IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7Ci0gICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSA9IGF2YWlsYWJsZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3Bh
dGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGUpOwotfQotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAh
UExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotI2VuZGlmIC8vICFQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
V2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZVdlYkluc3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWUxYzFk
YWExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVXZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5o
IgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kSG9zdC5oPgot
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0
aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JVSSBmaW5hbCA6IHB1
YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclVJPiwgcHVibGljIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IGNyZWF0ZShXZWJQYWdl
Jik7Ci0KLSAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0ZWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUlNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIENhbGxlZCBieSBS
ZW1vdGVXZWJJbnNwZWN0b3JVSSBtZXNzYWdlcwotICAgIHZvaWQgaW5pdGlhbGl6ZShEZWJ1Z2dh
YmxlSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOwotICAgIHZv
aWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkaWRBcHBlbmQoY29uc3Qg
U3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmlu
ZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgdm9pZCBzZXREaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKLSNlbmRpZgotCi0gICAgLy8gV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKLSAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
aGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNSZW1vdGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KLSAgICBJbnNwZWN0b3I6OkRlYnVn
Z2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRh
cmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0YXJnZXRCdWls
ZFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0UHJvZHVjdFZlcnNp
b24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHRhcmdldElzU2ltdWxhdG9yKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQg
YnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldFN0YXRlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVudCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBi
b29sIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSBvdmVycmlkZTsKLSAgICBib29sIGRpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9kaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZTsgfQotICAgIHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50KGNvbnN0IFN0cmlu
ZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFs
dWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIGJvb2wgY2FuU2F2ZSgpIG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAxOyB9Ci0gICAgdm9pZCByZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1Np
ZGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5kb3dXaWR0aCh1
bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIFdlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcjsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsK
LSAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgbV9kZWJ1Z2dhYmxlSW5mbzsKLSAgICBTdHJpbmcgbV9i
YWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAg
ICBib29sIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUgeyBmYWxzZSB9OwotI2VuZGlmCi19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZjdlNGM4NzhkLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0
b3JVSS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBSZW1vdGVX
ZWJJbnNwZWN0b3JVSSB7Ci0gICAgSW5pdGlhbGl6ZShzdHJ1Y3QgV2ViS2l0OjpEZWJ1Z2dhYmxl
SW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwpCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLSNlbmRpZgotCi0gICAgRGlkU2F2ZShTdHJpbmcgdXJs
KQotICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQotCi0gICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkluc3BlY3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMjI1
ZDEzZGQzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNw
ZWN0b3IuaCIKLQotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9y
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvclBhZ2VBZ2VudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0Zl
YXR1cmVzLmg+Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAy
NTA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1
Owotc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAwOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZWY8V2ViSW5zcGVj
dG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBwYWdlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Ci19Ci0KLVdlYkluc3BlY3Rvcjo6V2Vi
SW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLXsKLX0KLQotV2Vi
SW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkKLXsKLSAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rp
b24pCi0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVz
dCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkxvY2FsSW5zcGVjdG9y
RnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1fcGFnZS0+aWRlbnRpZmll
cigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6
OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQotewotICAgIC8vIFdlIG1p
Z2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlzIHdlYiBwcm9jZXNzIGdvdCBzd2Fw
cGVkIGludG8gYSBXZWJQYWdlUHJveHkKLSAgICAvLyBzaG9ydGx5IGFmdGVyIGFub3RoZXIgcHJv
Y2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVjdGlvbi4KLSAgICBpZiAobV9mcm9udGVuZENvbm5l
Y3Rpb24pIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAg
ICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0KLQotI2lmIFVTRShV
TklYX0RPTUFJTl9TT0NLRVRTKQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25u
ZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucmVsZWFzZUZpbGVE
ZXNjcmlwdG9yKCkpOwotI2VsaWYgT1MoREFSV0lOKQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIu
cG9ydCgpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlm
aWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5oYW5k
bGUoKSk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotI2VuZGlm
Ci0KLSAgICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlv
bklkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Zyb250ZW5kQ29ubmVjdGlv
biA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29ubmVjdGlvbihjb25uZWN0aW9uSWRl
bnRpZmllciwgKnRoaXMpOwotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5vcGVuKCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zKQotICAg
ICAgICBjYWxsYmFjaygpOwotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVhcigp
OwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKQotewot
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPmlkZW50
aWZpZXIoKSk7Ci0KLSAgICAvLyBJZiB3ZSB0cmllZCB0byBjbG9zZSB0aGUgZnJvbnRlbmQgYmVm
b3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rpb24gZXhpc3RzIHlldC4KLSAgICBp
ZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24t
PmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOwot
ICAgIH0KLQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVhcigpOwotCi0gICAg
bV9hdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBmYWxzZTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQo
RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVj
dGlvbikgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci19Ci0KLS8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVzc2FnZXMKLXZvaWQgV2ViSW5zcGVj
dG9yOjpzaG93KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hv
dygpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQotewotICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDbG9zZSBjb3VsZCBiZSBj
YWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3duLgotICAgIGlmICghbV9mcm9udGVu
ZENvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsb3NlRnJvbnRlbmRDb25uZWN0
aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yIHsgUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlIH07Ci0KLSAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlID0gbV9wYWdl
LT5jb3JlUGFnZSgpOwotICAgIGlmICghaW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRnJhbWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGluc3BlY3RlZFBhZ2UtPm1haW5GcmFt
ZSgpOwotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICppbnNwZWN0ZWRN
YWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZyYW1lLmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0cmluZyB9LCAiX2JsYW5rIl9zLCBM
b2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJl
ciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5
OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3csIElu
aXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07Ci0KLSAgICBOYXZpZ2F0aW9uQWN0aW9uIGFj
dGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5pbml0aWF0ZWRCeU1haW5GcmFtZSgp
LCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKLSAgICBQYWdlKiBuZXdQYWdlID0gaW5z
cGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGluc3BlY3RlZE1haW5GcmFtZSwgZnJh
bWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24pOwotICAgIGlmICghbmV3UGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbmV3UGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkubG9hZChXVEZNb3Zl
KGZyYW1lTG9hZFJlcXVlc3QpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OmV2YWx1YXRlU2Ny
aXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29y
ZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChzY3JpcHQpOwotfQot
Ci12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQotewotICAgIGlmICghbV9wYWdlLT5j
b3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9u
RXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93Q29uc29sZSgpLCAwKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQotewotICAgIGlmICghbV9wYWdlLT5j
b3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9u
RXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93UmVzb3VyY2VzKCksIDApOwotICAgIH0pOwotfQot
Ci12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCi17Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJZGVudGlmaWVyKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2Uo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgU3RyaW5nIGluc3BlY3RvckZyYW1lSWRlbnRpZmll
ciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmVuc3VyZVBhZ2VB
Z2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsKLQotICAgIHdoZW5Gcm9udGVuZENv
bm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShp
bnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxp
c2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygpLCAwKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIW1fcGFn
ZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVj
dGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQcm9maWxpbmcoKSwgMCk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVsZW1lbnRTZWxlY3Rpb24oKQotewot
ICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGVu
RnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdGFydEVsZW1lbnRTZWxl
Y3Rpb24oKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzdG9wRWxlbWVu
dFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3Bl
Y3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSksIG1f
cGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnRpbWVsaW5lUmVj
b3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmll
cigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQotewotICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxl
ZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3I6OmNhbkF0
dGFjaFdpbmRvdygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0IGFsbG93IGF0dGFjaGluZyB0byBhbm90aGVyIGlu
c3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2luZG93IGlzIHRvbyBtdWNoIQotICAg
IGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwgYWxsb3cgYXR0YWNoaW5nIGFnYWlu
IHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4KLSAgICBpZiAobV9hdHRhY2hlZCkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5k
b3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3Rv
ciBzaXplLgotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX3BhZ2UtPmNvcmVQ
YWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotICAgIHVuc2lnbmVk
IGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpLT52aXNpYmxlV2lkdGgoKTsKLSAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQg
PSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87Ci0gICAg
cmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYg
bWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFnZVdpZHRoOwotfQotCi12b2lkIFdl
Ykluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpCi17Ci0gICAgaWYgKG1fYXR0
YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgY2FuQXR0YWNoV2luZG93ID0gdGhp
cy0+Y2FuQXR0YWNoV2luZG93KCk7Ci0gICAgaWYgKG1fcHJldmlvdXNDYW5BdHRhY2ggPT0gY2Fu
QXR0YWNoV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByZXZpb3VzQ2FuQXR0YWNo
ID0gY2FuQXR0YWNoV2luZG93OwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0
dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93KSwgbV9wYWdlLT5pZGVudGlm
aWVyKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDI2Yjg5ZTUyMjc3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJB
UElPYmplY3QuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUlkZW50aWZpZXIuaD4KLSNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYkluc3BlY3Rv
ciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZUluc3Bl
Y3Rvcj4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8V2ViSW5zcGVjdG9yPiBjcmVhdGUoV2ViUGFnZSopOwotCi0gICAgV2ViUGFnZSog
cGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQotCi0gICAgdm9pZCB1cGRhdGVEb2NraW5n
QXZhaWxhYmlsaXR5KCk7Ci0KLSAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0ZWQgV2ViSW5z
cGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3Zl
cnJpZGUgeyBjbG9zZSgpOyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNl
KSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KLQotICAgIHZvaWQgc2hvdygpOwotICAgIHZvaWQgY2xv
c2UoKTsKLQotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsK
LQotICAgIHZvaWQgY2FuQXR0YWNoV2luZG93KGJvb2wmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIHNo
b3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0KLSAgICB2b2lkIHNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIpOwotCi0gICAgdm9p
ZCBzZXRBdHRhY2hlZChib29sIGF0dGFjaGVkKSB7IG1fYXR0YWNoZWQgPSBhdHRhY2hlZDsgfQot
Ci0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEZvclRlc3QoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwot
Ci0gICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKLSAgICB2b2lkIHN0b3BQYWdlUHJvZmls
aW5nKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVjdGlvbigpOwotICAgIHZvaWQgc3Rv
cEVsZW1lbnRTZWxlY3Rpb24oKTsKLSAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJv
b2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQg
c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKLQot
ICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCk7Ci0KLSAgICB2
b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgY2xvc2UoKTsgfQotCi1wcml2YXRlOgotICAgIGZy
aWVuZCBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7Ci0KLSAgICBleHBsaWNpdCBXZWJJbnNwZWN0
b3IoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfldlYkluc3BlY3RvcigpOwotCi0gICAgYm9vbCBj
YW5BdHRhY2hXaW5kb3coKTsKLQotICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3RvckNsaWVu
dAotICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCB1bmRlclRlc3QpOwot
ICAgIHZvaWQgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKLQotICAgIHZvaWQgYnJpbmdUb0Zy
b250KCk7Ci0KLSAgICB2b2lkIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5j
dGlvbjx2b2lkKCk+JiYpOwotCi0gICAgV2ViUGFnZSogbV9wYWdlOwotCi0gICAgUmVmUHRyPElQ
Qzo6Q29ubmVjdGlvbj4gbV9mcm9udGVuZENvbm5lY3Rpb247Ci0gICAgVmVjdG9yPEZ1bmN0aW9u
PHZvaWQoKT4+IG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9uczsKLQotICAgIGJvb2wgbV9hdHRh
Y2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3ByZXZpb3VzQ2FuQXR0YWNoIHsgZmFsc2UgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkYWY3NGI1ZTZiMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCisrKyAv
ZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3IgewotICAgIFNob3coKQot
ICAgIENsb3NlKCkKLQotICAgIFNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpCi0KLSAgICBTaG93
Q29uc29sZSgpCi0gICAgU2hvd1Jlc291cmNlcygpCi0KLSAgICBTaG93TWFpblJlc291cmNlRm9y
RnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikKLQotICAgIE9w
ZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQotCi0gICAgU3RhcnRQYWdlUHJvZmlsaW5nKCkKLSAgICBT
dG9wUGFnZVByb2ZpbGluZygpCi0KLSAgICBTdGFydEVsZW1lbnRTZWxlY3Rpb24oKQotICAgIFN0
b3BFbGVtZW50U2VsZWN0aW9uKCkKLQotICAgIFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0
dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4OWU5
ODI1YWQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKLQotI2luY2x1ZGUg
IldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9TY3JpcHRDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRTdGF0ZS5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVy
OjpXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYgcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlcjo6cmVzZXQoKQotewotICAgIG1fZnJvbnRlbmRMb2FkZWQgPSBmYWxzZTsKLSAgICBtX3N1
c3BlbmRlZCA9IGZhbHNlOwotICAgIG1fcXVldWUuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zy
b250ZW5kTG9hZGVkID0gdHJ1ZTsKLQotICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OnN1c3BlbmQoKQot
ewotICAgIEFTU0VSVChtX2Zyb250ZW5kTG9hZGVkKTsKLSAgICBBU1NFUlQoIW1fc3VzcGVuZGVk
KTsKLSAgICBBU1NFUlQobV9xdWV1ZS5pc0VtcHR5KCkpOwotCi0gICAgbV9zdXNwZW5kZWQgPSB0
cnVlOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6dW5zdXNw
ZW5kKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kZWQpOwotCi0gICAgbV9zdXNwZW5kZWQgPSBm
YWxzZTsKLQotICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmQpCi17Ci0gICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5n
KCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCJdKSIpKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCi17Ci0g
ICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVu
ZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCIsIFwiIiwgYXJndW1lbnQsICJcIl0pIikp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBhcmd1bWVudCkKLXsKLSAgICBldmFs
dWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRp
c3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgIiwgYXJndW1lbnQgPyAidHJ1ZSIgOiAiZmFsc2Ui
LCAiXSkiKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpk
aXNwYXRjaE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgZXZhbHVh
dGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNw
YXRjaE1lc3NhZ2VBc3luYygiLCBtZXNzYWdlLCAiKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24oY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uKQotewotICAgIGlmICghbV9mcm9udGVuZExvYWRlZCB8fCBtX3N1
c3BlbmRlZCkgewotICAgICAgICBtX3F1ZXVlLmFwcGVuZChleHByZXNzaW9uKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7
Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmV4ZWN1dGVTY3Jp
cHRJZ25vcmluZ0V4Y2VwdGlvbihleHByZXNzaW9uKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKQotewotICAg
IGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24gOiBtX3F1ZXVlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9wYWdl
LmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmlzUGF1c2VkKCkpOwotICAgICAgICBt
X3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9y
aW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOwotICAgIH0KLQotICAgIG1fcXVldWUuY2xlYXIoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWM0MjRlMmQ4Ny4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlciB7Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyKFdl
YlBhZ2UmKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7
Ci0KLSAgICB2b2lkIHN1c3BlbmQoKTsKLSAgICB2b2lkIHVuc3VzcGVuZCgpOwotCi0gICAgdm9p
ZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kKTsKLSAgICB2b2lkIGRpc3Bh
dGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQp
OwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBh
cmd1bWVudCk7Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwotCi1wcml2YXRlOgotICAgIHZvaWQgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKLQot
ICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBEZXF1ZTxTdHJpbmc+IG1fcXVldWU7Ci0gICAgYm9v
bCBtX2Zyb250ZW5kTG9hZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3VzcGVuZGVkIHsgZmFs
c2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxNzg1MWY2
ODcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgiCi0KLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9W
TS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KLSNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlcj4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Y3JlYXRlKCkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
KTsKLX0KLQotV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6V2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlcigpCi0gICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20u
YXBwbGUuV2ViS2l0LldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIiKSkKLXsKLX0KLQot
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6fldlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIoKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6
OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKLXsKLSAg
ICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9xdWV1
ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
cjo6bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQotewotICAgIC8vIElmIHRoZSB3ZWIgcHJvY2Vz
cyBoYXMgbm90IGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgeWV0LCB0aGVuIHRoZXJlCi0gICAgLy8g
aXMgbm8gVk0gdG8gYmUgbm90aWZpZWQgYW5kIHRodXMgbm8gaW5maW5pdGUgbG9vcCB0byBicmVh
ay4gQmFpbCBvdXQuCi0gICAgaWYgKCFXZWJDb3JlOjpjb21tb25WTU9yTnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBKU0M6OlZNJiB2bSA9IFdlYkNvcmU6OmNvbW1vblZNKCk7Ci0gICAg
dm0ubm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ4ZjZiZDAyMGEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29y
a1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXI+IGNyZWF0ZSgpOwotICAgIH5XZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyKCk7Ci0gICAgCi0gICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJ
UEM6OkNvbm5lY3Rpb24qKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcigpOwotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2Fn
ZVJlY2VpdmVyLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdm9pZCBub3RpZnlOZWVkRGVidWdn
ZXJCcmVhaygpOwotICAgIAotICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODcwZTUyYjcz
Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBA
IC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0j
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
bWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlciB7Ci0gICAgTm90aWZ5
TmVlZERlYnVnZ2VyQnJlYWsoKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxZmFhNmY2ZWRlNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDExICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5j
bHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94
eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3Mu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvQ2hyb21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nl
dHRpbmdzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLVJlZjxXZWJJbnNwZWN0b3JVST4gV2ViSW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBw
YWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclVJKHBhZ2UpKTsK
LX0KLQotV2ViSW5zcGVjdG9yVUk6OldlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCi0gICAg
OiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCi0gICAg
LCBtX2RlYnVnZ2FibGVJbmZvKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkKLXsKLSAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEluc3BlY3RvckFkZGl0
aW9uc0VuYWJsZWQodHJ1ZSk7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5zZXRJbWFnZUJpdG1hcEVuYWJsZWQodHJ1ZSk7Ci0jaWYgRU5BQkxFKFdFQkdMMikK
LSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkdMMkVu
YWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6ZXN0YWJsaXNo
Q29ubmVjdGlvbihXZWJQYWdlUHJveHlJZGVudGlmaWVyIGluc3BlY3RlZFBhZ2VJZGVudGlmaWVy
LCBjb25zdCBEZWJ1Z2dhYmxlSW5mb0RhdGEmIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVyVGVz
dCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAgIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIgPSBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllcjsKLSAgICBtX2RlYnVnZ2FibGVJbmZvID0g
ZGVidWdnYWJsZUluZm87Ci0gICAgbV91bmRlclRlc3QgPSB1bmRlclRlc3Q7Ci0gICAgbV9pbnNw
ZWN0aW9uTGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWw7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0
Y2hlci5yZXNldCgpOwotCi0gICAgbV9mcm9udGVuZENvbnRyb2xsZXIgPSAmbV9wYWdlLmNvcmVQ
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBtX2Zyb250ZW5kQ29udHJvbGxlci0+
c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7Ci0KLSAgICB1cGRhdGVDb25uZWN0aW9u
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnVwZGF0ZUNvbm5lY3Rpb24oKQotewotICAg
IGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24t
PmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0g
ICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpDb25uZWN0aW9u
OjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRmb3Jt
Q29ubmVjdGlvbigpOwotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9u
SWRlbnRpZmllcihzb2NrZXRQYWlyLnNlcnZlcik7Ci0gICAgSVBDOjpBdHRhY2htZW50IGNvbm5l
Y3Rpb25DbGllbnRQb3J0KHNvY2tldFBhaXIuY2xpZW50KTsKLSNlbGlmIE9TKERBUldJTikKLSAg
ICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgaWYgKG1h
Y2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgJmxpc3RlbmluZ1BvcnQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgQ1JBU0goKTsKLQot
ICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGxpc3Rlbmlu
Z1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSAhPSBLRVJOX1NV
Q0NFU1MpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXIgY29ubmVjdGlvbklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCk7Ci0gICAgSVBDOjpBdHRhY2ht
ZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTU9W
RV9TRU5EKTsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGllbnQ7Ci0gICAgSVBDOjpDb25uZWN0
aW9uOjpjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhjb25uZWN0aW9uSWRlbnRpZmll
ciwgY29ubkNsaWVudCk7Ci0gICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0
KGNvbm5DbGllbnQpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsK
LSNlbmRpZgotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9TKERBUldJTikgfHwg
UExBVEZPUk0oV0lOKQotICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246
OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzKTsKLSAg
ICBtX2JhY2tlbmRDb25uZWN0aW9uLT5vcGVuKCk7Ci0jZW5kaWYKLQotICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbkNsaWVudFBv
cnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JV
STo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAg
ICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOwotCi0gICAgbV9mcm9udGVu
ZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBh
Z2UoKSk7Ci0gICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpmcm9u
dGVuZExvYWRlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2Fk
ZWQoKTsKLQotICAgIC8vIFRlbGwgdGhlIG5ldyBmcm9udGVuZCBhYm91dCB0aGUgY3VycmVudCBk
b2NrIHN0YXRlLiBJZiB0aGUgd2luZG93IG9iamVjdAotICAgIC8vIGNsZWFyZWQgZHVlIHRvIGEg
cmVsb2FkLCB0aGUgZG9jayBzdGF0ZSB3b24ndCBiZSByZXNlbnQgZnJvbSBVSVByb2Nlc3MuCi0g
ICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKG1fZG9ja2luZ1VuYXZhaWxhYmxlKTsKLSAgICBzZXRE
b2NrU2lkZShtX2RvY2tTaWRlKTsKLSAgICBzZXRJc1Zpc2libGUobV9pc1Zpc2libGUpOwotCi0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kTG9hZGVkKCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwotCi0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkp
Ci17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUo
KS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLmNv
cmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRvdygpCi17Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwot
Ci0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVj
dGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAobV9mcm9udGVuZENvbnRyb2xsZXIpIHsKLSAgICAgICAgbV9m
cm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIpOwot
ICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVu
dCgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllciA9IHsgfTsKLSAgICBtX3VuZGVy
VGVzdCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpyZW9wZW4oKQotewotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZW9wZW4oKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlc2V0U3RhdGUoKQotewotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZXNldFN0YXRlKCksIG1faW5zcGVjdGVkUGFn
ZUlkZW50aWZpZXIpOwotfQotCi1XZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
IFdlYkluc3BlY3RvclVJOjp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVxdWVzdFNldERvY2tTaWRlKERvY2tT
aWRlIHNpZGUpCi17Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOwotICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2VkOgot
ICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpEZXRhY2goKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgotICAgICAgICB3
ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKLSAgICAgICAgd2ViUHJv
Y2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgotICAgICAgICB3ZWJQcm9jZXNz
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpBdHRhY2hCb3R0b20oKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja1NpZGUoRG9j
a1NpZGUgc2lkZSkKLXsKLSAgICBBU0NJSUxpdGVyYWwgc2lkZVN0cmluZyB7IEFTQ0lJTGl0ZXJh
bDo6bnVsbCgpIH07Ci0KLSAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICBjYXNlIERvY2tTaWRlOjpV
bmRvY2tlZDoKLSAgICAgICAgc2lkZVN0cmluZyA9ICJ1bmRvY2tlZCJfczsKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKLSAgICAgICAgc2lkZVN0cmluZyA9ICJy
aWdodCJfczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpMZWZ0OgotICAg
ICAgICBzaWRlU3RyaW5nID0gImxlZnQiX3M7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBE
b2NrU2lkZTo6Qm90dG9tOgotICAgICAgICBzaWRlU3RyaW5nID0gImJvdHRvbSJfczsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9kb2NrU2lkZSA9IHNpZGU7Ci0KLSAgICBtX2Zyb250
ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERvY2tTaWRlIl9zLCBTdHJpbmco
c2lkZVN0cmluZykpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NraW5nVW5hdmFp
bGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKLXsKLSAgICBtX2RvY2tpbmdVbmF2YWlsYWJsZSA9IHVu
YXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHVuYXZhaWxhYmxlKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2V0SXNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBtX2lzVmlzaWJs
ZSA9IHZpc2libGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1h
bmQoInNldElzVmlzaWJsZSJfcywgdmlzaWJsZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6
OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmNo
YW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlU2hl
ZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJs
KQotewotICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAgIG1fYmFja2VuZENv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6T3BlbkluTmV3VGFiKHVybCks
IDApOwotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZUFzKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBj
b250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjphcHBlbmQoY29uc3QgV1RGOjpTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCkKLXsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6Omluc3BlY3RlZFVS
TENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDZXJ0aWZpY2F0
ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxF
TUVUUlkpCi1ib29sIFdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkK
LXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3RpY0xv
Z2dpbmdFbmFibGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNF
dmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQ6OlZhbHVlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKLXsKLSAgICBtX3BhZ2UuY29yZVBhZ2Uo
KS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1
ZURpY3Rpb25hcnkoZXZlbnROYW1lLCAiV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGlj
cyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewot
ICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVy
IGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgotICAgIEFT
U0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7Ci0gICAgbV9k
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLQotICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOwotfQotI2VuZGlmCi0KLXZvaWQg
V2ViSW5zcGVjdG9yVUk6OnNob3dDb25zb2xlKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0
Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dDb25zb2xlIl9zKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c2hvd1Jlc291cmNlcygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzaG93UmVzb3VyY2VzIl9zKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JVSTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGNvbnN0IFN0cmluZyYgZnJhbWVJZGVudGlm
aWVyKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hv
d01haW5SZXNvdXJjZUZvckZyYW1lIl9zLCBmcmFtZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclVJOjpzdGFydFBhZ2VQcm9maWxpbmcoKQotewotICAgIG1fZnJvbnRlbmRBUElE
aXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkIl9z
LCB0cnVlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RvcFBhZ2VQcm9maWxpbmcoKQot
ewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGltZWxp
bmVQcm9maWxpbmdFbmFibGVkIl9zLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6
OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJfcywgdHJ1ZSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBt
X2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldEVsZW1lbnRTZWxlY3Rp
b25FbmFibGVkIl9zLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmRpZFNhdmUo
Y29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJzYXZlZFVSTCJfcywgdXJsKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLmRpc3BhdGNoQ29tbWFuZCgiYXBwZW5kZWRUb1VSTCJfcywgdXJsKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaE1lc3NhZ2VBc3luYyht
ZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVBhdXNlZCgpCi17Ci0gICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuc3VzcGVuZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpwYWdlVW5wYXVzZWQoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnVuc3Vz
cGVuZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25z
dAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKLX0K
LQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKLX0KLQotU3Ry
aW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Ci19Ci0KLSNpZiAh
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotYm9vbCBX
ZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5n
c1VSTCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2MzlmMjFjOWI2Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHlJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dh
YmxlVHlwZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kSG9zdC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwotY2xhc3MgQ2VydGlmaWNhdGVJ
bmZvOwotY2xhc3MgRmxvYXRSZWN0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yVUkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJJ
bnNwZWN0b3JVST4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQsIHB1YmxpYyBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxX
ZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKLQotICAgIC8vIEltcGxlbWVudGVkIGlu
IGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKLSAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OwotCi0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lkIGRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlIHsgLyogRG8gbm90aGluZywgdGhlIGluc3BlY3RlZCBw
YWdlIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZCBhbmQgbWF5IGJlIGdldHRpbmcgcmVwbGFjZWQu
ICovIH0KLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsg
Y2xvc2VXaW5kb3coKTsgfQotCi0gICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclVJIG1lc3Nh
Z2VzCi0gICAgdm9pZCBlc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYsIGJvb2wg
dW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOwotICAgIHZvaWQgdXBkYXRlQ29u
bmVjdGlvbigpOwotCi0gICAgdm9pZCBzaG93Q29uc29sZSgpOwotICAgIHZvaWQgc2hvd1Jlc291
cmNlcygpOwotCi0gICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5n
JiBmcmFtZUlkZW50aWZpZXIpOwotCi0gICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKLSAg
ICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpOwotICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKLQotICAgIHZvaWQgYXR0
YWNoZWRCb3R0b20oKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpCb3R0b20pOyB9Ci0gICAgdm9p
ZCBhdHRhY2hlZFJpZ2h0KCkgeyBzZXREb2NrU2lkZShEb2NrU2lkZTo6UmlnaHQpOyB9Ci0gICAg
dm9pZCBhdHRhY2hlZExlZnQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpMZWZ0KTsgfQotICAg
IHZvaWQgZGV0YWNoZWQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpVbmRvY2tlZCk7IH0KLQot
ICAgIHZvaWQgc2V0RG9ja1NpZGUoRG9ja1NpZGUpOwotICAgIHZvaWQgc2V0RG9ja2luZ1VuYXZh
aWxhYmxlKGJvb2wpOwotCi0gICAgdm9pZCBzZXRJc1Zpc2libGUoYm9vbCk7Ci0KLSAgICB2b2lk
IGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgZGlkQXBwZW5kKGNvbnN0IFN0
cmluZyYgdXJsKTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmlu
ZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgdm9pZCBzZXREaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWxpYWJsZSk7Ci0jZW5kaWYKLQotICAgIC8v
IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Ci0gICAgdm9pZCB3aW5kb3dPYmplY3RD
bGVhcmVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdmVXaW5k
b3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNSZW1vdGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxl
VHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6RGVi
dWdnYWJsZVR5cGU6OldlYlBhZ2U7IH0KLSAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92
ZXJyaWRlOwotICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faW5zcGVjdGlvbkxldmVsOyB9Ci0KLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgpIG92ZXJy
aWRlOwotICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlb3Blbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgV2ViQ29y
ZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2Nr
U2lkZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2ln
bmVkKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2hhbmdlU2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3Ry
aW5nJiB1cmwpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOwotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBj
b250ZW50KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8mKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVM
RU1FVFJZKQotICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOwot
ICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBt
X2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9Ci0gICAgdm9pZCBsb2dEaWFnbm9zdGljRXZl
bnQoY29uc3QgV1RGOjpTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgV2ViQ29yZTo6RGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBwYWdlUGF1c2VkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWdlVW5wYXVzZWQoKSBv
dmVycmlkZTsKLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBtX3Vu
ZGVyVGVzdDsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclVJKFdlYlBh
Z2UmKTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7Ci0gICAgUmVmUHRyPElQQzo6
Q29ubmVjdGlvbj4gbV9iYWNrZW5kQ29ubmVjdGlvbjsKLQotICAgIC8vIEtlZXAgYSBwb2ludGVy
IHRvIHRoZSBmcm9udGVuZCdzIGluc3BlY3RvciBjb250cm9sbGVyIHJhdGhlciB0aGFuIGdvaW5n
IHRocm91Z2gKLSAgICAvLyBjb3JlUGFnZSgpLCBzaW5jZSB3ZSBtYXkgbmVlZCBpdCBhZnRlciB0
aGUgZnJvbnRlbmQncyBwYWdlIGhhcyBzdGFydGVkIGRlc3RydWN0aW9uLgotICAgIFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXIqIG1fZnJvbnRlbmRDb250cm9sbGVyIHsgbnVsbHB0ciB9Owot
Ci0gICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyOwot
ICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAgIERlYnVnZ2FibGVJbmZvRGF0YSBt
X2RlYnVnZ2FibGVJbmZvOwotICAgIGJvb2wgbV9kb2NraW5nVW5hdmFpbGFibGUgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OwotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
VEVMRU1FVFJZKQotICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNl
IH07Ci0jZW5kaWYKLQotICAgIERvY2tTaWRlIG1fZG9ja1NpZGUgeyBEb2NrU2lkZTo6VW5kb2Nr
ZWQgfTsKLSAgICB1bnNpZ25lZCBtX2luc3BlY3Rpb25MZXZlbCB7IDEgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTRmMTM4NWQ0ODkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsNTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFy
ZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
LSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JVSSB7Ci0gICAgRXN0YWJsaXNoQ29u
bmVjdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIsIHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJbmZvRGF0YSBkZWJ1Z2dhYmxlSW5mbywg
Ym9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKLSAgICBVcGRhdGVDb25u
ZWN0aW9uKCkKLQotICAgIEF0dGFjaGVkQm90dG9tKCkKLSAgICBBdHRhY2hlZFJpZ2h0KCkKLSAg
ICBBdHRhY2hlZExlZnQoKQotICAgIERldGFjaGVkKCkKLSAgICBTZXREb2NraW5nVW5hdmFpbGFi
bGUoYm9vbCB1bmF2YWlsYWJsZSkKLSAgICBTZXRJc1Zpc2libGUoYm9vbCB2aXNpYmxlKQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgU2V0RGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi0jZW5kaWYKLQotICAgIFNob3dDb25zb2xlKCkKLSAg
ICBTaG93UmVzb3VyY2VzKCkKLQotICAgIFNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShTdHJpbmcg
ZnJhbWVJZGVudGlmaWVyKQotCi0gICAgU3RhcnRQYWdlUHJvZmlsaW5nKCkKLSAgICBTdG9wUGFn
ZVByb2ZpbGluZygpCi0KLSAgICBTdGFydEVsZW1lbnRTZWxlY3Rpb24oKQotICAgIFN0b3BFbGVt
ZW50U2VsZWN0aW9uKCkKLQotICAgIERpZFNhdmUoU3RyaW5nIHVybCkKLSAgICBEaWRBcHBlbmQo
U3RyaW5nIHVybCkKLQotICAgIFNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmcgbWVzc2FnZSkK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUluc3BlY3RvclRhcmdldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3
MGY2ZmQ1MjA5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgotCi0j
aW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLVdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotewotfQot
Ci1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRlbnRpZmllcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRvVGFyZ2V0SUQobV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgV2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgaWYgKG1fY2hhbm5lbCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY2hhbm5lbCA9IG1ha2VVbmlxdWU8V2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbD4obV9wYWdlLCBpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25U
eXBlKTsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFn
ZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOwot
fQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmRpc2Nvbm5lY3QoKQotewotICAgIGlm
ICghbV9jaGFubmVsKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgp
KQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nv
bm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKLSAgICBtX2NoYW5uZWwucmVzZXQoKTsKLX0KLQot
dm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQotICAg
ICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVz
c2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQ6OnRvVGFyZ2V0SUQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlEKQotewotICAg
IHJldHVybiBtYWtlU3RyaW5nKCJwYWdlLSIsIHBhZ2VJRC50b1VJbnQ2NCgpKTsKLX0KLQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNmNiZDdmYWQ1ZmYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clRhcmdldC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KLSNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBh
Z2U7Ci1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOwotCi1jbGFz
cyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKLSAgICB+V2ViUGFnZUluc3BlY3Rv
clRhcmdldCgpID0gZGVmYXVsdDsKLQotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRU
eXBlOjpQYWdlOyB9Ci0KLSAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOwotCi0g
ICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQotICAg
IHN0YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7Ci0KLXBy
aXZhdGU6Ci0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBtX2NoYW5uZWw7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwMTdjNGVkYWYuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcihXZWJQYWdlJiBw
YWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX3BhZ2VUYXJnZXQocGFnZSkKLXsKLSAg
ICAvLyBEbyBub3Qgc2VuZCB0aGUgcGFnZSB0YXJnZXQgdG8gdGhlIFVJUHJvY2VzcywgdGhlIFdl
YlBhZ2VQcm94eSB3aWxsIG1hbmFnZXIgdGhpcyBmb3IgdXMuCi0gICAgbV90YXJnZXRzLnNldCht
X3BhZ2VUYXJnZXQuaWRlbnRpZmllcigpLCAmbV9wYWdlVGFyZ2V0KTsKLX0KLQotV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXI6On5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
cigpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmFkZFRh
cmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQotewotICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV90YXJnZXRzLnNldCh0YXJnZXQuaWRlbnRpZmllcigpLCAmdGFyZ2V0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAg
bV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlSW5zcGVjdG9yVGFyZ2V0
KHRhcmdldC5pZGVudGlmaWVyKCksIHRhcmdldC50eXBlKCkpKTsKLX0KLQotdm9pZCBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0YXJnZXQuaWRl
bnRpZmllcigpICE9IG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICJTaG91bGQgbmV2ZXIgcmVt
b3ZlIHRoZSBtYWluIHRhcmdldC4iKTsKLQotICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSkpOwot
Ci0gICAgbV90YXJnZXRzLnJlbW92ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6Y29ubmVjdEluc3BlY3Rvcihjb25zdCBT
dHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5
cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRh
cmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0
LT5jb25uZWN0KGNvbm5lY3Rpb25UeXBlKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlcjo6ZGlzY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElk
KQotewotICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYg
KCF0YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRhcmdldC0+ZGlzY29ubmVjdCgpOwot
fQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRv
VGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBp
ZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5zZW5kTWVzc2FnZVRv
VGFyZ2V0QmFja2VuZChtZXNzYWdlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggN2M5MzFkYWQxYzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci1jbGFzcyBJbnNwZWN0b3JUYXJnZXQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBXZWJQYWdlOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIoV2ViUGFnZSYpOwotICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlcigpOwotCi0gICAgdm9pZCBhZGRUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXQmKTsKLSAgICB2b2lkIHJlbW92ZVRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dCYpOwotCi0gICAgdm9pZCBjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7Ci0gICAgdm9pZCBk
aXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOwotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgV2Vi
UGFnZUluc3BlY3RvclRhcmdldCBtX3BhZ2VUYXJnZXQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Kj4gbV90YXJnZXRzOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI1ZjcxMzczMy4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElk
LCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5
cGUpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fdGFyZ2V0SWQodGFyZ2V0SWQpCi0gICAg
LCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKQotewotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3NhZ2Up
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxODRh
YzViZGEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk7Ci1wdWJsaWM6Ci0g
ICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwgY29uc3Qg
U3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25U
eXBlKTsKLSAgICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
KCkgPSBkZWZhdWx0OwotCi1wcml2YXRlOgotICAgIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25U
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb25uZWN0aW9uVHlwZTsgfQotICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7
Ci0KLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgU3RyaW5nIG1fdGFyZ2V0SWQ7Ci0gICAgSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGUg
eyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OlJlbW90ZSB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMmI0Zjk3ZmU4ZDAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCi0j
aW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNp
bmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JVSTo6bG9jYWxp
emVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8v
b3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzIik7Ci19Ci0KLVN0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3Ry
aW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dl
YmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTU1ZjNkNThhMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JVSS5oIgotI2ltcG9ydCAiUmVtb3RlV2Vi
SW5zcGVjdG9yVUkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWJvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQotewotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgU3RyaW5nIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpCi17
Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpA
ImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVuZGxlKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJl
c291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMiXTsKLSAgICBpZiAoIXBhdGgp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICByZXR1cm4gW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQotU3Ry
aW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci19Ci0KLVN0cmluZyBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388637</attachid>
            <date>2020-01-23 18:43:17 -0800</date>
            <delta_ts>2020-01-23 18:54:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>749214</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLjFmOGY0ODFhNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg0IEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJn
ZXRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRh
cmdldFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAuCisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0
b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5o
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmguCisgICAgICAgICogVUlQcm9jZXNz
L0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbTogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1t
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JX
S1dlYlZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmguCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdp
bi5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJv
eHlXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYklu
c3BlY3RvclByb3h5V2luLmNwcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4uCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3Bl
Y3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW46
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3Bl
Y3RvclVJR3RrLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5z
cGVjdG9yVUlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0FQSUF0dGFjaG1lbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1Rlc3RpbmcubW06CisgICAgICAgIEFkZCBzb21lIG1pc3NpbmcgaW5jbHVkZXMuCisKIDIwMjAt
MDEtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gUmVtb3ZlIHRoZSBJT0hJREV2ZW50U2VydmljZUZhc3RQYXRoVXNlckNsaWVudCBJT0tpdCBj
bGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAuLmU1ODdmN2QwOWM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2FkcyIKICAgICAiJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvR2FtZXBhZCIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvR1BVIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3IiCiAgICAgIiR7
V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9OZXR3b3JrIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scyIKQEAgLTE0OCwxMiArMTQ5LDEwIEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5f
RklMRVMKICAgICBTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdl
cy5pbgogCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSAgICBV
SVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nl
c3MvVmlzaXRlZExpbmtTdG9yZS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJDb29raWVN
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgotICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdl
cy5pbgogICAgIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nl
c3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLm1lc3NhZ2VzLmluCkBAIC0xNjMsNiArMTYyLDkgQEAgc2V0KFdlYktpdF9NRVNTQUdF
U19JTl9GSUxFUwogCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3Nh
Z2VzLmluCiAKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
Lm1lc3NhZ2VzLmluCisgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5t
ZXNzYWdlcy5pbgorCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5t
ZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1l
c3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3QKaW5kZXggOTgwODFhYTZiMmMuLjZkY2JiMjM3NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC03OSwxMSArNzksMTIgQEAgJChQUk9K
RUNUX0RJUikvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0dQVS9HUFVQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJv
Y2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2Fn
ZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nl
c3MvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVBy
b2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5tZXNzYWdlcy5pbgpAQCAtOTEsNyArOTIsNiBAQCAkKFBS
T0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yUHJveHkubWVzcwogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9X
ZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3Mv
V2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KQEAgLTExMiw2ICsxMTIsMTAgQEAgJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVj
cy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2Vz
LmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVz
c2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
Lm1lc3NhZ2VzLmluCkBAIC0xMzMsMTMgKzEzNyw5IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rv
ci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRh
dGVEaXNwYXRjaGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBh
Z2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1l
c3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1h
cC5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGMzNGFmNWNkM2Ex
Li44MTBlMGUxODMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNTQsNiArNTQs
NyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKICAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL0ljb25EYXRhYmFzZSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0luc3BlY3Rv
ciBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhQ2FjaGUgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL05l
dHdvcmsgXApAQCAtNzksNiArODAsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9EYXRhYmFzZXMgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0Rvd25sb2FkcyBcCiAg
ICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvR1BVIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9J
bnNwZWN0b3IgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL01lZGlhU3RyZWFtIFwKICAgICAk
KFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAzZGEyODAwYzljNS4uZDdi
ZDE3YWZiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjY3LDEzICsyNjcsMTEgQEAgVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuY3BwCiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCiBVSVByb2Nl
c3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vz
cy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwCi1VSVByb2Nlc3MvSW5zcGVj
dG9yVGFyZ2V0UHJveHkuY3BwCiBVSVByb2Nlc3MvTGVnYWN5R2xvYmFsU2V0dGluZ3MuY3BwCiBV
SVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzQXNzZXJ0aW9uLmNw
cAogVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuY3BwCiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQ
YWdlUHJveHkuY3BwCi1VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCiBVSVBy
b2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAKIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVz
dC5jcHAKIFVJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwCkBAIC0zMDYsMTUgKzMwNCwx
MSBAQCBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNw
cAogVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwCi1VSVByb2Nlc3MvV2ViSW5z
cGVjdG9yUHJveHkuY3BwCi1VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogVUlQ
cm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5jcHAKIFVJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lclByb3h5LmNwcAotVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcAogVUlQ
cm9jZXNzL1dlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNwcAot
VUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCiBVSVByb2Nlc3Mv
V2ViUHJlZmVyZW5jZXMuY3BwCkBAIC00MjYsNiArNDIwLDEzIEBAIFVJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCiAKIFVJUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5
LmNwcAogCitVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKK1VJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvclV0aWxpdGllcy5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2Fi
bGUuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorCiBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlv
bi5jcHAKIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94
eS5jcHAKQEAgLTUxNyw2ICs1MTgsMTYgQEAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmNwcAogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBAbm8tdW5pZnkK
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUu
Y3BwIEBuby11bmlmeQogCitXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKK1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVSS5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuY3BwCisKIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZp
Y2VTYW5kYm94RXh0ZW5zaW9ucy5jcHAKIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAogCkBAIC01OTMsNyArNjA0LDYgQEAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9s
b2NhdGlvbkNsaWVudC5jcHAKLVdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJNZXNzYWdlUG9ydENoYW5u
ZWxQcm92aWRlci5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9u
Q2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQZXJmb3JtYW5jZUxvZ2dp
bmdDbGllbnQuY3BwCkBAIC02MTAsMjMgKzYyMCwxNSBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1Bh
Z2VCYW5uZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3Bw
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29va2llSmFy
LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkRvY3VtZW50TG9hZGVyLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5j
cHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNw
cAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5j
cHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94
eS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAotV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAotV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3Bw
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVS
TFNjaGVtZVRhc2tQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA2YThlMmU2OTA1
Yy4uYzQxNzQ0YTMyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTIyOSw3ICsyMjksNiBA
QCBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL1dl
Yk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJNZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCiBVSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxl
ci5tbQotVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQogCiBVSVByb2Nlc3Mv
QVBJL0FQSVdlYnNpdGVEYXRhUmVjb3JkLmNwcAogCkBAIC00MDIsNiArNDAxLDE0IEBAIFVJUHJv
Y2Vzcy9HYW1lcGFkL2NvY29hL1VJR2FtZXBhZFByb3ZpZGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9H
YW1lcGFkL2lvcy9VSUdhbWVwYWRQcm92aWRlcklPUy5tbQogVUlQcm9jZXNzL0dhbWVwYWQvbWFj
L1VJR2FtZXBhZFByb3ZpZGVyTWFjLm1tCiAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQorVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0
b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0KKworVUlQcm9jZXNzL0luc3BlY3Rvci9t
YWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dlYkluc3BlY3RvclByb3h5TWFjLm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyLm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5tbQorCiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLQWlyUGxheVJvdXRlUGlja2Vy
Lm1tCiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRGF0ZVBpY2tlclZpZXdDb250cm9sbGVyLm1tCiBV
SVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tCkBAIC00NTEsNyArNDU4LDYg
QEAgVUlQcm9jZXNzL2lvcy9XS0RyYXdpbmdWaWV3Lm1tCiBVSVByb2Nlc3MvaW9zL1dLR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5tbQogVUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJ
T1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0KIFVJUHJvY2Vzcy9pb3MvV0tIaWdobGlnaHRMb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplci5tbQotVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFy
Y2hHZXN0dXJlUmVjb2duaXplci5tbQogVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IubW0KIFVJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLm1tCiBV
SVByb2Nlc3MvaW9zL1dLUGFzc3dvcmRWaWV3Lm1tCkBAIC00NzEsNyArNDc3LDYgQEAgVUlQcm9j
ZXNzL21hYy9EaXNwbGF5TGluay5jcHAKIFVJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BV
TWFuYWdlci5jcHAKIFVJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAog
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQotVUlQcm9jZXNzL21hYy9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmNw
cAogVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvVGV4
dENoZWNrZXJNYWMubW0KQEAgLTQ4MiwxNSArNDg3LDEyIEBAIFVJUHJvY2Vzcy9tYWMvV2ViQ29s
b3JQaWNrZXJNYWMubW0KIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQog
VUlQcm9jZXNzL21hYy9XZWJDb29raWVNYW5hZ2VyUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9tYWMv
V2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCi1VSVByb2Nlc3MvbWFjL1dlYklu
c3BlY3RvclByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQogVUlQ
cm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJQcm9j
ZXNzUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbQog
VUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCiBVSVByb2Nlc3Mv
bWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQotVUlQcm9jZXNzL21hYy9XS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyLm1tCi1VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3
Lm1tCiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCiBVSVByb2Nlc3MvbWFjL1dLU2hh
cmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJD
bGllbnQubW0KQEAgLTU3Nyw2ICs1NzksOCBAQCBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCiAKIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCiAKK1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQorCiBXZWJQcm9jZXNzL01l
ZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbQpAQCAtNjE4LDcgKzYyMiw2IEBA
IFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9EcmF3aW5nQXJlYU1hYy5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGFnZUJhbm5l
ck1hYy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYS5tbQotV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQogV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0Cmlu
ZGV4IDFlZjczYmMyMTRjLi44NWFiMGEzZTJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
b3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yMTUs
NiArMjE1LDEyIEBAIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJv
eHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAogCiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2Vv
bG9jYXRpb25Qcm92aWRlci5jcHAKIAorVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAKKworVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlHdGsuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRv
dy5jcHAKKwogVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAg
QG5vLXVuaWZ5CiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3Bw
IEBuby11bmlmeQogCkBAIC0yMzAsNyArMjM2LDYgQEAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3Vu
aXgvV2Vic2l0ZURhdGFTdG9yZVVuaXguY3BwCiAKIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAgQG5vLXVuaWZ5CiAKLVVJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAKIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQb29sR0xpYi5jcHAKIFVJUHJvY2Vz
cy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIuY3BwCiBVSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0
YVN0b3JlR0xpYi5jcHAgQG5vLXVuaWZ5CkBAIC0yNDgsNyArMjUzLDYgQEAgVUlQcm9jZXNzL2d0
ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5h
Z2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFu
ZC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAg
QG5vLXVuaWZ5Ci1VSVByb2Nlc3MvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcAog
VUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3Rr
L1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1Zp
ZXdTbmFwc2hvdFN0b3JlR3RrLmNwcApAQCAtMjU2LDggKzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsv
V2F5bGFuZENvbXBvc2l0b3IuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJDb2xvclBp
Y2tlckd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKIFVJ
UHJvY2Vzcy9ndGsvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duR3RrLmNwcAotVUlQcm9j
ZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKLVVJUHJvY2Vzcy9ndGsvV2ViS2l0SW5z
cGVjdG9yV2luZG93LmNwcAogVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwCiBVSVByb2Nlc3Mv
Z3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNwcApAQCAtMzkyLDYgKzM5NCw4IEBAIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuY3BwCiAK
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvZ2xpYi9JbmplY3RlZEJ1bmRsZUdsaWIuY3BwCiAK
K1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKKwogV2ViUHJv
Y2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKIFdlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS91bml4L05ldHNjYXBlUGx1Z2luVW5peC5jcHAgQG5vLXVuaWZ5
CkBAIC00MjMsNyArNDI3LDYgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdl
R1N0cmVhbWVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VX
YXlsYW5kLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VYMTEu
Y3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAK
LVdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQVBJQXR0YWNobWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0
dGFjaG1lbnQuaAppbmRleCA0M2E0N2RkN2QwYS4uMmUwNjQ5YThkZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBPQkpDX0NMQVNTIE5TRmlsZVdyYXBwZXI7
CitPQkpDX0NMQVNTIE5TU3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaGFy
ZWRCdWZmZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3VGVzdGluZy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdUZXN0aW5nLm1tCmluZGV4IGZjNGQ4NTZmMDJlLi5lZDU5ODgxYzViOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3Rpbmcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3Rp
bmcubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIldlYlZpZXdJbXBsLmgiCiAjaW1wb3J0
ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5h
bC5oIgorI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBv
cnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OTI4Y2EyZmJmYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JU
YXJnZXRQcm94eS5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGFyZ2V0UHJveHkuaCIKKworI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFBy
b3h5PihwYWdlLCB0YXJnZXRJZCwgdHlwZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0
b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBh
Z2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IEluc3Bl
Y3RvclRhcmdldFByb3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQs
IHR5cGUpOworICAgIHRhcmdldC0+bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92
aXNpb25hbFBhZ2UpOworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKK0luc3BlY3RvclRhcmdldFBy
b3h5OjpJbnNwZWN0b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorICAgIDog
bV9wYWdlKHBhZ2UpCisgICAgLCBtX2lkZW50aWZpZXIodGFyZ2V0SWQpCisgICAgLCBtX3R5cGUo
dHlwZSkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCit7Cisg
ICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29u
bmVjdGlvblR5cGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2Uu
aGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworfQor
Cit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoaXNQ
YXVzZWQoKSkKKyAgICAgICAgcmVzdW1lKCk7CisKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2Up
IHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRp
c2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIG1fcGFnZS5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkp
OworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFj
a2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdl
KSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkK
KyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJn
ZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSkpOworfQorCit2b2lkIEluc3BlY3RvclRh
cmdldFByb3h5OjpkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpCit7CisgICAgbV9wcm92aXNp
b25hbFBhZ2UgPSBudWxscHRyOworfQorCitib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1By
b3Zpc2lvbmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMjIzOWNlYzhlMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRh
cmdldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQcm92aXNpb25hbFBhZ2VQcm94
eTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworLy8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJ
bnNwZWN0b3JUYXJnZXQgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBz
aW5jZQorLy8gYW55IHRhcmdldCAtPiBmcm9udGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0
byB0aGUgV2ViUGFnZVByb3h5IHdpdGggYSB0YXJnZXRJZC4KKworY2xhc3MgSW5zcGVjdG9yVGFy
Z2V0UHJveHkgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvclRhcmdldFByb3h5KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElu
c3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoUHJvdmlzaW9uYWxQYWdl
UHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dFR5cGUpOworICAgIEluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgfklu
c3BlY3RvclRhcmdldFByb3h5KCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBT
dHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQor
CisgICAgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAgIGJvb2wgaXNQcm92
aXNpb25hbCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNj
b25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlUHJveHkmIG1f
cGFnZTsKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSBtX3R5cGU7CisgICAgV2Vha1B0cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9w
cm92aXNpb25hbFBhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTky
YzI5ZjQxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCIKKworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiQVBJ
TmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
V2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5KCkKKyAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1
Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCit7Cit9CisK
K1JlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQorewor
ICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6aW52YWxpZGF0ZSgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dp
bmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxF
TUVUUlkpCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJs
ZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oYXZhaWxhYmxlKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
Ojpsb2FkKFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25zdCBT
dHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCkKK3sKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKKworICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZv
KTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6Oklu
aXRpYWxpemUobV9kZWJ1Z2dhYmxlSW5mby0+ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tlbmRD
b21tYW5kc1VSTCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgp
LCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQoreworICAgIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OmNsb3NlRnJvbUNyYXNoKCkKK3sKKyAgICAvLyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1
c3QgY2xvc2VkLCBzbyBjbGllbnRzIGFyZSBpbmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4K
KyAgICBmcm9udGVuZERpZENsb3NlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnNob3coKQoreworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQoreworICAgIFJlZjxSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5jbG9zZUZyb21Gcm9udGVuZCgpOworCisgICAgY2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVv
cGVuKCkKK3sKKyAgICBBU1NFUlQoIW1fYmFja2VuZENvbW1hbmRzVVJMLmlzRW1wdHkoKSk7CisK
KyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIGxvYWQobV9kZWJ1Z2dhYmxl
SW5mby5jb3B5UmVmKCksIG1fYmFja2VuZENvbW1hbmRzVVJMKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCit7CisgICAgcGxhdGZvcm1SZXNldFN0YXRl
KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCit7
CisgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAg
IHBsYXRmb3JtU2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNl
U2F2ZURpYWxvZyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAg
IHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRv
d0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkluTmV3VGFi
KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIHBsYXRmb3JtT3BlbkluTmV3VGFiKHVybCk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBD
ZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0
aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVz
c2FnZSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKKworICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51
bGxwdHIpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7CisgICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQ
YWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQorewor
ICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOworCisgICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQ
YWdlKTsKKworICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisKKyAgICBwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKKyNpZiAhRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0o
V0lOKSkKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVJlc2V0U3RhdGUoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29u
c3QgQ2VydGlmaWNhdGVJbmZvJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkgeyB9CisjZW5kaWYgLy8gIUVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykg
JiYgIVBMQVRGT1JNKFdJTikpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmFiNThmOGNl
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZP
Uk0oTUFDKQorT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NM
QVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNw
YWNlIEFQSSB7CitjbGFzcyBEZWJ1Z2dhYmxlSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZXc7CisKK2NsYXNzIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VGcm9tRnJvbnRlbmQoKSA9IDA7Cit9OworCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYklu
c3BlY3RvclByb3h5PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKSk7CisgICAgfQorCisgICAgflJlbW90ZVdlYklu
c3BlY3RvclByb3h5KCk7CisKKyAgICB2b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBib29sIGlz
VW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0RGlhZ25v
c3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKwor
ICAgIHZvaWQgbG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBi
YWNrZW5kQ29tbWFuZHNVUkwpOworICAgIHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOworICAgIHZv
aWQgc2hvdygpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1dpbmRvdyAqd2luZG93KCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3cuZ2V0KCk7IH0KKyAgICBXS1dlYlZpZXcgKndlYlZpZXco
KSBjb25zdDsKKworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYpOworI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJF
U1VMVCBvbkNsb3NlKCk7CisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhX
TkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKyNlbmRpZgorCisgICAgdm9pZCBjbG9zZUZyb21D
cmFzaCgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcy4KKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsK
KyAgICB2b2lkIHJlb3BlbigpOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgYnJp
bmdUb0Zyb250KCk7CisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsK
KyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpOworICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OworICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29u
c3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKTsKKworICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgLy8gUGxh
dGZvcm0gaW1wbGVtZW50YXRpb25zLgorICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQg
cGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Ym9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpOworICAgIHZvaWQgcGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3Ry
aW5nJiB1cmwpOworICAgIHZvaWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvJik7CisKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dCogbV9jbGllbnQgeyBudWxscHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBh
Z2UgeyBudWxscHRyIH07CisKKyAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dh
YmxlSW5mbzsKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVj
dG9yVmlldzsKKyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0
cjxXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxV
UkxNYXA7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworI2VuZGlmCisjaWYg
UExBVEZPUk0oR1RLKQorICAgIEd0a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworICAg
IEd0a1dpZGdldCogbV93aW5kb3cgeyBudWxscHRyIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShX
SU5fQ0FJUk8pCisgICAgSFdORCBtX2Zyb250ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3
PiBtX3dlYlZpZXc7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5iZTA5MWI3OGZiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdl
cy5pbgpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK21lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclByb3h5IHsKKyAgICBGcm9udGVu
ZERpZENsb3NlKCkKKyAgICBSZW9wZW4oKQorICAgIFJlc2V0U3RhdGUoKQorICAgIEJyaW5nVG9G
cm9udCgpCisKKyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVu
YW1lLCBTdHJpbmcgY29udGVudCkKKworICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKKworICAgIFN0YXJ0V2luZG93RHJhZygpCisKKyAgICBPcGVuSW5OZXdUYWIoU3Ry
aW5nIHVybCkKKyAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNl
cnRpZmljYXRlSW5mbykKKworICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdl
KQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjIzZDcwNWU4M2U3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcApAQCAtMCwwICsxLDc4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgi
CisjaW5jbHVkZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQVBJ
VUlDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIgorI2luY2x1ZGUg
IldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUlu
Zm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dEVuY29kaW5nLmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CisKKyNpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCB1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOworY29u
c3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7
CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgg
PSAxMDAwOworY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dI
ZWlnaHQgPSA2NTA7CisKK1dlYkluc3BlY3RvclByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQ
YWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCisjaWYgUExBVEZPUk0oTUFDKQorICAgIDogbV9jbG9z
ZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQor
I2VuZGlmCit7CisgICAgaWYgKGluc3BlY3RlZFBhZ2UgJiYgaW5zcGVjdGVkUGFnZS0+aGFzUnVu
bmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdl
OworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5z
cGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rv
clByb3h5Ojp+V2ViSW5zcGVjdG9yUHJveHkoKQoreworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdGlvbkxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9y
TGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSk7Cit9CisKK1dlYlByZWZlcmVuY2VzJiBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdl
R3JvdXAoKS5wcmVmZXJlbmNlcygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnZh
bGlkYXRlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFn
ZUlEKCkpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICBwbGF0Zm9y
bUludmFsaWRhdGUoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
bmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Cit9CisKKy8vIFB1YmxpYyBBUElzCitib29s
IFdlYkluc3BlY3RvclByb3h5Ojppc0Zyb250KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvd01lc3NhZ2VT
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7Cisg
ICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7CisKKyAgICBjcmVhdGVGcm9udGVu
ZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7Cisg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQoreworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNDb25uZWN0ZWQoKSkgewor
ICAgICAgICBicmluZ1RvRnJvbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
bm5lY3QoKTsKKworICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNv
IGl0IG9wZW5zIHRoZSBJbnNwZWN0b3IuCisgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9
IGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpoaWRlKCkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1Zpc2libGUgPSBm
YWxzZTsKKworICAgIHBsYXRmb3JtSGlkZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpjbG9zZSgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9z
ZSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRm9yQ3Jhc2goKQoreworICAgIGNsb3NlKCk7CisKKyAgICBw
bGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cmVvcGVuKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2xvc2UoKTsKKyAgICBzaG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnJlc2V0U3RhdGUoKQoreworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCku
ZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCk7CisgICAgaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICBpbnNw
ZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworCisg
ICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJl
c2V0KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKSB7CisgICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdl
SUQoKSk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJv
eHkqIGluc3BlY3RlZFBhZ2UpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOworICAg
IEFTU0VSVChpbnNwZWN0ZWRQYWdlKTsKKworICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3Rl
ZFBhZ2U7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lu
c3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JQ
YWdlKQorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpz
ZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVy
KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRD
b25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNob3dDb25zb2xlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2Uo
KTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
aG93UmVzb3VyY2VzKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJl
c291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUpCit7CisgICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwor
CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmF0dGFjaEJvdHRvbSgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRl
OjpCb3R0b20pOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCit7
CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpSaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmF0dGFjaExlZnQoKQoreworICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVm
dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBz
aWRlKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFjYW5BdHRhY2goKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pc0F0dGFjaGVkID0gdHJ1ZTsKKyAgICBtX2F0dGFjaG1lbnRT
aWRlID0gc2lkZTsKKworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3Rv
ckF0dGFjaG1lbnRTaWRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihzaWRlKSk7CisKKyAgICBpZiAo
bV9pc1Zpc2libGUpCisgICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKHRydWUpKTsKKworICAgIHN3aXRjaCAo
bV9hdHRhY2htZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAg
ICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0
YWNoZWRCb3R0b20oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50U2lk
ZTo6UmlnaHQ6CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBwbGF0Zm9ybUF0dGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpkZXRhY2goKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2lzQXR0YWNoZWQgPSBmYWxzZTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAg
ICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWQoZmFsc2UpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CisKKyAgICBwbGF0Zm9ybURldGFj
aCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0
SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgaW5zcGVjdG9yUGFnZVBy
ZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7CisgICAgcGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9y
bVNldFNoZWV0UmVjdChyZWN0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRX
aW5kb3dEcmFnKCkKK3sKKyAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNQcm9maWxpbmdQ
YWdlKQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6U3RvcFBhZ2VQcm9maWxpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKK3sK
KyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
ZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSkgeworICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2UgPSB0cnVlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29ubmVjdCgpOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOworICAgIH0KK30KKworYm9v
bCBXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwm
IHVybCkKK3sKKyAgICAvLyBVc2UgVVJMIHNvIHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQg
cHJvdG9jb2xzLgorICAgIFVSTCBtYWluUGFnZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclBhZ2VVUkwoKSk7CisgICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdl
VVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJv
ZHVjdGlvbiBidWlsZHMuCisgICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCk7CisgICAgaWYgKHRlc3RQYWdlVVJMU3Ry
aW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBVUkwgdGVzdFBhZ2VV
UkwoVVJMKCksIHRlc3RQYWdlVVJMU3RyaW5nKTsKKyAgICByZXR1cm4gdXJsLnByb3RvY29sKCkg
PT0gdGVzdFBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJs
LnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCit7Cisg
ICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0
b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICBBU1NFUlQobV9pbnNw
ZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdl
KTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNw
ZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCksICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnBy
b2Nlc3MoKS5hc3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1
bmRlclRlc3QpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2Nh
bEZyb250ZW5kKCkpIHsKKyAgICAgICAgc2hvdygpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV91bmRlclRlc3QgPSB1bmRlclRlc3Q7CisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7
CisKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlk
ZW50aWZpZXIoKSwgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVj
dGlvbkxldmVsKCkpKTsKKworICAgIEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKKyAgICBt
X2lzQWN0aXZlRnJvbnRlbmQgPSB0cnVlOworICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqdGhpcyk7CisKKyAgICBpZiAoIW1fdW5kZXJU
ZXN0KSB7CisgICAgICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNo
KTsKKyAgICAgICAgbV9pc0F0dGFjaGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7CisgICAgICAg
IG1fYXR0YWNobWVudFNpZGUgPSBzdGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9y
UGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKSk7CisKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVk
KG1faXNBdHRhY2hlZCkpOworCisgICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgICAgICAgICAgY2FzZSBBdHRhY2ht
ZW50U2lkZTo6Qm90dG9tOgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAg
ICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpBdHRhY2hlZFJpZ2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICAgICAgICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpEZXRhY2hlZCgpKTsKKworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Cisg
ICAgfQorCisgICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3Rv
ciBhdHRhY2hlcyBzbyB0aGF0IGl0IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUg
X1dLSW5zcGVjdG9yIGxvYWRpbmcgaXRzIGZyb250ZW5kLgorICAgIG1faW5zcGVjdGVkUGFnZS0+
dWlDbGllbnQoKS5kaWRBdHRhY2hJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOwor
CisgICAgLy8gQmFpbCBvdXQgaWYgdGhlIGNsaWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBmcm9t
IHRoZSBkZWxlZ2F0ZSBtZXRob2QuCisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBt
X3VuZGVyVGVzdCA/IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDog
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpvcGVuKCkKK3sKKyAgICBpZiAobV91bmRlclRlc3QpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTZXRGb3JTY29wZTxib29sPiBpc09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOworICAgIG1f
aXNWaXNpYmxlID0gdHJ1ZTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKKworICAgIGlmIChtX2lz
QXR0YWNoZWQpCisgICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7CisgICAgZWxzZQorICAgICAgICBw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCk7CisKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpkaWRDbG9zZSgpCit7CisgICAgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICghbV9pbnNwZWN0b3JQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworICAgIG1faXNQ
cm9maWxpbmdQYWdlID0gZmFsc2U7CisgICAgbV9zaG93TWVzc2FnZVNlbnQgPSBmYWxzZTsKKyAg
ICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7CisKKyAgICB1bnRyYWNrSW5zcGVj
dG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7CisgICAg
bV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBh
Z2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICBpZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7CisgICAg
ICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IGZhbHNlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKnRoaXMpOworICAgIH0K
KworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7CisKKyAg
ICAvLyBOdWxsIG91dCBtX2luc3BlY3RvclBhZ2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28g
dGhlIHZpZXdzIGNhbiBiZSBjbGVhbmVkIHVwIGNvcnJlY3RseS4KKyAgICBtX2luc3BlY3RvclBh
Z2UgPSBudWxscHRyOworCisgICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9jYW5BdHRh
Y2ggPSBmYWxzZTsKKyAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOworCisgICAgcGxhdGZvcm1DbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpz
ZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdl
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byog
YXV0b21hdGlvblNlc3Npb24gPSBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9v
bCgpLmF1dG9tYXRpb25TZXNzaW9uKCkpCisgICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5pbnNw
ZWN0b3JGcm9udGVuZExvYWRlZCgqbV9pbnNwZWN0ZWRQYWdlKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsIHRlbGxzIHVzIHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0
bworICAgIC8vIGlnbm9yZSBpdCBvbmNlIGlmIHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRo
aXMgYWxsb3dzIHRoZSBJbnNwZWN0b3IgdG8gbGF0ZXIKKyAgICAvLyByZXF1ZXN0IHRvIGJlIGJy
b3VnaHQgdG8gdGhlIGZyb250IHdoZW4gYSBicmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVy
IGFjdGlvbi4KKyAgICBpZiAobV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCkgeworICAgICAgICBt
X2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7
CisgICAgZWxzZQorICAgICAgICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFp
bGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIGJvb2wgcHJldmlvdXNDYW5B
dHRhY2ggPSBtX2NhbkF0dGFjaDsKKworICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRh
Y2goYXZhaWxhYmxlKTsKKworICAgIGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFj
aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRl
clRlc3QpCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKworICAgIHBsYXRm
b3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
ZXJ0aWZpY2F0ZUluZm8pOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2Vs
ZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3Rp
dmUgPSBhY3RpdmU7CisKKyAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7
CisgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOworICAgICAg
ICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhY3RpdmUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpOworICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCisgICAgICAgIGJy
aW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3Rp
dmU7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRl
KGVuYWJsZWQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUo
Ym9vbCBhdmFpbGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAg
bV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKKyNl
bmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKQoreworICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0
RW5jb2RlZCwgZm9yY2VTYXZlQXMpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBl
bmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAg
IHBsYXRmb3JtQXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KTsKK30KKworYm9vbCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVkKCkKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsK
K30KKworLy8gVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJv
dmlkZWQgaGVyZS4KKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShXSU4pCisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZy
b250ZW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bURpZENsb3NlRm9yQ3Jhc2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmlj
YXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWln
aHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2ln
bmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxv
YXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5n
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShXSU4pCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmIxZmRmY2ExZGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJv
eHkuaApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5j
bHVkZSAiQXR0YWNobWVudC5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGll
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xB
U1MgTlNVUkw7CitPQkpDX0NMQVNTIE5TVmlldzsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpD
X0NMQVNTIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlcjsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXZWJW
aWV3LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJ
bmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWVQcm94eTsKK2Ns
YXNzIFdlYkluc3BlY3RvclByb3h5Q2xpZW50OworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3Mg
V2ViUHJlZmVyZW5jZXM7CisKK2VudW0gY2xhc3MgQXR0YWNobWVudFNpZGUgeworICAgIEJvdHRv
bSwKKyAgICBSaWdodCwKKyAgICBMZWZ0LAorfTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkK
KyAgICA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rv
cj4KKyAgICAsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHVibGljIEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsCisjaWYgUExBVEZPUk0oV0lOKQorICAgICwgcHVibGljIFdl
YkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxXZWJJbnNwZWN0b3JQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVk
UGFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclBy
b3h5KGluc3BlY3RlZFBhZ2UpKTsKKyAgICB9CisKKyAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsK
KworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgLy8gUHVibGljIEFQSXMKKyAgICBXZWJQ
YWdlUHJveHkqIGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7
IH0KKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lu
c3BlY3RvclBhZ2U7IH0KKworICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAh
IW1faW5zcGVjdG9yUGFnZTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4g
bV9pc1Zpc2libGU7IH0KKyAgICBib29sIGlzRnJvbnQoKTsKKworICAgIHZvaWQgY29ubmVjdCgp
OworCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBjbG9zZSgp
OworICAgIHZvaWQgY2xvc2VGb3JDcmFzaCgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9p
ZCByZXNldFN0YXRlKCk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCB1cGRhdGVGb3JO
ZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkqKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBl
bnVtIGNsYXNzIEluc3BlY3Rpb25UYXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OworICAgIHN0
YXRpYyBSZXRhaW5QdHI8TlNXaW5kb3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZl
ZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSk7CisKKyAgICB2b2lkIHVwZGF0ZUlu
c3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7CisgICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVE
aWRDaGFuZ2UoQ0dGbG9hdCA9IDApOworICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsK
KyAgICB2b2lkIHdpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKKyAgICBOU1dpbmRvdyogaW5z
cGVjdG9yV2luZG93KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0K
KworICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRB
ZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCk7CisKKyAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlk
Q2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KTsKKyAgICB2b2lkIGF0dGFj
aG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdyk7CisgICAgdm9pZCBh
dHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpOworCisgICAgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0
UmVjdDsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBpbnNw
ZWN0b3JWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JWaWV3OyB9OworICAgIHZvaWQg
c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7Cisj
ZW5kaWYKKworICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMo
KTsKKyAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CisK
KyAgICBBdHRhY2htZW50U2lkZSBhdHRhY2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
YWNobWVudFNpZGU7IH0KKyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
QXR0YWNoZWQ7IH0KKyAgICB2b2lkIGF0dGFjaFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hMZWZ0
KCk7CisgICAgdm9pZCBhdHRhY2hCb3R0b20oKTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50
U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisKKyAg
ICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpOworCisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwor
CisgICAgYm9vbCBpc1Byb2ZpbGluZ1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5n
UGFnZTsgfQorICAgIHZvaWQgdG9nZ2xlUGFnZVByb2ZpbGluZygpOworCisgICAgYm9vbCBpc0Vs
ZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25B
Y3RpdmU7IH0KKyAgICB2b2lkIHRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJvb2wg
aXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9pZCBz
ZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKKworICAgIC8vIFByb3ZpZGVkIGJ5
IHBsYXRmb3JtIFdlYkluc3BlY3RvclByb3h5IGltcGxlbWVudGF0aW9ucy4KKyAgICBzdGF0aWMg
U3RyaW5nIGluc3BlY3RvclBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRl
c3RQYWdlVVJMKCk7CisgICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JCYXNlVVJMKCk7CisgICAg
c3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmKTsKKyAgICBz
dGF0aWMgRGVidWdnYWJsZUluZm9EYXRhIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKKworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dIZWlnaHQ7CisKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW5pdGlhbFdpbmRvd1dpZHRoOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0
aWFsV2luZG93SGVpZ2h0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclBy
b3h5KFdlYlBhZ2VQcm94eSopOworCisgICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAg
ICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICAvLyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbAorICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkgb3ZlcnJpZGU7CisgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBDb25uZWN0aW9uVHlwZTo6TG9jYWw7IH0KKworICAgIFdlYlBhZ2VQ
cm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtQ3Jl
YXRlRnJvbnRlbmRXaW5kb3coKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKTsKKworICAgIHZvaWQgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7CisgICAg
dm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgp
OworICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJp
bmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1IaWRlKCk7CisgICAg
Ym9vbCBwbGF0Zm9ybUlzRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmls
aXR5Q2hhbmdlZChib29sKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVk
V2luZG93SGVpZ2h0KCk7CisgICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0
aCgpOworICAgIHZvaWQgcGxhdGZvcm1BdHRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGV0YWNo
KCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsK
KyAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisgICAg
dm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAg
ICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2
NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBib29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0
dGFjaCk7CisjZWxzZQorICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNz
Q2FuQXR0YWNoKSB7IHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOyB9CisjZW5kaWYKKworICAg
IC8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcworICAgIHZvaWQgb3Blbkxv
Y2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKKyAg
ICB2b2lkIHNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQpOworCisgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGZyb250ZW5k
TG9hZGVkKCk7CisgICAgdm9pZCBkaWRDbG9zZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7
CisgICAgdm9pZCBicmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAgdm9pZCBhdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mKTsKKyAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wp
OworICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgc2V0
TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKKworICAg
IHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworICAgIGJv
b2wgY2FuQXR0YWNoKCkgY29uc3QgeyByZXR1cm4gbV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNo
b3VsZE9wZW5BdHRhY2hlZCgpOworCisgICAgdm9pZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBp
bnNwZWN0aW9uTGV2ZWwoKSBjb25zdDsKKworICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKSBjb25zdDsKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
V1BFKQorICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFBy
b2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dD
bGFzcygpOworICAgIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJB
TSwgTFBBUkFNKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgV2ViUGFnZVByb3h5KiBtX2luc3Bl
Y3RlZFBhZ2UgeyBudWxscHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2Ug
eyBudWxscHRyIH07CisKKyAgICBib29sIG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNWaXNpYmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2NhbkF0dGFjaCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUHJvZmlsaW5n
UGFnZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1f
ZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc0FjdGl2ZUZyb250ZW5kIHsgZmFsc2UgfTsKKworICAgIEF0dGFj
aG1lbnRTaWRlIG1fYXR0YWNobWVudFNpZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OworCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
PiBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9p
bnNwZWN0b3JXaW5kb3c7CisgICAgUmV0YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRh
cHRlcj4gbV9vYmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJM
Pj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNw
ZWN0b3JQcm94eT4gbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7CisgICAgU3Ry
aW5nIG1fdXJsU3RyaW5nOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKKyAg
ICBib29sIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07CisjZWxpZiBQ
TEFURk9STShHVEspCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50
PiBtX2NsaWVudDsKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsK
KyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yV2luZG93IHsgbnVsbHB0ciB9OworICAgIEd0a1dp
ZGdldCogbV9oZWFkZXJCYXIgeyBudWxscHRyIH07CisgICAgU3RyaW5nIG1faW5zcGVjdGVkVVJM
U3RyaW5nOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2lu
ZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsg
bnVsbHB0ciB9OworICAgIEhXTkQgbV9pbnNwZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9Owor
ICAgIEhXTkQgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgeyBudWxscHRyIH07CisgICAgUmVmUHRy
PFdlYlZpZXc+IG1faW5zcGVjdG9yVmlldzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmViYjc3NTUzYzZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC0wLDAgKzEsNTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yUHJveHkgeworICAgIE9wZW5Mb2NhbElu
c3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKKyAgICBTZXRG
cm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQor
CisgICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCisKKyAgICBGcm9udGVu
ZExvYWRlZCgpCisgICAgRGlkQ2xvc2UoKQorICAgIEJyaW5nVG9Gcm9udCgpCisgICAgQnJpbmdJ
bnNwZWN0ZWRQYWdlVG9Gcm9udCgpCisgICAgUmVvcGVuKCkKKyAgICBSZXNldFN0YXRlKCkKKwor
ICAgIEluc3BlY3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmluZykKKyAgICBTaG93Q2VydGlm
aWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKKyAgICBFbGVt
ZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAgICBUaW1lbGluZVJlY29yZGluZ0No
YW5nZWQoYm9vbCBhY3RpdmUpCisgICAgU2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJy
aWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCisKKyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwg
U3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAg
ICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKKworICAgIEF0dGFjaEJv
dHRvbSgpCisgICAgQXR0YWNoUmlnaHQoKQorICAgIEF0dGFjaExlZnQoKQorICAgIERldGFjaCgp
CisKKyAgICBBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQorCisgICAg
U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorICAgIFNldEF0dGFjaGVk
V2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCisKKyAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QpCisKKyAgICBTdGFydFdpbmRvd0RyYWcoKQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0
aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZlYTE1ZWU2
NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIK
KworI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3R5cGVkZWYgSGFzaE1hcDxXZWJQYWdlUHJveHkqLCB1bnNpZ25lZD4gUGFnZUxldmVsTWFw
OworCitzdGF0aWMgUGFnZUxldmVsTWFwJiBwYWdlTGV2ZWxNYXAoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxQYWdlTGV2ZWxNYXA+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit1
bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAg
IGlmIChwYWdlKSB7CisgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IHBhZ2VMZXZlbE1hcCgpLmZp
bmQocGFnZSk7CisgICAgICAgIGlmIChmaW5kUmVzdWx0ICE9IHBhZ2VMZXZlbE1hcCgpLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlICsgMTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMTsKK30KKworU3RyaW5nIGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQ
YWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiX19XZWJJ
bnNwZWN0b3JQYWdlR3JvdXBMZXZlbCIsIGluc3BlY3RvckxldmVsRm9yUGFnZShwYWdlKSwgIl9f
Iik7Cit9CisKK3ZvaWQgdHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9y
UGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQoreworICAgIHBhZ2VMZXZlbE1hcCgp
LnNldChpbnNwZWN0b3JQYWdlLCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSkp
OworfQorCit2b2lkIHVudHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9y
UGFnZSkKK3sKKyAgICBwYWdlTGV2ZWxNYXAoKS5yZW1vdmUoaW5zcGVjdG9yUGFnZSk7Cit9CisK
K3N0YXRpYyBXZWJQcm9jZXNzUG9vbCogc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CitzdGF0
aWMgV2ViUHJvY2Vzc1Bvb2wqIHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CisKK1dlYlBy
b2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwp
Cit7CisgICAgLy8gSGF2aW5nIG91ciBvd24gcHJvY2VzcyBwb29sIHJlbW92ZXMgdXMgZnJvbSB0
aGUgbWFpbiBwcm9jZXNzIHBvb2wgYW5kCisgICAgLy8gZ3VhcmFudGVlcyBubyBwcm9jZXNzIHNo
YXJpbmcgZm9yIG91ciB1c2VyIGludGVyZmFjZS4KKyAgICBXZWJQcm9jZXNzUG9vbComIHBvb2wg
PSAoaW5zcGVjdGlvbkxldmVsID09IDEpID8gc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgOiBz
X25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sOworICAgIGlmICghcG9vbCkgeworICAgICAgICBh
dXRvIGNvbmZpZ3VyYXRpb24gPSBBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRl
KCk7CisgICAgICAgIHBvb2wgPSAmV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9u
LmdldCgpKS5sZWFrUmVmKCk7CisgICAgICAgIC8vIERvIG5vdCBkZWxheSBwcm9jZXNzIGxhdW5j
aCBmb3IgaW5zcGVjdG9yIHBhZ2VzIGFzIGluc3BlY3RvciBwYWdlcyBkbyBub3Qga25vdyBob3cg
dG8gdHJhbnNpdGlvbiBmcm9tIGEgdGVybWluYXRlZCBwcm9jZXNzLgorICAgICAgICBwb29sLT5k
aXNhYmxlRGVsYXllZFdlYlByb2Nlc3NMYXVuY2goKTsKKyAgICB9CisgICAgcmV0dXJuICpwb29s
OworfQorCitib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sKQoreworICAgIHJldHVybiAoc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19t
YWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQb29sKQorICAgICAgICB8fCAoc19u
ZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCAmJiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29s
ID09ICZwcm9jZXNzUG9vbCk7Cit9CisKK2Jvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94
eSYgd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gcGFnZUxldmVsTWFwKCkuY29udGFpbnMoJndlYlBh
Z2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzE5ZWE3NTg4Y2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRp
bGl0aWVzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKKworLy8gVGhlIGluc3Bl
Y3RvciBwYWdlIGdyb3VwcyBhcmUgdXNlZCB0byBnaXZlIGRpZmZlcmVudCBwcmVmZXJlbmNlcyB0
byBlYWNoCisvLyBpbnNwZWN0b3IgbGV2ZWwgYnkgc2V0dGluZyBhIHBlci1sZXZlbCBwYWdlIGdy
b3VwIGlkZW50aWZpZXIuCit1bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVBy
b3h5Kik7CitTdHJpbmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFn
ZVByb3h5Kik7Cit2b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3Rv
clBhZ2UsIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSk7Cit2b2lkIHVudHJhY2tJbnNwZWN0
b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSk7CisKK1dlYlByb2Nlc3NQb29sJiBp
bnNwZWN0b3JQcm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOworYm9vbCBpc0lu
c3BlY3RvclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJik7Citib29sIGlzSW5zcGVjdG9yUGFn
ZShXZWJQYWdlUHJveHkmKTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmJlYmJkZjg3YWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcApAQCAtMCww
ICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgorCisj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK1dlYlBhZ2VEZWJ1Z2dhYmxlOjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJv
eHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKK3sKK30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1
Z2dhYmxlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7CisKKyAgICBpZiAoIW1fcGFnZS5tYWlu
RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fcGFnZS5t
YWluRnJhbWUoKS0+dGl0bGUoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwo
KSBjb25zdAoreworICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4g
V1RGOjpibGFua1VSTCgpLnN0cmluZygpOworCisgICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWlu
RnJhbWUoKS0+dXJsKCkuc3RyaW5nKCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7CisKKyAgICByZXR1cm4gdXJsOworfQor
Citib29sIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7
Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBj
aGFubmVsLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNl
KQoreworICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNo
YW5uZWwsIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgaW1tZWRpYXRlbHlQYXVzZSk7Cit9CisKK3Zv
aWQgV2ViUGFnZURlYnVnZ2FibGU6OmRpc2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVs
KQoreworICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5k
KGNoYW5uZWwpOworfQorCit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VG
cm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwor
dm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7
CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRp
bmcpOworfQorCit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIG1fbmFtZU92ZXJyaWRlID0gbmFtZTsKKyAgICB1cGRhdGUo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlRGVidWdnYWJsZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjhmODQ4ZGUxMTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9S
ZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYlBh
Z2VEZWJ1Z2dhYmxlIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdGlvblRh
cmdldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2ViUGFnZURlYnVnZ2FibGUpOworcHVibGljOgorICAgIFdlYlBhZ2VEZWJ1Z2dhYmxl
KFdlYlBhZ2VQcm94eSYpOworICAgIH5XZWJQYWdlRGVidWdnYWJsZSgpID0gZGVmYXVsdDsKKwor
ICAgIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlIHR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6VHlw
ZTo6V2ViUGFnZTsgfQorCisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCBmaW5hbDsKKyAgICBTdHJp
bmcgdXJsKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3Qg
ZmluYWw7CisKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBi
b29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2Ug
PSBmYWxzZSkgZmluYWw7CisgICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsJikgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpIGZp
bmFsOworCisgICAgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBt
X25hbWVPdmVycmlkZTsgfQorICAgIHZvaWQgc2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYp
OworCitwcml2YXRlOgorICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX25h
bWVPdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NPTlRST0xMQUJMRV9UQVJHRVQoV2ViS2l0OjpXZWJQYWdlRGVidWdnYWJsZSwg
V2ViUGFnZSk7CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4xZWUyOGJmNzE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwy
MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIK
KworI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQ
cm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJh
c2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworc3RhdGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNp
b25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIHJldHVybiBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Cit9
CisKK1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cihXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRl
bmRSb3V0ZXIoRnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQorICAgICwgbV9iYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigp
KSkKK3sKKyAgICBhdXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRB
Z2VudD4obV9mcm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7
CisKKyAgICBtX3RhcmdldEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7CisKKyAgICBtX2FnZW50
cy5hcHBlbmQoV1RGTW92ZSh0YXJnZXRBZ2VudCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjppbml0KCkKK3sKKyAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFn
ZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNy
ZWF0ZUluc3BlY3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZTo6UGFnZSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBh
Z2VDbG9zZWQoKQoreworICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIG1fYWdl
bnRzLmRpc2NhcmRWYWx1ZXMoKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6aGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0
ZXItPmhhc0xvY2FsRnJvbnRlbmQoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y29ubmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVu
ZENoYW5uZWwsIGJvb2wsIGJvb2wpCit7CisgICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVu
ZCA9ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKKworICAgIG1fZnJvbnRlbmRS
b3V0ZXItPmNvbm5lY3RGcm9udGVuZChmcm9udGVuZENoYW5uZWwpOworCisgICAgaWYgKGNvbm5l
Y3RpbmdGaXJzdEZyb250ZW5kKQorICAgICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoJm1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpKTsKKworICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJv
bnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKKyAgICBpZiAoaGFzTG9jYWxGcm9udGVuZCgpKQorICAgICAgICBtX3BhZ2UucmVtb3Rl
SW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVs
JiBmcm9udGVuZENoYW5uZWwpCit7CisgICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZy
b250ZW5kKGZyb250ZW5kQ2hhbm5lbCk7CisKKyAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJv
bnRlbmQgPSAhbV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCk7CisgICAgaWYgKGRpc2Nv
bm5lY3RpbmdMYXN0RnJvbnRlbmQpCisgICAgICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RvckRlc3Ryb3llZCk7CisKKyAg
ICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVy
LT5mcm9udGVuZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAg
aWYgKGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNw
ZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKQoreworICAgIC8vIEZJ
WE1FOiBIYW5kbGUgYSBsb2NhbCBpbnNwZWN0b3IgY2xpZW50LgorCisgICAgaWYgKCFtX2Zyb250
ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90
aWZ5IGFnZW50cyBmaXJzdCwgc2luY2UgdGhleSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xp
ZW50LgorICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5l
Y3RSZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisKKyAgICAvLyBEaXNjb25uZWN0
IGFueSByZW1haW5pbmcgcmVtb3RlIGZyb250ZW5kcy4KKyAgICBtX2Zyb250ZW5kUm91dGVyLT5k
aXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7CisKKyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9y
RnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOworCisjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9y
bWF0aW9uRGlkQ2hhbmdlKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKwor
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7CisjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgbV9wYWdlLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7CisjZWxzZQor
ICAgIGlmIChpbmRpY2F0aW5nKQorICAgICAgICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRp
b24oKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigp
OworI2VuZGlmCit9CisjZW5kaWYKKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQoreworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJn
ZXRQcm94eTo6Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKK30KKwordm9pZCBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJp
bmcmIHRhcmdldElkKQoreworICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7
CisgICAgaWYgKGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
dGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMu
cmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1l
c3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJn
ZXRUb0Zyb250ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVBy
b3h5JiBwcm92aXNpb25hbFBhZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVy
LT5oYXNGcm9udGVuZHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byogdGFy
Z2V0ID0gbV90YXJnZXRzLmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKKyAgICBB
U1NFUlQodGFyZ2V0KTsKKyAgICByZXR1cm4gdGFyZ2V0LT5pc1BhdXNlZCgpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhj
b25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0
KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAg
IHRhcmdldC0+c2V0UmVzdW1lQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJv
dmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKK3sKKyAgICBhZGRUYXJnZXQoSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHBy
b3Zpc2lvbmFsUGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOwor
fQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lv
bmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQorewor
ICAgIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7
Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lv
bmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5l
d0lEID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOwor
ICAgIGF1dG8gbmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChu
ZXdUYXJnZXQpOworICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsK
KyAgICBtX3RhcmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3
SUQpOworCisgICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3
aWxsIG5vdCByZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJv
eSBldmVyeXRoaW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMjAyOTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVs
b25nIHRvIHRoZSBjb21taXR0ZWQgcGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFy
Z2V0cy52YWx1ZXMoKSkKKyAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0
YXJnZXQpOworICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFy
Z2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
VGFyZ2V0UHJveHk+JiYgdGFyZ2V0KQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0
ZWQoKnRhcmdldCk7CisgICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RG
TW92ZSh0YXJnZXQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OGNh
ZWRmMGMwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFByb3h5LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclRhcmdldEFnZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5o
PgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworY2xhc3MgQmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBGcm9udGVuZENoYW5uZWw7CitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CisKKyAg
ICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHBhZ2VDbG9zZWQoKTsKKworICAgIGJvb2wgaGFzTG9j
YWxGcm9udGVuZCgpIGNvbnN0OworCisgICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbiA9IGZhbHNlLCBi
b29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSk7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbnRl
bmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RBbGxG
cm9udGVuZHMoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICB2
b2lkIHNldEluZGljYXRpbmcoYm9vbCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlSW5zcGVj
dG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSk7CisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICBib29sIHNo
b3VsZFBhdXNlTG9hZGluZyhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29udGludWVMb2FkaW5nQ2FsbGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJv
eHkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGRpZENyZWF0ZVByb3Zp
c2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYpOworICAgIHZvaWQgd2lsbERlc3Ryb3lQ
cm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRp
ZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdl
SUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYm
KTsKKworICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFJlZjxJbnNwZWN0b3I6OkZyb250
ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91dGVyOworICAgIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIEluc3BlY3Rvcjo6QWdlbnRSZWdp
c3RyeSBtX2FnZW50czsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KiBtX3Rh
cmdldEFnZW50OworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
VGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xp
Yi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kOWQ1MGRjMjg2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAs
MCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmgi
CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSURlYnVnZ2Fi
bGVJbmZvLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JVdGlscy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yRGVidWdnYWJsZVR5cGUuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJs
aWM6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNw
ZWN0b3JDbGllbnQsIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCisg
ICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29u
bmVjdGlvbklEKGNvbm5lY3Rpb25JRCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQor
ICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5S
ZW1vdGVJbnNwZWN0b3JQcm94eSgpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQo
bnVsbHB0cik7CisgICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIwNTUzNj46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRl
YnVnIHRhcmdldC4KKyAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJ
bmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1w
dHkoKSk7CisgICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShJbnNwZWN0
b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlKTsKKyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZN
b3ZlKGRlYnVnZ2FibGVJbmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJM
KCkpOworICAgIH0KKworICAgIHZvaWQgc2hvdygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5z
aG93KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRUYXJnZXROYW1lKGNvbnN0IENTdHJpbmcmIG5h
bWUpCisgICAgeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbV9wcm94eS0+dXBkYXRlV2lu
ZG93VGl0bGUobmFtZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX2luc3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25J
RCwgbV90YXJnZXRJRCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9u
dGVuZCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZy
b21Gcm9udGVuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OworICAgIHVpbnQ2NF90IG1fY29ubmVj
dGlvbklEOworICAgIHVpbnQ2NF90IG1fdGFyZ2V0SUQ7Cit9OworCitjb25zdCBTb2NrZXRDb25u
ZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMmIFJlbW90ZUluc3BlY3RvckNsaWVudDo6bWVzc2FnZUhh
bmRsZXJzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU29ja2V0Q29ubmVj
dGlvbjo6TWVzc2FnZUhhbmRsZXJzPiBtZXNzYWdlSGFuZGxlcnMgPSBTb2NrZXRDb25uZWN0aW9u
OjpNZXNzYWdlSGFuZGxlcnMoeworICAgIHsgIkRpZENsb3NlIiwgc3RkOjpwYWlyPENTdHJpbmcs
IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyB7IH0sCisgICAgICAgIFtdKFNv
Y2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCosIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAg
ICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4o
dXNlckRhdGEpOworICAgICAgICAgICAgY2xpZW50LmNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAg
ICAgICB9fQorICAgIH0sCisgICAgeyAiRGlkU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBzdGQ6OnBh
aXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIoYXkpIiwK
KyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9p
bnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0
PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQ7CisgICAgICAgICAgICBnX3ZhcmlhbnRf
Z2V0KHBhcmFtZXRlcnMsICIoQGF5KSIsICZiYWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigp
KTsKKyAgICAgICAgICAgIGNsaWVudC5zZXRCYWNrZW5kQ29tbWFuZHMoZ192YXJpYW50X2dldF9i
eXRlc3RyaW5nKGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQuZ2V0KCkpKTsKKyAgICAgICAgfX0KKyAg
ICB9LAorICAgIHsgIlNldFRhcmdldExpc3QiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29u
bmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodGEodHNzc2IpKSIsCisgICAgICAgIFtdKFNv
Y2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEp
IHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0
b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsK
KyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R1ZhcmlhbnRJdGVyPiBpdGVyOworICAgICAgICAg
ICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHRhKHRzc3NiKSkiLCAmY29ubmVjdGlvbklE
LCAmaXRlci5vdXRQdHIoKSk7CisgICAgICAgICAgICBzaXplX3QgdGFyZ2V0Q291bnQgPSBnX3Zh
cmlhbnRfaXRlcl9uX2NoaWxkcmVuKGl0ZXIuZ2V0KCkpOworICAgICAgICAgICAgVmVjdG9yPFJl
bW90ZUluc3BlY3RvckNsaWVudDo6VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgICAgICAgICAgdGFy
Z2V0TGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRhcmdldENvdW50KTsKKyAgICAgICAgICAg
IGd1aW50NjQgdGFyZ2V0SUQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB0eXBlOworICAgICAg
ICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybDsKKyAg
ICAgICAgICAgIGdib29sZWFuIGhhc0xvY2FsRGVidWdnZXI7CisgICAgICAgICAgICB3aGlsZSAo
Z192YXJpYW50X2l0ZXJfbG9vcChpdGVyLmdldCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwg
JnR5cGUsICZuYW1lLCAmdXJsLCAmaGFzTG9jYWxEZWJ1Z2dlcikpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWdfc3RyY21wMCh0eXBlLCAiV2ViIikgfHwgIWdfc3RyY21wMCh0eXBlLCAiSmF2YVNj
cmlwdCIpKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFwcGVuZCh7
IHRhcmdldElELCB0eXBlLCBuYW1lLCB1cmwgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjbGllbnQuc2V0VGFyZ2V0TGlzdChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkp
OworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgc3Rk
OjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0
cykiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMs
IGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGlj
X2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZ3Vp
bnQ2NCBjb25uZWN0aW9uSUQsIHRhcmdldElEOworICAgICAgICAgICAgY29uc3QgY2hhciogbWVz
c2FnZTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCZzKSIsICZj
b25uZWN0aW9uSUQsICZ0YXJnZXRJRCwgJm1lc3NhZ2UpOworICAgICAgICAgICAgY2xpZW50LnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKKyAg
ICAgICAgfX0KKyAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIG1lc3NhZ2VIYW5kbGVyczsKK30K
KworUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hh
ciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2Vy
dmVyKQorICAgIDogbV9ob3N0QW5kUG9ydChTdHJpbmc6OmZyb21VVEY4KGFkZHJlc3MpICsgJzon
ICsgU3RyaW5nOjpudW1iZXIocG9ydCkpCisgICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQorICAg
ICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCit7CisgICAg
R1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRf
Y2xpZW50X25ldygpKTsKKyAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5j
KHNvY2tldENsaWVudC5nZXQoKSwgbV9ob3N0QW5kUG9ydC51dGY4KCkuZGF0YSgpLCAwLCBtX2Nh
bmNlbGxhYmxlLmdldCgpLAorICAgICAgICBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOworICAgICAgICAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2Zp
bmlzaChHX1NPQ0tFVF9DTElFTlQob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1Is
IEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBhdXRvKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1
c2VyRGF0YSk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICBj
bGllbnQtPnNldHVwQ29ubmVjdGlvbihTb2NrZXRDb25uZWN0aW9uOjpjcmVhdGUoV1RGTW92ZShj
b25uZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXJzKCksIGNsaWVudCkpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGllbnQg
ZmFpbGVkIHRvIGNvbm5lY3QgdG8gaW5zcGVjdG9yIHNlcnZlcjogJXMiLCBlcnJvci0+bWVzc2Fn
ZSk7CisgICAgICAgICAgICAgICAgY2xpZW50LT5tX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQo
KmNsaWVudCk7CisgICAgICAgICAgICB9CisgICAgfSwgdGhpcyk7Cit9CisKK1JlbW90ZUluc3Bl
Y3RvckNsaWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCit7CisgICAgZ19jYW5jZWxsYWJs
ZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZXR1cENvbm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlv
bikKK3sKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOworICAg
IG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwSW5zcGVjdG9yQ2xpZW50Iiwg
Z192YXJpYW50X25ldygiKEBheSkiLCBnX3ZhcmlhbnRfbmV3X2J5dGVzdHJpbmcoSW5zcGVjdG9y
OjpiYWNrZW5kQ29tbWFuZHNIYXNoKCkuZGF0YSgpKSkpOworfQorCit2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5k
cykKK3sKKyAgICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7
CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNv
ZGUoYmFja2VuZENvbW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7
CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVj
dGlvbkRpZENsb3NlKCkKK3sKKyAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBtX2luc3BlY3Rv
clByb3h5TWFwLmNsZWFyKCk7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAg
ICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6aW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRh
cmdldElEKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1
cmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0
aW9uSUQsIHRhcmdldElEXSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3Bl
Y3RvclByb3h5PigqdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCk7CisgICAgfSk7CisgICAg
aWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NvY2tldENv
bm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXR1cCIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25u
ZWN0aW9uSUQsIHRhcmdldElEKSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9h
ZCgpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tl
bmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQoreworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRN
ZXNzYWdlVG9CYWNrZW5kIiwgZ192YXJpYW50X25ldygiKHR0cykiLCBjb25uZWN0aW9uSUQsIHRh
cmdldElELCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0
X3QgdGFyZ2V0SUQpCit7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yUHJveHlNYXAuY29udGFpbnMo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpKTsKKyAgICBtX3NvY2tldENv
bm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJGcm9udGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygi
KHR0KSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFw
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Cit9CisKK3Zv
aWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KHVpbnQ2NF90IGNvbm5lY3Rp
b25JRCwgVmVjdG9yPFRhcmdldD4mJiB0YXJnZXRMaXN0KQoreworICAgIC8vIEZpbmQgY2xvc2Vk
IHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPHVpbnQ2NF90LCA0PiB0YXJnZXRz
VG9SZW1vdmU7CisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uVGFyZ2V0UGFpciA6IG1faW5zcGVj
dG9yUHJveHlNYXAua2V5cygpKSB7CisgICAgICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0UGFpci5m
aXJzdCAhPSBjb25uZWN0aW9uSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdl
dExpc3QpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gY29ubmVjdGlvblRhcmdldFBh
aXIuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoY29u
bmVjdGlvblRhcmdldFBhaXIpLT5zZXRUYXJnZXROYW1lKHRhcmdldC5uYW1lKTsKKyAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHRhcmdldHNU
b1JlbW92ZS5hcHBlbmQoY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAg
Zm9yIChhdXRvIHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQorICAgICAgICBtX2luc3BlY3Rv
clByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7
CisKKyAgICBtX3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7
CisgICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVj
dGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBh
dXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoY29ubmVj
dGlvbklELCB0YXJnZXRJRCkpOworICAgIEFTU0VSVChwcm94eSk7CisgICAgaWYgKCFwcm94eSkK
KyAgICAgICAgcmV0dXJuOworICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5n
Ojpmcm9tVVRGOChtZXNzYWdlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZGVlMDJjZTVkNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9nbGliL1NvY2tldENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dDYW5jZWxsYWJsZSBHQ2FuY2VsbGFibGU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1v
dGVJbnNwZWN0b3JQcm94eTsKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OworCitjbGFz
cyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3Rl
SW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5n
ZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0
aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKK307CisKK2NsYXNzIFJlbW90
ZUluc3BlY3RvckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1Ymxp
YzoKKyAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWdu
ZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9y
Q2xpZW50KCk7CisKKyAgICBzdHJ1Y3QgVGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVp
bnQ2NF90IGlkOworICAgICAgICBDU3RyaW5nIHR5cGU7CisgICAgICAgIENTdHJpbmcgbmFtZTsK
KyAgICAgICAgQ1N0cmluZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8dWludDY0
X3QsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsg
fQorICAgIGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RB
bmRQb3J0OyB9CisgICAgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQorCisgICAgdm9pZCBpbnNwZWN0KHVpbnQ2
NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0
aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qg
U29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKKyAg
ICB2b2lkIHNldHVwQ29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAgdm9p
ZCBjb25uZWN0aW9uRGlkQ2xvc2UoKTsKKworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNv
bnN0IGNoYXIqKTsKKyAgICB2b2lkIHNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklE
LCBWZWN0b3I8VGFyZ2V0PiYmKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50
NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKik7CisKKyAg
ICBTdHJpbmcgbV9ob3N0QW5kUG9ydDsKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7
CisgICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7CisgICAgUmVmUHRyPFNv
Y2tldENvbm5lY3Rpb24+IG1fc29ja2V0Q29ubmVjdGlvbjsKKyAgICBHUmVmUHRyPEdDYW5jZWxs
YWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0
Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4s
IHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlN
YXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41OTljNDQ2NTc2OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlD
bGllbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94
eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgfldlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9v
bCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYnJpbmdU
b0Zyb250KFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQg
aGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2Vi
SW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCB3aWR0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9yUHJveHkmLCBib29sIGF2YWls
YWJsZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmRlMzQ5
YmI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94
eS5oIgorCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRp
b25BY3Rpb24uaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tDb250ZXh0TWVu
dUl0ZW0uaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYktp
dEluc3BlY3RvcldpbmRvdy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZp
Y2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0YXRpYyB2b2lkIGluc3BlY3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50
ZXIgdXNlckRhdGEpCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0g
c3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPih1c2VyRGF0YSk7CisKKyAgICAvLyBJbmZv
cm0gV2ViUHJvY2VzcyBhYm91dCB3ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAor
ICAgIC8vIHJlc3VsdHMgaW4gZmFpbHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2Vi
aW5zcGVjdG9yLgorICAgIGluc3BlY3RvclByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5
Q2xpZW50PiYmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7CisgICAgd2Via2l0SW5zcGVj
dG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV9pbnNwZWN0b3JX
aW5kb3cpLCAhbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxT
dHJpbmcudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9u
ZyBsb25nIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2Vj
dXJpdHlPcmlnaW5SZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBs
b25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJh
c2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQor
eworICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2Us
IGN1cnJlbnREYXRhYmFzZVVzYWdlICogMS4yNSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlByb2Nl
c3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV2Vi
SW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVj
dG9yUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKHdl
Ykluc3BlY3RvclByb3h5KTsKKyAgICB3ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgp
OworfQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFn
ZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwg
V0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmln
YXRlIGFueXdoZXJlLgorICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChu
YXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKKyAgICBpZiAoc291cmNlRnJhbWUg
JiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5l
clJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgV2Vi
SW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
SW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJv
eHkpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2
aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2Yg
dGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01h
aW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7CisgICAgICAgIHRvSW1wbChs
aXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
UHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBw
YWdlLgorICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOworCisgICAgLy8gQW5kIGlu
c3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgd2ViSW5zcGVjdG9yUHJv
eHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisK
K3N0YXRpYyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFn
ZVJlZiwgV0tBcnJheVJlZiBwcm9wb3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYs
IFdLSGl0VGVzdFJlc3VsdFJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKK3sKKyAgICBXS011
dGFibGVBcnJheVJlZiBtZW51SXRlbXMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAg
c2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUocHJvcG9zZWRNZW51UmVmKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgV0tDb250ZXh0TWVudUl0
ZW1SZWYgY29udGV4dE1lbnVJdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleChwcm9wb3NlZE1lbnVSZWYsIGkpKTsKKyAgICAgICAgc3dp
dGNoIChXS0NvbnRleHRNZW51SXRlbUdldFRhZyhjb250ZXh0TWVudUl0ZW0pKSB7CisgICAgICAg
IGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgICAgIGNh
c2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0o
bWVudUl0ZW1zLCBjb250ZXh0TWVudUl0ZW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAqbmV3TWVudVJlZiA9IG1lbnVJdGVtczsKK30KKworV2ViUGFnZVBy
b3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQorewor
ICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3
KTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmlu
ZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUp
CisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGlu
IGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2Vz
LT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRM
b2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAg
IHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsKKyAgICB9KTsKKyAgICBh
dXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElk
ZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOworCisgICAgYXV0byBwYWdlQ29uZmln
dXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlv
bkxldmVsKCkpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVy
ZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdy
b3VwLnB0cigpKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZp
ZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOworICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JWaWV3KSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5z
cGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKGluc3BlY3RvclZpZXdEZXN0cm95ZWQp
LCB0aGlzKTsKKworICAgIFdLUGFnZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7CisgICAgICAgIHsg
MiwgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRG
b3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gY2xvc2VQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cworICAgICAgICBu
dWxscHRyLCAvLyBmb2N1cworICAgICAgICBudWxscHRyLCAvLyB1bmZvY3VzCisgICAgICAgIG51
bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZh
U2NyaXB0Q29uZmlybQorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0Cisg
ICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxs
cHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYw
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50CisgICAgICAgIG51bGxw
dHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gYXJlVG9v
bGJhcnNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJzVmlzaWJsZQorICAg
ICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNl
dE1lbnVCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzU3RhdHVzQmFyVmlzaWJsZQor
ICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIs
IC8vIGlzUmVzaXphYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFJlc2l6YWJsZQorICAgICAg
ICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2lu
ZG93RnJhbWUsCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bAorICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3CisgICAgICAgIG51bGxwdHIsIC8vIHBhZ2VE
aWRTY3JvbGwKKyAgICAgICAgZXhjZWVkZWREYXRhYmFzZVF1b3RhLAorICAgICAgICBudWxscHRy
LCAvLyBydW5PcGVuUGFuZWwsCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVp
Z2h0CisgICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAorICAgICAgICBudWxscHRyLCAv
LyBkcmF3SGVhZGVyCisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIKKyAgICAgICAgbnVs
bHB0ciwgLy8gcHJpbnRGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAorICAgICAg
ICBudWxscHRyLCAvLyB1bnVzZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJ
bkRvd25sb2Fkc0ZvbGRlcgorICAgICAgICBudWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZh
U2NyaXB0CisgICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZVBhZ2UKKyAgICAgICAgbnVsbHB0ciwg
Ly8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9s
aWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8g
dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAg
ICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCisgICAgICAgIG51bGxwdHIsIC8vIGhp
ZGVDb2xvclBpY2tlcgorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRv
bkNsaWNrZWQKKyAgICB9OworCisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRp
b25DbGllbnQgPSB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorICAgICAgICBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uUmVzcG9uc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1
Z2luTG9hZAorICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlv
bgorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2
aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCisgICAgICAg
IG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RmFpbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZEluU3ViZnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KKyAgICAgICAgbnVs
bHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8g
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAgICAgICBudWxscHRyLCAv
LyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgd2ViUHJvY2Vzc0Rp
ZENyYXNoLAorICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5CisKKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxs
cHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdh
dGlvbkdlc3R1cmVTbmFwc2hvdAorICAgIH07CisKKyAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVu
dFYzIGNvbnRleHRNZW51Q2xpZW50ID0geworICAgICAgICB7IDMsIHRoaXMgfSwKKyAgICAgICAg
bnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JV
c2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gY3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gY29udGV4dE1lbnVEaXNtaXNzZWQKKyAgICAgICAgZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51LAorICAgICAgICBudWxscHRyLCAvLyBzaG93Q29u
dGV4dE1lbnUKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbnRleHRNZW51CisgICAgfTsKKwor
ICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2luc3BlY3RvclZpZXcpKTsKKyAgICBBU1NFUlQoaW5z
cGVjdG9yUGFnZSk7CisKKyAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9BUEkoaW5zcGVjdG9y
UGFnZSksICZ1aUNsaWVudC5iYXNlKTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVu
dCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisgICAgV0tQ
YWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmY29udGV4
dE1lbnVDbGllbnQuYmFzZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7Cisg
ICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5vcGVuV2luZG93KCp0aGlzKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gZ3RrX3dpZGdl
dF9nZXRfdG9wbGV2ZWwoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOworICAgIGlmICgh
V2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KGluc3BlY3RlZFZpZXdQYXJl
bnQpKQorICAgICAgICBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gbnVsbHB0cjsKKworICAgIEFTU0VS
VCghbV9pbnNwZWN0b3JXaW5kb3cpOworICAgIG1faW5zcGVjdG9yV2luZG93ID0gd2Via2l0SW5z
cGVjdG9yV2luZG93TmV3KGluc3BlY3RlZFZpZXdQYXJlbnQgPyBHVEtfV0lORE9XKGluc3BlY3Rl
ZFZpZXdQYXJlbnQpIDogbnVsbHB0cik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CisgICAgZ3RrX3dpZGdl
dF9zaG93KG1faW5zcGVjdG9yVmlldyk7CisKKyAgICBpZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5n
LmlzRW1wdHkoKSkKKyAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKKworICAg
IGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JXaW5kb3cpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yV2luZG93KSk7CisgICAgZ3RrX3dp
bmRvd19wcmVzZW50KEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7
CisgICAgaWYgKG1faW5zcGVjdG9yVmlldykgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQq
PihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisgICAgICAgIG1faW5zcGVjdG9yVmll
dyA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+ZGlkQ2xvc2UoKnRoaXMpOworCisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAg
ICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIGlmIChtX2lzT3Bl
bmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5i
cmluZ1RvRnJvbnQoKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHBh
cmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYg
KFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQorICAgICAg
ICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJlbnQpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUlzRnJvbnQoKQoreworICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9w
bGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVl
blRvcGxldmVsV2luZG93KHBhcmVudCkpCisgICAgICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBn
dGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBhcmVudCkpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJs
OworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5n
ZWQoKnRoaXMsIHVybCk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHVw
ZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9v
cmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCIpOworfQorCitTdHJp
bmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNl
L1Rlc3QuaHRtbCIpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJh
c2VVUkwoKQoreworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5z
cGVjdG9yL1VzZXJJbnRlcmZhY2UvIik7Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCit7CisgICAgLy8gRklYTUUgPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVs
IGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9E
YXRhOjplbXB0eSgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxv
Y2F0ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKK30KKwordW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQorewor
ICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgp
LT52aWV3V2lkZ2V0KCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0
dGFjaCgpCit7CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3Bl
Y3RvclZpZXc7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a19jb250
YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3Rv
clZpZXcpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwor
ICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAgfQorCisgICAgLy8gU2V0IGEgZGVm
YXVsdCBzaXplcyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0gMzAwOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOworCisgICAgaWYgKG1f
YXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgeworICAgICAgICB1bnNp
Z25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdo
dCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3Rk
OjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXpl
LCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWdu
ZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkg
KiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4
KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhp
bXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGll
bnQtPmF0dGFjaCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdFdlYlZpZXdC
YXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+
dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBtX2F0dGFjaG1lbnRTaWRlKTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNS
dW5uaW5nUHJvY2VzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a1dpZGdl
dD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldzsKKyAgICBpZiAoIW1fY2xpZW50IHx8
ICFtX2NsaWVudC0+ZGV0YWNoKCp0aGlzKSkgeworICAgICAgICAvLyBEZXRhY2ggaXMgY2FsbGVk
IHdoZW4gbV9pc0F0dGFjaGVkIGlzIHRydWUsIGJ1dCBpdCBjb3VsZCBjYWxsZWQgYmVmb3JlCisg
ICAgICAgIC8vIHRoZSBpbnNwZWN0b3IgaXMgb3BlbmVkIGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hv
d24vY2xvc2VkIHF1aWNrbHkuIFNvLAorICAgICAgICAvLyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBh
cmVudCB5ZXQuCisgICAgICAgIGlmIChHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3BhcmVudChtX2luc3BlY3RvclZpZXcpKQorICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1v
dmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBtX2luc3BlY3RvclZpZXcpOworICAgIH0KKworICAg
IC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGlu
c3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCisgICAgLy8gYW5kIHdlIHNob3VsZCBu
b3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgorICAgIGlmICghbV9pc1Zp
c2libGUpIHsKKyAgICAgICAgLy8gVGhlIGluc3BlY3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVk
LCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRo
ZQorICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkg
Y2xvc2VkLgorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9p
bnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJv
eWVkKSwgdGhpcyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorewor
ICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVp
Z2h0KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9X
RUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRh
Y2hlZFdpZHRoKCp0aGlzLCB3aWR0aCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0
b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRn
ZXQoKSksIHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJh
ZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIHZvaWQgZmlsZVJlcGxh
Y2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNv
dXJjZU9iamVjdCk7CisgICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmls
ZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKKyAgICBHVW5p
cXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUpKTsKKyAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSks
IHBhZ2UtPndlYlBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgVU5VU0VE
X1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKCFXZWJDb3JlOjp3
aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1JlZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0
a19maWxlX2Nob29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxlIiwKKyAgICAgICAgR1RLX1dJTkRP
VyhwYXJlbnQpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwi
KSk7CisKKyAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlh
bG9nLmdldCgpKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmly
bWF0aW9uKGNob29zZXIsIFRSVUUpOworCisgICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1
ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCisgICAgLy8g
YXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFs
aWQgZmlsZTovLy8gVVJMCisgICAgLy8gdW5mb3J0dW5hdGVseS4KKyAgICBVUkwgdXJsKFVSTCgp
LCBzdWdnZXN0ZWRVUkwpOworICAgIC8vIFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCisgICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vi
c3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1
bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBU
KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBD
U3RyaW5nIGRhdGFTdHJpbmc7CisgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5n
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgp
OworICAgIH0gZWxzZQorICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CisKKyAg
ICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRh
dGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFT
dHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7
CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dl
dF9maWxlKGNob29zZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9w
YXRoKGZpbGUuZ2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxl
LmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxzZSwKKyAgICAgICAgR19GSUxF
X0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBmaWxlUmVwbGFjZUNvbnRlbnRz
Q2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywg
YXZhaWxhYmxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3Rv
cldpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE0OTBm
MGU2ZjMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKKworI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0
cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IHsKKyAgICBHdGtXaW5kb3cgcGFyZW50OworCisg
ICAgR3RrV2lkZ2V0KiBoZWFkZXJCYXI7Cit9OworCitzdHJ1Y3QgX1dlYktpdEluc3BlY3Rvcldp
bmRvd0NsYXNzIHsKKyAgICBHdGtXaW5kb3dDbGFzcyBwYXJlbnQ7Cit9OworCitHX0RFRklORV9U
WVBFKFdlYktpdEluc3BlY3RvcldpbmRvdywgd2Via2l0X2luc3BlY3Rvcl93aW5kb3csIEdUS19U
WVBFX1dJTkRPVykKKworc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfY2xhc3Nf
aW5pdChXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9pbnNwZWN0b3Jfd2luZG93X2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3cp
Cit7CisgICAgd2luZG93LT5oZWFkZXJCYXIgPSBndGtfaGVhZGVyX2Jhcl9uZXcoKTsKKyAgICBn
dGtfaGVhZGVyX2Jhcl9zZXRfdGl0bGUoR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIp
LCBfKCJXZWIgSW5zcGVjdG9yIikpOworICAgIGd0a19oZWFkZXJfYmFyX3NldF9zaG93X2Nsb3Nl
X2J1dHRvbihHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIFRSVUUpOworICAgIGd0
a193aW5kb3dfc2V0X3RpdGxlYmFyKEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT5oZWFkZXJC
YXIpOworICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3ctPmhlYWRlckJhcik7Cit9CisKK0d0a1dp
ZGdldCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KQoreworICAg
IHJldHVybiBHVEtfV0lER0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lO
RE9XLCAidHlwZSIsIEdUS19XSU5ET1dfVE9QTEVWRUwsICJ0cmFuc2llbnQtZm9yIiwgcGFyZW50
LAorICAgICAgICAiZGVmYXVsdC13aWR0aCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2lu
ZG93V2lkdGgsICJkZWZhdWx0LWhlaWdodCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2lu
ZG93SGVpZ2h0LCBudWxscHRyKSk7Cit9CisKK3ZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0
U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIHN1YnRp
dGxlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1co
d2luZG93KSk7CisKKyAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc3VidGl0bGUoR1RLX0hFQURFUl9C
QVIod2luZG93LT5oZWFkZXJCYXIpLCBzdWJ0aXRsZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5k
b3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJkYzI4ZDEwOWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1dlYktpdEluc3BlY3RvcldpbmRvdy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5T
UEVDVE9SX1dJTkRPVyAgICAgICAgICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lO
RE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3cpKQorI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9S
X1dJTkRPVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9X
SU5ET1dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9X
KSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRP
VywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
SW5zcGVjdG9yV2luZG93IFdlYktpdEluc3BlY3RvcldpbmRvdzsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzczsKKwor
R1R5cGUgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7CisKK0d0a1dpZGdl
dCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKK3ZvaWQgd2Vi
a2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiwgY29u
c3QgY2hhciogc3VidGl0bGUpOworCitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGln
aHRWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE5ODM5MWM0
MjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBIaWdobGlnaHQ7Cit9CisKK0BpbnRlcmZh
Y2UgV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IDogVUlWaWV3IHsKKyAgICBOU011dGFibGVBcnJh
eSAqX2xheWVyczsgLy8gQ0FTaGFwZUxheWVycy4KK30KKy0gKHZvaWQpdXBkYXRlOihjb25zdCBX
ZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodDsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxp
Z2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi4wNjVmMGMwM2UzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCkBAIC0wLDAgKzEs
MjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3Bl
Y3RvckhpZ2hsaWdodFZpZXcuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBv
cnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CisjaW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0
aWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKworQGltcGxlbWVu
dGF0aW9uIFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldworCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhGcmFtZTooQ0dSZWN0KWZyYW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEZyYW1lOmZyYW1lXSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2xheWVycyA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICBbX2xheWVycyBy
ZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpX3JlbW92ZUFsbExh
eWVycworeworICAgIGZvciAoQ0FTaGFwZUxheWVyICpsYXllciBpbiBfbGF5ZXJzKQorICAgICAg
ICBbbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtfbGF5ZXJzIHJlbW92ZUFsbE9i
amVjdHNdOworfQorCistICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIpbnVtTGF5ZXJz
Cit7CisgICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBudW1MYXllcnMpCisgICAgICAgIHJldHVy
bjsKKworICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOworCisgICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKKyAgICAgICAgQ0FTaGFwZUxheWVyICpsYXll
ciA9IFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW19sYXllcnMgYWRkT2Jq
ZWN0OmxheWVyXTsKKyAgICAgICAgW3NlbGYubGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOworICAg
ICAgICBbbGF5ZXIgcmVsZWFzZV07CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBmaW5kSW50ZXJz
ZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwMSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMiwgV2ViQ29yZTo6RmxvYXRQb2ludCYg
aW50ZXJzZWN0aW9uKSAKK3sKKyAgICAvLyBEbyB0aGUgbGluZXMgaW50ZXJzZWN0PworICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgaWYgKCFm
aW5kSW50ZXJzZWN0aW9uKHAxLCBwMiwgZDEsIGQyLCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2lu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElzIHRoZSBpbnRlcnNlY3Rpb24g
YmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvbiB0aGUgbGluZT8KKyAgICBpZiAocDEueCgpID49IHAy
LngoKSkgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDEu
eCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAyLngoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50
ZXJzZWN0aW9uUG9pbnQueCgpID4gcDIueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50
LngoKSA8IHAxLngoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KHAxLnkoKSA+PSBwMi55KCkpIHsKKyAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBv
aW50LnkoKSA+IHAxLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMi55
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAyLnkoKSB8fCB0ZW1wb3JhcnlJbnRl
cnNlY3Rpb25Qb2ludC55KCkgPCBwMS55KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaW50ZXJzZWN0aW9uID0gdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFRoaXMgcXVhZCBpbnRlcnNlY3Rpb24gd29ya3MgYmVj
YXVzZSB0aGUgdHdvIHF1YWRzIGFyZSBrbm93biB0byBiZSBhdCB0aGUgc2FtZQorLy8gcm90YXRp
b24gYW5kIGNsb2Nrd2lzZS1uZXNzLgorc3RhdGljIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkSW50
ZXJzZWN0aW9uKFdlYkNvcmU6OkZsb2F0UXVhZCBib3VuZHMsIFdlYkNvcmU6OkZsb2F0UXVhZCB0
b0NsYW1wKQoreworICAgIC8vIFJlc3VsdGluZyBwb2ludHMuCisgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBwMSwgcDIsIHAzLCBwNDsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQxID0gZmFsc2U7Cisg
ICAgYm9vbCBjb250YWluc1BvaW50MiA9IGZhbHNlOworICAgIGJvb2wgY29udGFpbnNQb2ludDMg
PSBmYWxzZTsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQ0ID0gZmFsc2U7CisgICAgYm9vbCBpbnRl
cnNlY3RGb3JQb2ludDEgPSBmYWxzZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50MiA9IGZh
bHNlOworICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmFsc2U7CisgICAgYm9vbCBpbnRl
cnNlY3RGb3JQb2ludDQgPSBmYWxzZTsKKworICAgIC8vIFRvcCAvIGJvdHRvbSB2ZXJ0aWNhbCBj
bGFtcGluZy4KKyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMSgpKSkgewor
ICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7CisgICAgICAgIHAxID0gdG9DbGFtcC5wMSgp
OworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDEgPSBmaW5kSW50ZXJzZWN0aW9u
T25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRvQ2xhbXAucDEo
KSwgdG9DbGFtcC5wNCgpLCBwMSkpKQorICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsKKworICAg
IGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAyKCkpKSB7CisgICAgICAgIGNvbnRh
aW5zUG9pbnQyID0gdHJ1ZTsKKyAgICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7CisgICAgfSBlbHNl
IGlmICghKGludGVyc2VjdEZvclBvaW50MiA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVu
UG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9DbGFtcC5wMigpLCB0b0NsYW1wLnAz
KCksIHAyKSkpCisgICAgICAgIHAyID0gdG9DbGFtcC5wMigpOworCisgICAgaWYgKGJvdW5kcy5j
b250YWluc1BvaW50KHRvQ2xhbXAucDMoKSkpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDMgPSB0
cnVlOworICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKKyAgICB9IGVsc2UgaWYgKCEoaW50ZXJz
ZWN0Rm9yUG9pbnQzID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRz
LnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwgcDMpKSkKKyAg
ICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7CisKKyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQo
dG9DbGFtcC5wNCgpKSkgeworICAgICAgICBjb250YWluc1BvaW50NCA9IHRydWU7CisgICAgICAg
IHA0ID0gdG9DbGFtcC5wNCgpOworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDQg
PSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQoKSwgYm91bmRz
LnAzKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwNCkpKQorICAgICAgICBwNCA9IHRv
Q2xhbXAucDQoKTsKKworICAgIC8vIElmIG9ubHkgb25lIG9mIHRoZSBwb2ludHMgaW50ZXJzZWN0
ZWQgb24gZWl0aGVyIHRoZSB0b3Agb3IgYm90dG9tIGxpbmUgdGhlbiB3ZQorICAgIC8vIGNhbiBj
bGFtcCB0aGUgb3RoZXIgcG9pbnQgb24gdGhhdCBsaW5lIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGJv
dW5kcy4KKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmIGludGVyc2VjdEZvclBvaW50MiAmJiAh
aW50ZXJzZWN0Rm9yUG9pbnQxKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1ZTsKKyAg
ICAgICAgcDEgPSBib3VuZHMucDEoKTsKKyAgICB9IGVsc2UgaWYgKCFjb250YWluc1BvaW50MiAm
JiBpbnRlcnNlY3RGb3JQb2ludDEgJiYgIWludGVyc2VjdEZvclBvaW50MikgeworICAgICAgICBj
b250YWluc1BvaW50MiA9IHRydWU7CisgICAgICAgIHAyID0gYm91bmRzLnAyKCk7CisgICAgfQor
ICAgIGlmICghY29udGFpbnNQb2ludDQgJiYgaW50ZXJzZWN0Rm9yUG9pbnQzICYmICFpbnRlcnNl
Y3RGb3JQb2ludDQpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOworICAgICAgICBw
NCA9IGJvdW5kcy5wNCgpOworICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQzICYmIGludGVy
c2VjdEZvclBvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKSB7CisgICAgICAgIGNvbnRhaW5z
UG9pbnQzID0gdHJ1ZTsKKyAgICAgICAgcDMgPSBib3VuZHMucDMoKTsKKyAgICB9CisKKyAgICAv
LyBOb3cgd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gaG9yaXpvbnRhbCBjbGFtcGluZyBmb3IgdW5h
ZGp1c3RlZCBwb2ludHMuCisgICAgaWYgKCFjb250YWluc1BvaW50MiAmJiAhaW50ZXJzZWN0Rm9y
UG9pbnQyKQorICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3Vu
ZHMucDIoKSwgYm91bmRzLnAzKCksIHAxLCBwMiwgcDIpOworICAgIGlmICghY29udGFpbnNQb2lu
dDMgJiYgIWludGVyc2VjdEZvclBvaW50MykKKyAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGlu
ZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwNCwgcDMsIHAzKTsKKyAg
ICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2ludDEpCisgICAgICAgIGZp
bmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQo
KSwgcDEsIHAyLCBwMSk7CisgICAgaWYgKCFjb250YWluc1BvaW50NCAmJiAhaW50ZXJzZWN0Rm9y
UG9pbnQ0KQorICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3Vu
ZHMucDEoKSwgYm91bmRzLnA0KCksIHA0LCBwMywgcDQpOworCisgICAgcmV0dXJuIFdlYkNvcmU6
OkZsb2F0UXVhZChwMSwgcDIsIHAzLCBwNCk7Cit9CisKK3N0YXRpYyB2b2lkIGxheWVyUGF0aFdp
dGhIb2xlKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0
ZXJRdWFkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIGhvbGVRdWFkKQoreworICAgIC8vIE5v
dGhpbmcgdG8gc2hvdy4KKyAgICBpZiAob3V0ZXJRdWFkID09IGhvbGVRdWFkIHx8IGhvbGVRdWFk
LmNvbnRhaW5zUXVhZChvdXRlclF1YWQpKSB7CisgICAgICAgIGxheWVyLnBhdGggPSBOVUxMOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMgYSBuZWdhdGl2ZSBt
YXJnaW4gLyBwYWRkaW5nIHRoZW4gdGhlIG91dGVyIGJveCBtaWdodCBub3QKKyAgICAvLyBmdWxs
eSBjb250YWluIHRoZSBob2xlIGJveC4gSW4gc3VjaCBjYXNlcyB3ZSByZWNhbGN1bGF0ZSB0aGUg
aG9sZSB0bworICAgIC8vIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBxdWFkcy4KKyAg
ICBXZWJDb3JlOjpGbG9hdFF1YWQgaW5uZXJIb2xlOworICAgIGlmIChvdXRlclF1YWQuY29udGFp
bnNRdWFkKGhvbGVRdWFkKSkKKyAgICAgICAgaW5uZXJIb2xlID0gaG9sZVF1YWQ7CisgICAgZWxz
ZQorICAgICAgICBpbm5lckhvbGUgPSBxdWFkSW50ZXJzZWN0aW9uKG91dGVyUXVhZCwgaG9sZVF1
YWQpOworCisgICAgLy8gQ2xvY2t3aXNlIGluc2lkZSByZWN0IChob2xlKSwgQ291bnRlci1DbG9j
a3dpc2Ugb3V0c2lkZSByZWN0IChmaWxsKS4KKyAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBD
R1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgaW5u
ZXJIb2xlLnAxKCkueCgpLCBpbm5lckhvbGUucDEoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVU
b1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMigpLngoKSwgaW5uZXJIb2xlLnAyKCkueSgpKTsK
KyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDMoKS54KCksIGlu
bmVySG9sZS5wMygpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5u
ZXJIb2xlLnA0KCkueCgpLCBpbm5lckhvbGUucDQoKS55KCkpOworICAgIENHUGF0aE1vdmVUb1Bv
aW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKKyAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVy
UXVhZC5wNCgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJR
dWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAg
ICBsYXllci5wYXRoID0gcGF0aDsKKyAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOworfQorCitzdGF0
aWMgdm9pZCBsYXllclBhdGgoQ0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRRdWFkJiBvdXRlclF1YWQpCit7CisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRo
Q3JlYXRlTXV0YWJsZSgpOworICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVh
ZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2lu
dChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7CisgICAg
Q0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1
YWQucDMoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVh
ZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAgICBsYXllci5wYXRoID0gcGF0aDsK
KyAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOworfQorCistICh2b2lkKV9sYXlvdXRGb3JOb2RlSGln
aGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodCBvZmZzZXQ6KHVuc2ln
bmVkKW9mZnNldAoreworICAgIEFTU0VSVChbX2xheWVycyBjb3VudF0gPj0gb2Zmc2V0ICsgNCk7
CisgICAgQVNTRVJUKGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPj0gb2Zmc2V0ICsgNCk7CisgICAg
aWYgKFtfbGF5ZXJzIGNvdW50XSA8IG9mZnNldCArIDQgfHwgaGlnaGxpZ2h0LnF1YWRzLnNpemUo
KSA8IG9mZnNldCArIDQpCisgICAgICAgIHJldHVybjsKKworICAgIENBU2hhcGVMYXllciAqbWFy
Z2luTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldF07CisgICAgQ0FTaGFwZUxh
eWVyICpib3JkZXJMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgMV07Cisg
ICAgQ0FTaGFwZUxheWVyICpwYWRkaW5nTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9m
ZnNldCArIDJdOworICAgIENBU2hhcGVMYXllciAqY29udGVudExheWVyID0gW19sYXllcnMgb2Jq
ZWN0QXRJbmRleDpvZmZzZXQgKyAzXTsKKworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBtYXJnaW5R
dWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldF07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIGJv
cmRlclF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMV07CisgICAgV2ViQ29yZTo6Rmxv
YXRRdWFkIHBhZGRpbmdRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDJdOworICAgIFdl
YkNvcmU6OkZsb2F0UXVhZCBjb250ZW50UXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAz
XTsKKworICAgIG1hcmdpbkxheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0
Lm1hcmdpbkNvbG9yKTsKKyAgICBib3JkZXJMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9y
KGhpZ2hsaWdodC5ib3JkZXJDb2xvcik7CisgICAgcGFkZGluZ0xheWVyLmZpbGxDb2xvciA9IGNh
Y2hlZENHQ29sb3IoaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7CisgICAgY29udGVudExheWVyLmZp
bGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7CisKKyAgICBs
YXllclBhdGhXaXRoSG9sZShtYXJnaW5MYXllciwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCk7Cisg
ICAgbGF5ZXJQYXRoV2l0aEhvbGUoYm9yZGVyTGF5ZXIsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFk
KTsKKyAgICBsYXllclBhdGhXaXRoSG9sZShwYWRkaW5nTGF5ZXIsIHBhZGRpbmdRdWFkLCBjb250
ZW50UXVhZCk7CisgICAgbGF5ZXJQYXRoKGNvbnRlbnRMYXllciwgY29udGVudFF1YWQpOworfQor
CistICh2b2lkKV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGln
aGxpZ2h0JiloaWdobGlnaHQKK3sKKyAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5zaXplKCkpIHsK
KyAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBub2RlQ291bnQgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgpIC8gNDsK
KyAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3VudCAqIDRdOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9y
Tm9kZUhpZ2hsaWdodDpoaWdobGlnaHQgb2Zmc2V0OmkgKiA0XTsKK30KKworLSAodm9pZClfbGF5
b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0
Cit7CisgICAgTlNVSW50ZWdlciBudW1MYXllcnMgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgpOwor
ICAgIGlmICghbnVtTGF5ZXJzKSB7CisgICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW3NlbGYgX2NyZWF0ZUxheWVyczpudW1MYXll
cnNdOworCisgICAgQ0dDb2xvclJlZiBjb250ZW50Q29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hs
aWdodC5jb250ZW50Q29sb3IpOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxh
eWVyczsgKytpKSB7CisgICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbX2xheWVycyBvYmpl
Y3RBdEluZGV4OmldOworICAgICAgICBsYXllci5maWxsQ29sb3IgPSBjb250ZW50Q29sb3I7Cisg
ICAgICAgIGxheWVyUGF0aChsYXllciwgaGlnaGxpZ2h0LnF1YWRzW2ldKTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAorewor
ICAgIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpOb2RlIHx8
IGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGVMaXN0KQorICAg
ICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6aGlnaGxpZ2h0XTsKKyAgICBl
bHNlIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpSZWN0cykK
KyAgICAgICAgW3NlbGYgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0OmhpZ2hsaWdodF07Cit9CisK
K0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdl
c3R1cmVSZWNvZ25pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmNmYmE2OTVlNmJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCkBA
IC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwor
I2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplci5oPgorCitAaW50ZXJmYWNlIFdLSW5z
cGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2duaXplcgor
LSAoQ0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldzsKK0BlbmQKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDY3ZmU3YmNjZGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9z
L1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9y
Tm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorCisjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyU3ViY2xhc3MuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyIHsKKyAgICBSZXRhaW5QdHI8VUlUb3VjaD4gX3RvdWNoOwor
fQorCistIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Cit7CisgICAgcmV0
dXJuIFtfdG91Y2ggbG9jYXRpb25JblZpZXc6dmlld107Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NU
b3VjaGVzOihOU1NldCAqKXRvdWNoZXMgc3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlu
ZXdTdGF0ZQoreworICAgIEFTU0VSVChfdG91Y2gpOworICAgIGlmIChbdG91Y2hlcyBjb250YWlu
c09iamVjdDpfdG91Y2guZ2V0KCldKQorICAgICAgICBzZWxmLnN0YXRlID0gbmV3U3RhdGU7Cit9
CisKKy0gKHZvaWQpdG91Y2hlc0JlZ2FuOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2
ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoc2VsZi5zdGF0ZSAhPSBVSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGVQb3NzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFfdG91Y2gpOwor
ICAgIF90b3VjaCA9IFt0b3VjaGVzIGFueU9iamVjdF07CisKKyAgICBbc2VsZiBfcHJvY2Vzc1Rv
dWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbl07Cit9CisK
Ky0gKHZvaWQpdG91Y2hlc01vdmVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50
ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkXTsKK30KKworLSAodm9pZCl0b3VjaGVzRW5kZWQ6
KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIFtzZWxm
IF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVu
ZGVkXTsKK30KKworLSAodm9pZCl0b3VjaGVzQ2FuY2VsbGVkOihOU1NldCAqKXRvdWNoZXMgd2l0
aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91
Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWRdOworfQorCistICh2
b2lkKXJlc2V0Cit7CisgICAgX3RvdWNoID0gbmlsOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9t
YWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjRhYmRlYjVmNmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5t
bQpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdl
cy5oIgorI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkFjdGlvbi5oIgorI2ltcG9ydCAiV0tO
YXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1w
b3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlm
aWNhdGVQYW5lbC5oPgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZp
ZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9CYXNlNjQuaD4KKworQGludGVyZmFjZSBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2Jq
Q0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckRlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSog
X2luc3BlY3RvclByb3h5OworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclBy
b3h5OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9i
akNBZGFwdGVyCisKKy0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3Np
dGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAg
ICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5z
cGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0
UmVjdCgpLndpZHRoKCksIDApOworICAgIHJldHVybiByZWN0OworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3Bl
Y3RvclByb3h5OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAq
KWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZy
b21DcmFzaCgpOworfQorCistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9y
SXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlcgoreworICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCk7Cit9
CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6d2ViVmlldygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5nZXQoKS53ZWJWaWV3OworfQorCitXZWJQYWdl
UHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpCit7CisgICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6dGhpc10pOworCisgICAgbV9pbnNwZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTpudWxscHRy
XSk7CisgICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVy
LmdldCgpXTsKKworICAgIG1fd2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250
ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0
VHlwZTo6UmVtb3RlKTsKKyAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5n
ZXQoKV07CisgICAgW21fd2luZG93IHNldEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJ
bnNwZWN0b3JXaW5kb3dGcmFtZSJdOworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2lu
ZG93LmdldCgpLmNvbnRlbnRWaWV3OworICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZp
ZXcuYm91bmRzXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOworCisg
ICAgcmV0dXJuIHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAg
IGlmIChtX3dpbmRvdykgeworICAgICAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAg
ICAgICAgW21fd2luZG93IGNsb3NlXTsKKyAgICAgICAgbV93aW5kb3cgPSBuaWw7CisgICAgfQor
CisgICAgaWYgKG1faW5zcGVjdG9yVmlldykgeworICAgICAgICBbbV9pbnNwZWN0b3JWaWV3Lmdl
dCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsKKyAg
ICB9CisKKyAgICBpZiAobV9vYmpDQWRhcHRlcikKKyAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5p
bDsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KCkKK3sKKyAgICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVVc2luZ05hbWU6W21fd2luZG93IGZyYW1l
QXV0b3NhdmVOYW1lXV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6
bmlsXTsKKyAgICBbbV93aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQs
IGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYklu
c3BlY3RvclByb3h5TWFjLgorCisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsK
KyAgICAKKyAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFw
LmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOworICAgIGlmICghcGxhdGZvcm1VUkwpIHsKKyAgICAg
ICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOworICAg
ICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2Fu
IHNhdmUgdG8gdGhlbS4KKyAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KKyAg
ICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKKyAgICBTdHJpbmcgY29u
dGVudENvcHkgPSBjb250ZW50OworCisgICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1
YWxVUkwpIHsKKyAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7CisKKyAgICAgICAgbV9zdWdnZXN0
ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKKworICAg
ICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsK
KyAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZh
bGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUmV0
YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFtk
YXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0
b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwor
CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90
ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgfTsKKworICAgIGlmICghZm9yY2VTYXZl
RGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBh
bmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQ
YXRoQ29tcG9uZW50OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVh
ZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKKyAgICAvLyBjYW4gcHJvdmlkZSBhIGdv
b2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncworICAgIC8v
IGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRo
ZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKKyAgICAgICAgcGFuZWwu
ZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVu
dF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7
CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsK
KyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7CisgICAgfTsKKworICAgIE5TV2luZG93ICp3
aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Cisg
ICAgaWYgKHdpbmRvdykKKyAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3
aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgLy8gRklYTUU6IFNoYXJlIHdp
dGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCisKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0Vt
cHR5KCkpOworICAgIAorICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0
ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5k
IHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBz
YXZlKCkuCisgICAgaWYgKCFhY3R1YWxVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRmls
ZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJM
OmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKKyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmls
ZV07CisgICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddXTsKKyAgICBbaGFuZGxlIGNsb3NlRmlsZV07CisKKyAgICBXZWJQ
YWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOworICAgIGlu
c3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JV
STo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+
d2ViUGFnZUlEKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJlY3Qg
PSByZWN0OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0
V2luZG93RHJhZygpCit7CisgICAgd2ViVmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFi
KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNl
XSBvcGVuVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnVybF1dOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5p
c0VtcHR5KCkpOworCisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNh
dGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKwor
ICAgIEFTU0VSVChtX3dpbmRvdyk7CisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikK
KyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgp
IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0
ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKKyNlbHNlCisg
ICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBt
b2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIg
Y2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4o
KSBzaG93R3JvdXA6WUVTXTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBh
ZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0
aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5kLgorICAgIFNGQ2VydGlmaWNhdGVW
aWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXdd
OworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107CisgICAgW2NlcnRp
ZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNl
dERpc3BsYXlEZXRhaWxzOllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlz
Y2xvc2VkOllFU107Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
S0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjA4YmQwOGZmOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQv
V0tGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KKworI2lmIFBMQVRGT1JN
KE1BQykKKworT0JKQ19DTEFTUyBXS1dlYlZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViUGFnZVByb3h5OworfQorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckRlbGVnYXRlOworCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNlIFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFr
KSBpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQ
YWdlUHJveHk+KWluc3BlY3RlZFBhZ2U7CisKKysgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmll
dzooTlNWaWV3ICopdmlldzsKKworQGVuZAorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClpbnNwZWN0b3JW
aWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9s
bGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlcjsKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92
ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdzsKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5MjYzZTBmZDZlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgi
CisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKKyNpbXBv
cnQgIlZlcnNpb25DaGVja3MuaCIKKyNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCisjaW1wb3J0ICJX
S0luc3BlY3RvcldLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCisj
aW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzLmgiCisjaW1wb3J0ICJXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tQ
cm9jZXNzUG9vbEludGVybmFsLmgiCisjaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCisj
aW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJW
aWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIldl
Ykluc3BlY3RvclV0aWxpdGllcy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0
IDx3dGYvV2Vha09iakNQdHIuaD4KKworQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyICgpIDxXS1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS0luc3BlY3RvcldL
V2ViVmlld0RlbGVnYXRlPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB7CisgICAgTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9pbnNwZWN0
ZWRQYWdlOworICAgIFJldGFpblB0cjxXS0luc3BlY3RvcldLV2ViVmlldz4gX3dlYlZpZXc7Cisg
ICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4+IF9k
ZWxlZ2F0ZTsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFr
ZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBhZ2UKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIFRoZSAo
bG9jYWwpIGluc3BlY3RlZCBwYWdlIGlzIG5pbCBpZiB0aGUgY29udHJvbGxlciBpcyBob3N0aW5n
IGEgUmVtb3RlIFdlYiBJbnNwZWN0b3Igdmlldy4KKyAgICBfaW5zcGVjdGVkUGFnZSA9IGluc3Bl
Y3RlZFBhZ2U7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgaWYgKF93ZWJWaWV3KSB7CisgICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5pbF07
CisgICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmlsXTsKKyAgICAgICAg
W193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOm5pbF07CisgICAgICAgIF93
ZWJWaWV3ID0gbmlsOworICAgIH0KKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQg
PFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1
cm4gX2RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQorCistIChXS1dlYlZpZXcgKil3ZWJW
aWV3Cit7CisgICAgLy8gQ29uc3RydWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQgdGhl
IGRlbGVnYXRlIGJlZm9yZSB0aGUgV2ViVmlldyBpcyBjcmVhdGVkLgorICAgIGlmICghX3dlYlZp
ZXcpIHsKKyAgICAgICAgTlNSZWN0IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2Vi
S2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsKKyAgICAgICAgX3dlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlh
bEZyYW1lIGNvbmZpZ3VyYXRpb246W3NlbGYgY29uZmlndXJhdGlvbl1dKTsKKyAgICAgICAgW193
ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0
aW9uRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW193ZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRq
dXN0c0NvbnRlbnRJbnNldHM6Tk9dOworICAgICAgICBbX3dlYlZpZXcgX3NldFVzZVN5c3RlbUFw
cGVhcmFuY2U6WUVTXTsKKyAgICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNW
aWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07CisgICAgfQorCisgICAgcmV0
dXJuIF93ZWJWaWV3LmdldCgpOworfQorCistICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9
IGRlbGVnYXRlOworfQorCistIChXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlv
bgoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CisKKyAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9
IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXM7CisgICAgcHJlZmVyZW5jZXMuX2FsbG93
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IFlFUzsKKyAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxs
b3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKKyAgICBwcmVmZXJlbmNlcy5fc3Rv
cmFnZUJsb2NraW5nUG9saWN5ID0gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QWxsb3dBbGw7Cisg
ICAgcHJlZmVyZW5jZXMuX2phdmFTY3JpcHRSdW50aW1lRmxhZ3MgPSAwOworCisjaWZuZGVmIE5E
RUJVRworICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3Rv
ciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJl
bmNlcy5fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IFlFUzsKKyAgICBwcmVmZXJlbmNlcy5fbG9n
c1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQgPSBZRVM7CisjZW5kaWYKKworICAg
IHByZWZlcmVuY2VzLl9kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQgPSBZRVM7CisKKyAgICBpZiAo
ISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGlu
c3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KV0pIHsKKyAgICAgICAg
aWYgKFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVz
dDpzZWxmXSkgeworICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2hpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdFbmFibGVkID0gTk87CisgICAgICAgICAgICBwcmVmZXJlbmNlcy5fcGFnZVZpc2li
aWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQgPSBOTzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFtjb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29sOndyYXBwZXIoV2ViS2l0Ojpp
bnNwZWN0b3JQcm9jZXNzUG9vbChXZWJLaXQ6Omluc3BlY3RvckxldmVsRm9yUGFnZShfaW5zcGVj
dGVkUGFnZSkpKV07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEdyb3VwSWRlbnRpZmllcjpXZWJL
aXQ6Omluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKV07
CisKKyAgICByZXR1cm4gY29uZmlndXJhdGlvbi5hdXRvcmVsZWFzZSgpOworfQorCisrIChCT09M
KXZpZXdJc0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW3Zp
ZXcgaXNLaW5kT2ZDbGFzczpbV0tJbnNwZWN0b3JXS1dlYlZpZXcgY2xhc3NdXTsKK30KKworLy8g
TUFSSzogV0tVSURlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
Q0dSZWN0KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2lu
ZG93KQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDR1JlY3RaZXJvKTsKKyAgICBlbHNlCisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TUmVjdFRvQ0dSZWN0KFt3ZWJWaWV3IGZyYW1lXSkp
OworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNldFdpbmRvd0Zy
YW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgW193ZWJWaWV3LmdldCgpLndpbmRvdyBzZXRGcmFtZTpOU1Jl
Y3RGcm9tQ0dSZWN0KGZyYW1lKSBkaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczooV0tPcGVuUGFu
ZWxQYXJhbWV0ZXJzICopcGFyYW1ldGVycyBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAq
KWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVVJMICo+ICpVUkxz
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBbTlNP
cGVuUGFuZWwgb3BlblBhbmVsXTsKKyAgICBvcGVuUGFuZWwuYWxsb3dzTXVsdGlwbGVTZWxlY3Rp
b24gPSBwYXJhbWV0ZXJzLmFsbG93c011bHRpcGxlU2VsZWN0aW9uOworCisgICAgYXV0byByZXBv
cnRTZWxlY3RlZEZpbGVzID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1
bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihv
cGVuUGFuZWwuVVJMcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG5pbCk7CisgICAgfTsKKworICAgIGlmIChfd2ViVmlldy5nZXQoKS53aW5kb3cpCisgICAg
ICAgIFtvcGVuUGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93Ol93ZWJWaWV3LmdldCgpLndp
bmRvdyBjb21wbGV0aW9uSGFuZGxlcjpyZXBvcnRTZWxlY3RlZEZpbGVzXTsKKyAgICBlbHNlCisg
ICAgICAgIHJlcG9ydFNlbGVjdGVkRmlsZXMoW29wZW5QYW5lbCBydW5Nb2RhbF0pOworfQorCist
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFG
b3JTZWN1cml0eU9yaWdpbjooV0tTZWN1cml0eU9yaWdpbiAqKXNlY3VyaXR5T3JpZ2luIGN1cnJl
bnRRdW90YToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNh
Z2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNl
VXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50VXNhZ2UgZXhwZWN0ZWRVc2FnZToodW5z
aWduZWQgbG9uZyBsb25nKWV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKSh1
bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIGRlY2lz
aW9uSGFuZGxlcihzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1
cnJlbnRVc2FnZSAqIDEuMjUpKTsKK30KKworLSAoTlNNZW51ICopX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgY29udGV4dE1lbnU6KE5TTWVudSAqKW1lbnUgZm9yRWxlbWVudDooX1dLQ29u
dGV4dE1lbnVFbGVtZW50SW5mbyAqKWVsZW1lbnQKK3sKKyAgICBmb3IgKE5TSW50ZWdlciBpID0g
bWVudS5udW1iZXJPZkl0ZW1zIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTlNNZW51SXRl
bSAqaXRlbSA9IFttZW51IGl0ZW1BdEluZGV4OmldOworICAgICAgICBzd2l0Y2ggKGl0ZW0udGFn
KSB7CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRv
dzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRv
dzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRv
dzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRv
dzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBi
b2FyZDoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBi
b2FyZDoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rp
c2s6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlz
azoKKyAgICAgICAgICAgIFttZW51IHJlbW92ZUl0ZW1BdEluZGV4OmldOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWVudTsKK30KKworLy8gTUFS
SzogV0tOYXZpZ2F0aW9uRGVsZWdhdGUgbWV0aG9kcworCistICh2b2lkKXdlYlZpZXdXZWJDb250
ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZTooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICgh
IV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDopXSkKKyAgICAgICAgW19kZWxl
Z2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOnNlbGZdOworfQor
CistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNp
c2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25I
YW5kbGVyCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdo
ZXJlLgorICAgIGlmICghbmF2aWdhdGlvbkFjdGlvbi50YXJnZXRGcmFtZS5pc01haW5GcmFtZSkg
eworICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUg
bWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBpZiAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6
aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMKSkg
eworICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVs
c2UuCisgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7
CisgICAgCisgICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2Uu
CisgICAgaWYgKF9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBfaW5zcGVjdGVkUGFnZS0+bG9hZFJl
cXVlc3QobmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0KTsKK30KKworLy8gTUFSSzogV0tJbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3
UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6UmVs
b2FkT3B0aW9uPiByZWxvYWRPcHRpb25zOworICAgIGlmIChXZWJLaXQ6OmxpbmtlZE9uT3JBZnRl
cihXZWJLaXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aEV4cGlyZWRPbmx5UmVsb2FkQmVoYXZpb3Ip
KQorICAgICAgICByZWxvYWRPcHRpb25zLmFkZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGly
ZWRPbmx5KTsKKworICAgIF9pbnNwZWN0ZWRQYWdlLT5yZWxvYWQocmVsb2FkT3B0aW9ucyk7Cit9
CisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0
b3JXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX2luc3BlY3RlZFBhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRP
cHRpb246OkZyb21PcmlnaW4pOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJ
bnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICop
bmV3V2luZG93Cit7CisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjp3aWxsTW92ZVRvV2lu
ZG93OildKQorICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyOnNlbGYg
d2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2Vi
Vmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Cit7Cisg
ICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzopXSkKKyAgICAgICAg
W19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzpzZWxmXTsK
K30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmll
dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNTdlNzdjZmU3Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMv
V0tJbnNwZWN0b3JXS1dlYlZpZXcuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKworI2lmIFBMQVRGT1JN
KE1BQykKKworQHByb3RvY29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7CisKK0BpbnRl
cmZhY2UgV0tJbnNwZWN0b3JXS1dlYlZpZXcgOiBXS1dlYlZpZXcKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4gaW5zcGVjdG9yV0tX
ZWJWaWV3RGVsZWdhdGU7CitAZW5kCisKK0Bwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmlld0Rl
bGVnYXRlCitAcmVxdWlyZWQKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0lu
c3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1Jl
bG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKKy0gKHZvaWQp
aW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2lsbE1v
dmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7CistICh2b2lkKWluc3BlY3RvcldLV2Vi
Vmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OworQGVu
ZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiZmVmNGEwMWJhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3Bl
Y3RvcldLV2ViVmlldy5tbQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmlldy5oIgorCisjaWYgUExBVEZP
Uk0oTUFDKQorCisjaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQgPHd0
Zi9XZWFrT2JqQ1B0ci5oPgorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JXS1dlYlZpZXcg
eworICAgIFdlYWtPYmpDUHRyPGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPj4gX2lu
c3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOworfQorCistIChOU1JlY3QpX29wYXF1ZVJlY3RGb3JX
aW5kb3dNb3ZlV2hlbkluVGl0bGViYXIKK3sKKyAgICAvLyBUaGlzIGNvbnZpbmNlcyBBcHBLaXQg
dG8gYWxsb3cgd2luZG93IG1vdmVzIHdoZW4gY2xpY2tpbmcgYW55d2hlcmUgaW4gdGhlIHRpdGxl
YmFyICh0b3AgMjJwdCkKKyAgICAvLyB3aGVuIHRoaXMgdmlldydzIGNvbnRlbnRzIGNvdmVyIHRo
ZSBlbnRpcmUgd2luZG93J3MgY29udGVudHMsIGluY2x1ZGluZyB0aGUgdGl0bGViYXIuCisgICAg
cmV0dXJuIE5TWmVyb1JlY3Q7Cit9CisKKy0gKE5TSW50ZWdlcil0YWcKK3sKKyAgICByZXR1cm4g
V0tJbnNwZWN0b3JWaWV3VGFnOworfQorCistIChpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZT4paW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2luc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKXNldElu
c3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZT4pZGVsZWdhdGUKK3sKKyAgICBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKK30KKworLSAoSUJBY3Rpb24pcmVsb2FkOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZi5pbnNw
ZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6c2VsZl07Cit9
CisKKy0gKElCQWN0aW9uKXJlbG9hZEZyb21PcmlnaW46KGlkKXNlbmRlcgoreworICAgIFtzZWxm
Lmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21P
cmlnaW46c2VsZl07Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93
ICopbmV3V2luZG93Cit7CisgICAgW3N1cGVyIHZpZXdXaWxsTW92ZVRvV2luZG93Om5ld1dpbmRv
d107CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJW
aWV3OnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOworfQorCistICh2b2lkKXZpZXdE
aWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1dpbmRvd107CisgICAg
W3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92
ZVRvV2luZG93OnNlbGZdOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlN
YWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiZTcyOGQ0MzVj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21h
Yy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpAQCAtMCwwICsxLDgwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgor
CisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIK
KyNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSW5z
cGVjdG9yVUlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0
ICJfV0tJbnNwZWN0b3JXaW5kb3cuaCIKKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2Vy
dGlmaWNhdGVQYW5lbC5oPgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0
ZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3N0YXRp
YyBjb25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0
bGVkIHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9zYWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0
dXJpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFza1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNr
RnVsbFNpemVDb250ZW50VmlldzsKKworLy8gVGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBh
bGl2ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQgaXRzIHByb2Nlc3MuCisvLyBSZXVzaW5nIHRoZSBX
ZWJWaWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRpbWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5k
IG91dCBvZiB0aGUgSW5zcGVjdG9yLgorc3RhdGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3Nl
VGltZW91dCB7IDFfbWluIH07CisKK3N0YXRpYyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9i
c2VydmVyQ29udGV4dCA9ICZrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dDsKKwor
QGludGVyZmFjZSBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVs
ZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkq
KWluc3BlY3RvclByb3h5OworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgeworICAgIFdlYktpdDo6V2Vi
SW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKK30KKworLSAoV0tJbnNwZWN0b3JSZWYp
aW5zcGVjdG9yUmVmCit7CisgICAgcmV0dXJuIHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Cit9CisK
Ky0gKF9XS0luc3BlY3RvciAqKWluc3BlY3RvcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
CisgICAgICAgIHJldHVybiB3cmFwcGVyKCpfaW5zcGVjdG9yUHJveHkpOworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJL
aXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQoreworICAgIEFTU0VSVF9BUkco
aW5zcGVjdG9yUHJveHksIGluc3BlY3RvclByb3h5KTsKKworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gVW5yZXRhaW5lZCB0byBh
dm9pZCBhIHJlZmVyZW5jZSBjeWNsZS4KKyAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQ
cm94eTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAg
ICBfaW5zcGVjdG9yUHJveHkgPSBudWxscHRyOworfQorCistIChOU1JlY3Qpd2luZG93OihOU1dp
bmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1Jl
Y3Q6KE5TUmVjdClyZWN0Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0
dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwg
X2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKKyAgICByZXR1cm4gcmVj
dDsKK30KKworLSAodm9pZCl3aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94
eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOworfQor
CistICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
K3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNs
b3NlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAg
IF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOworfQorCistICh2
b2lkKXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+
d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOworfQorCistICh2b2lkKWluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICAvLyBS
ZXNpemluZyB0aGUgdmlld3Mgd2hpbGUgaW5zaWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFk
IHRvIGJhZCByZXN1bHRzIHdoZW4gZW50ZXJpbmcKKyAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2Ny
ZWVuLiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRl
bGF5LiBXZSBvbmx5CisgICAgLy8gZGVwZW5kIG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVp
Z2h0IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxsIGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0Cisg
ICAgLy8gb2YgdGhlIHRpbWUgdGhlIHZpZXdzIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0
IGZyYW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNpemluZyBtYXNrcy4KKworICAgIGRpc3BhdGNoX2Fm
dGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5p
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClvYnNl
cnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVj
dCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2Ug
Y29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29u
dGVudExheW91dE9ic2VydmVyQ29udGV4dCkgeworICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVl
Rm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6
Y29udGV4dF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1dpbmRvdyAqd2luZG93
ID0gb2JqZWN0OworICAgIEFTU0VSVChbd2luZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNs
YXNzXV0pOworICAgIGlmICh3aW5kb3cuaW5MaXZlUmVzaXplKQorICAgICAgICByZXR1cm47CisK
KyAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7CisgICAgfSk7Cit9
CisKKy8vIE1BUks6IFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCisK
Ky0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNo
KCk7Cit9CisKKy0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVy
VGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVy
Cit7CisgICAgcmV0dXJuIF9pbnNwZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRl
clRlc3QoKSA6IGZhbHNlOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1v
dmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBpZiAoX2luc3BlY3RvclBy
b3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5k
b3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCistICh2b2lk
KWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3Rv
clByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5k
b3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCitAZW5kCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywg
TlNWaWV3ICpuZXdWaWV3KQoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1l
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpvbGRWaWV3XTsKKyAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkg
c2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNW
aWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOworCisgICAgaWYg
KG1faXNBdHRhY2hlZCkKKyAgICAgICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2lu
ZG93ICpvbGRXaW5kb3cpCit7CisgICAgaWYgKG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVj
dCkgeworICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSBmYWxzZTsKKyAg
ICAgICAgW29sZFdpbmRvdyByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktl
eVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9i
c2VydmVyQ29udGV4dF07CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRh
Y2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpCit7CisgICAgaWYgKG1f
aXNBdHRhY2hlZCAmJiAhIW5ld1dpbmRvdykgeworICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVu
dExheW91dFJlY3QgPSB0cnVlOworICAgICAgICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2Jq
Q0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAg
Y29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07CisgICAgICAgIGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIGlmICgh
bV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGxldmVs
ID0gaW5zcGVjdGlvbkxldmVsKCk7CisgICAgaWYgKGxldmVsID4gMSkgeworICAgICAgICBOU1N0
cmluZyAqZGVidWdUaXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJ
TkcoIldlYiBJbnNwZWN0b3IgWyVkXSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0
bGUgd2hlbiBpbnNwZWN0aW5nIFdlYiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1f
dXJsU3RyaW5nXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0
bGVdOworICAgIH0gZWxzZSB7CisgICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldl
YiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKKyAg
ICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOnRpdGxlXTsKKyAgICB9Cit9CisKK1Jl
dGFpblB0cjxOU1dpbmRvdz4gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93
KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBl
KQoreworICAgIE5TUmVjdCB3aW5kb3dGcmFtZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93
RnJhbWUpID8gc2F2ZWRXaW5kb3dGcmFtZSA6IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRv
d1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0KTsKKyAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMo
W1tfV0tJbnNwZWN0b3JXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJh
bWUgc3R5bGVNYXNrOndpbmRvd1N0eWxlTWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVy
ZWQgZGVmZXI6Tk9dKTsKKyAgICBbd2luZG93IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVt
V2luZG93V2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKKyAgICBbd2luZG93IHNldFJlbGVh
c2VkV2hlbkNsb3NlZDpOT107CisgICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3
aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVs
bFNjcmVlblByaW1hcnkpXTsKKworICAgIGJvb2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlw
ZSA9PSBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlOworICAgIFt3aW5kb3cgc2V0Rm9yUmVt
b3RlVGFyZ2V0OmZvclJlbW90ZVRhcmdldF07CisKKyAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlI
YWxmU2NyZWVuU2l6ZSA9IChbd2luZG93IHNjcmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0g
NDsKKyAgICBDR0Zsb2F0IG1pbmltdW1GdWxsU2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0
Pig2MzYsIGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSk7CisgICAgW3dpbmRvdyBzZXRNaW5G
dWxsU2NyZWVuQ29udGVudFNpemU6TlNNYWtlU2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBt
aW5pbXVtV2luZG93SGVpZ2h0KV07CisgICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6
KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9y
RnVsbFNjcmVlbkFsbG93c1RpbGluZyldOworCisgICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVh
cnNUcmFuc3BhcmVudDpZRVNdOworCisgICAgLy8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNh
dmVkIGZyYW1lIHdhcyBlbXB0eS4KKyAgICBpZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0Zy
YW1lKSkKKyAgICAgICAgW3dpbmRvdyBjZW50ZXJdOworCisgICAgcmV0dXJuIHdpbmRvdzsKK30K
KworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOworICAgIEFTU0VSVCghbV9p
bnNwZWN0b3JQYWdlKTsKKworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVy
LnN0b3AoKTsKKworICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7CisgICAgICAg
IEFTU0VSVChtX29iakNBZGFwdGVyKTsKKyAgICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKKyAgICB9CisKKyAgICBtX29iakNBZGFw
dGVyID0gYWRvcHROUyhbW1dLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5p
dFdpdGhXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3
ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRl
ci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikg
bmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmll
d107CisKKyAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1dLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQ
YWdlKCldKTsKKyAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0
ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIFdlYlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFn
ZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKKyAg
ICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygp
Cit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7CisKKyAgICBOU1N0cmluZyAqc2F2
ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVy
ZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworICAgIE5TUmVjdCBzYXZlZFdpbmRvd0Zy
YW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nKTsKKworICAgIG1f
aW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93
KHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlOjpMb2NhbCk7CisgICAgW21f
aW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAg
V0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld107CisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250
ZW50Vmlld107CisgICAgaW5zcGVjdG9yVmlldy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNd
OworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXddOworCisgICAgdXBk
YXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2lu
c3BlY3RvcldpbmRvdyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgewor
ICAgICAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxd
OworICAgICAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gbmlsOworICAgIH0KKworICAg
IGlmIChtX29iakNBZGFwdGVyKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICAg
ICAgW21fb2JqQ0FkYXB0ZXIgaW52YWxpZGF0ZV07CisgICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBu
aWw7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0
ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3Bl
Y3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cg
Y2xvc2VdOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBt
X2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Ns
b3NlVGltZW91dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xv
c2VGb3JDcmFzaCgpCit7CisgICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIu
c3RvcCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIGlmIChtX2lz
QXR0YWNoZWQpIHsKKyAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9pbnNwZWN0
b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNs
b3NlXTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIGluc3BlY3Rl
ZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dG
cmFtZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpCit7CisgICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBz
YW1lIHdpbmRvdyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcsCisgICAgLy8gdGhlbiB3ZSBuZWVkIHRv
IHJlb3BlbiB0aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2lu
ZG93LgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhl
ciB3aW5kb3cgaW4gU2FmYXJpLgorICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZv
cm1XaW5kb3coKSkgeworICAgICAgICBvcGVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJy
aW5nIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2lu
ZG93LgorICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFr
ZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKKyAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2ViVmlld10ud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XV07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZv
cm1XaW5kb3coKSBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOworfQorCitib29sIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJv
YmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91
bmQgdGFiIGluIFNhZmFyaSwgb25seSBhIGJhY2tncm91bmQgd2luZG93LgorICAgIHJldHVybiBt
X2lzVmlzaWJsZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cu
aXNNYWluV2luZG93OworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0
dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRW
aWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIGlm
IChbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3Bl
Y3RlZFZpZXddKQorICAgICAgICByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKKworICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKKyAgICBzdGF0
aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7CisKKyAgICBOU1JlY3Qg
aW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKKworICAgIGZsb2F0IG1h
eGltdW1BdHRhY2hlZEhlaWdodCA9IE5TSGVpZ2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhp
bXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKKyAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0
IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dp
ZHRoKGluc3BlY3RlZFZpZXdGcmFtZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKK3sKKyAgICAv
LyBEbyBub3RoaW5nLgorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgbV91cmxTdHJp
bmcgPSB1cmxTdHJpbmc7CisKKyAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBD
ZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmlj
YXRlSW5mby5pc0VtcHR5KCkpOworCisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4g
Y2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGlu
aXRdKTsKKworICAgIE5TV2luZG93ICp3aW5kb3c7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KQorICAgICAgICB3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsKKyAgICBlbHNlCisg
ICAgICAgIHdpbmRvdyA9IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5k
b3ddOworCisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5k
b3ddOworCisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNh
dGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRF
bmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZv
LnRydXN0KCkgc2hvd0dyb3VwOllFU107CisjZWxzZQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJl
Z2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9y
Ok5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZp
Y2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAg
ICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBk
aXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9y
ZWhhbmQuCisgICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZp
Y2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNw
bGF5VHJ1c3Q6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9d
OworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFs
b2cpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBO
U1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0
ZWRVUkwpLmdldCgpOworICAgIGlmICghcGxhdGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1V
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUg
dXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhl
bS4KKyAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNT
RVJUKHBsYXRmb3JtVVJMKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3Vn
Z2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBj
b250ZW50OworCisgICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAg
ICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgeworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGlu
ZykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91
dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3
cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVT
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1f
aW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpE
aWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQ
YWdlSUQoKSk7CisgICAgfTsKKworICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAg
IHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBO
U1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5u
YW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisg
ICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxl
IHRvIGEgcGF0aCBhbmQKKyAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNo
b3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3Ig
Zm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYg
KHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3Bs
YXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNv
bXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1
bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJM
KHBhbmVsLlVSTCk7CisgICAgfTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3Rv
cldpbmRvdyA/IG1faW5zcGVjdG9yV2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Cisg
ICAgaWYgKHdpbmRvdykKKyAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3
aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNF
bXB0eSgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2Vz
dGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gRG8gbm90IGFwcGVu
ZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4g
c2F2ZSgpLgorICAgIGlmICghYWN0dWFsVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0Zp
bGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VS
TDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07CisgICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZp
bGVdOworICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgW2hhbmRsZSBjbG9zZUZpbGVdOworCisgICAgbV9p
bnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRp
ZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2Vi
UGFnZUlEKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENo
YW5nZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOworICAgIEFTU0VSVChtX2lzVmlz
aWJsZSk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2lzQXR0
YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9p
bnNwZWN0b3JXaW5kb3cgZnJhbWVdKTsKKyAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgp
LnByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKK3sK
KyAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7CisgICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKKyAg
ICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCB8fCAh
bV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgp
KSk7ICAgIAorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVE
aWRDaGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uKQoreworICAgIGlmICghbV9pc1Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pc0F0dGFjaGVkKSB7CisgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBhdHRhY2ggYXZhaWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8g
ZG8gdGhpcyBoZXJlIGluIGNhc2UKKyAgICAgICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBu
b3QgdGhlIFdLVmlldy4KKyAgICAgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9y
bUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFpbnNwZWN0ZWRQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVmlldyAqaW5z
cGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsK
KyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3ZWJWaWV3XTsKKworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRW
aWV3LmZyYW1lOworICAgIE5TUmVjdCBvbGRJbnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JW
aWV3LmZyYW1lOworICAgIE5TUmVjdCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0
OworICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3Vu
ZHM7CisgICAgQ0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdG
cmFtZSk7CisKKyAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBjYXNlIEF0dGFj
aG1lbnRTaWRlOjpCb3R0b206IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAg
ICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFt
ZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3Vu
ZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVu
c2lvbiwgcGFyZW50SGVpZ2h0KTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0
aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3Jr
LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3Rvckhl
aWdodCwgTlNXaWR0aChwYXJlbnRCb3VuZHMpLCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9y
SGVpZ2h0KTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAw
LCBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSksIGluc3BlY3RvckhlaWdodCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7CisgICAg
ICAgIGlmICghY3VycmVudERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24g
PSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJl
bnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0
b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNo
ZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7CisKKyAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFu
bmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0CisgICAgICAgIC8v
IHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9u
bHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KKyAgICAgICAgaW5zcGVj
dGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3Rvcldp
ZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0g
TlNNYWtlUmVjdChwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0
aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7CisKKyAgICAgICAgaWYgKE5TV2luZG93ICppbnNw
ZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgeworICAgICAgICAgICAgTlNSZWN0
IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0
Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOworICAgICAg
ICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6IHsKKyAgICAgICAg
aWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5T
V2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudFdp
ZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3Rvcldp
ZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdp
bmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsKKworICAgICAgICAvLyBQ
cmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJz
IGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gdG9w
IHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBz
dHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgorICAgICAgICBpbnNwZWN0ZWRW
aWV3RnJhbWUgPSBOU01ha2VSZWN0KGluc3BlY3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGlu
c3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmll
d0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50
Qm91bmRzKSk7CisKKyAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNw
ZWN0b3JWaWV3LndpbmRvdykgeworICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0
ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5j
b250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOworICAgICAgICAgICAgbmV3SW5zcGVjdG9y
Vmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29u
dGVudExheW91dFJlY3QpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisKKyAgICBpZiAoTlNFcXVhbFJlY3RzKG9sZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVj
dG9yVmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVjdHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNw
ZWN0ZWRWaWV3RnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEaXNhYmxlIHNjcmVl
biB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBp
biBzeW5jLgorICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1Vu
dGlsRmx1c2hdOworCisgICAgW2luc3BlY3RvclZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmll
d0ZyYW1lXTsKKyAgICBbaW5zcGVjdGVkVmlldyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVd
OworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5k
b3dIZWlnaHQoKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2Uo
KS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1Jl
Y3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdodCk7Cit9CisKK3Vuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBOU1Zp
ZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRW
aWV3KCk7CisgICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJh
bWVdOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Qu
c2l6ZS53aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNo
KCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3Bl
Y3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisKKyAgICBpZiAobV9pbnNwZWN0b3JX
aW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Cisg
ICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAgICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gbmlsOworICAgIH0KKworICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZp
ZXddOworCisgICAgQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uOworICAgIHN3aXRjaCAobV9hdHRh
Y2htZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAgICAgICAg
W2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBO
U1ZpZXdNYXhZTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICBbaW5zcGVjdG9yVmll
dyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFy
Z2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6
aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbl07CisgICAgICAg
IGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JB
dHRhY2hlZFdpZHRoKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGluc3BlY3RlZFZp
ZXdGcmFtZURpZENoYW5nZShjdXJyZW50RGltZW5zaW9uKTsKKworICAgIFtpbnNwZWN0ZWRWaWV3
LnN1cGVydmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0Jl
bG93IHJlbGF0aXZlVG86aW5zcGVjdGVkVmlld107CisgICAgW2luc3BlY3RvclZpZXcud2luZG93
IG1ha2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3XTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9
IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dlYlZp
ZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsK
KworICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW2luc3Bl
Y3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdI
ZWlnaHRTaXphYmxlXTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3Bl
Y3RlZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhl
IHNwYWNlIHRoYXQgdGhlCisgICAgLy8gYXR0YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNl
cnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4g
U2FmYXJpIHN0aWxsIHdvcmsuCisKKyAgICBpbnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVj
dCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShp
bnNwZWN0ZWRWaWV3LmZyYW1lKSk7CisKKyAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5v
dCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRh
Y2hlZAorICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVj
dG9yIHdpbmRvdy4KKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVp
Z2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJlY3QgPSByZWN0OworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsK
K30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAg
ICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29t
LmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6QCJNYWluIiBvZlR5cGU6QCJodG1sIl07CisgICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5n
dGgpOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVT
dHJpbmc7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VV
UkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50
aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0
Lmh0bWwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCisgICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxl
IHBhdGhGb3JSZXNvdXJjZTpAIlRlc3QiIG9mVHlwZTpAImh0bWwiXTsKKyAgICBpZiAoIXBhdGgp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQoreworICAgIE5TQnVuZGxlICpi
dW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5z
cGVjdG9yVUkiXTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgTlNTdHJpbmcgKnBhdGggPSBidW5kbGUucmVzb3VyY2VQYXRoOworICAgIEFTU0VSVChw
YXRoICYmIHBhdGgubGVuZ3RoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnBhdGggaXNEaXJlY3Rvcnk6WUVTXS5hYnNvbHV0ZVN0cmluZzsKK30KKworc3RhdGljIE5TRGlj
dGlvbmFyeSAqc3lzdGVtVmVyc2lvblBsaXN0KCkKK3sKKyAgICBOU1N0cmluZyAqc3lzdGVtTGli
cmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5
RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKKyAg
ICBOU1N0cmluZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lv
bi5wbGlzdCJdOworICAgIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0
aF07CisgICAgcmV0dXJuIHN5c3RlbVZlcnNpb25JbmZvOworfQorCitEZWJ1Z2dhYmxlSW5mb0Rh
dGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIE5T
RGljdGlvbmFyeSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9uUGxpc3QoKTsKKworICAgIERlYnVnZ2Fi
bGVJbmZvRGF0YSByZXN1bHQ7CisgICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKyAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1l
ID0gIm1hY09TIl9zOworICAgIHJlc3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlBy
b2R1Y3RCdWlsZFZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBw
bGlzdFtAIlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0SXNT
aW11bGF0b3IgPSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m
YmVlNWNkZmYzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI3NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9y
UHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVjdG9y
UHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25J
RCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlIGRlYnVnZ2FibGVUeXBlKQorICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OmNyZWF0ZSgpKQorICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNs
aWVudCkKKyAgICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCisgICAgICAgICwg
bV90YXJnZXRJRCh0YXJnZXRJRCkKKyAgICAgICAgLCBtX2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2Fi
bGVUeXBlKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0K
KworICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94eSgpCisgICAgeworICAgICAgICBtX3Byb3h5LT5z
ZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9
CisKKyAgICB2b2lkIGxvYWQoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzIwNTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJv
dXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRl
YnVnZ2FibGVJbmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZv
RGF0YTo6ZW1wdHkoKSk7CisgICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlw
ZShtX2RlYnVnZ2FibGVUeXBlKTsKKyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVn
Z2FibGVJbmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOworICAg
IH0KKworICAgIHZvaWQgc2hvdygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7Cisg
ICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3Nh
Z2UpOworICAgIH0KKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwor
ICAgIH0KKworICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQs
IG1fdGFyZ2V0SUQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWY8UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk+IG1fcHJveHk7CisgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3Rv
ckNsaWVudDsKKyAgICBDb25uZWN0aW9uSUQgbV9jb25uZWN0aW9uSUQ7CisgICAgVGFyZ2V0SUQg
bV90YXJnZXRJRDsKKyAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIG1fZGVidWdnYWJsZVR5
cGU7Cit9OworCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChV
UkwgdXJsLCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2Vy
dmVyKG9ic2VydmVyKQoreworICAgIGlmICghdXJsLmhvc3QoKSB8fCAhdXJsLnBvcnQoKSkgewor
ICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgaW5zcGVjdG9yIHVybDogJXMiLCB1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nvbm5l
Y3Rpb25JRCA9IGNvbm5lY3RJbmV0KHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQo
KS52YWx1ZSgpKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbklEKSB7CisgICAgICAgIExPR19FUlJP
UigiSW5zcGVjdG9yIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0byAlcyIsIHVybC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0SW5p
dGlhbENvbW11bmljYXRpb24oKTsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3Rl
SW5zcGVjdG9yQ2xpZW50KCkKK3sKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
bmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOwor
ICAgIGF1dG8gbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKKyAgICBzZW5kKG1fY29ubmVjdGlvbklE
LnZhbHVlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgp
KSwgbWVzc2FnZS5sZW5ndGgoKSk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpkaXNwYXRjaE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPih7CisgICAgICAgIHsgIkJhY2tlbmRDb21tYW5kcyJfcywgc3RhdGljX2Nh
c3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5k
cykgfSwKKyAgICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRs
ZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QpIH0sCisgICAgICAgIHsg
IlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKKyAgICB9KTsKKwor
ICAgIHJldHVybiBkaXNwYXRjaE1hcDsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OnN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKQoreworICAgIGF1dG8gZXZlbnQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJ
bnNwZWN0b3JDbGllbnQiX3MpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC0+dG9K
U09OU3RyaW5nKCkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlv
bkNsb3NlZCgpCit7CisgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgbV9pbnNwZWN0b3JQcm94
eU1hcC5jbGVhcigpOworICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Cisg
ICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpkaWRDbG9zZShDb25uZWN0aW9uSUQpCit7CisgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpc10geworICAgICAgICBjb25uZWN0aW9uQ2xvc2VkKCk7CisgICAgfSk7Cit9
CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0KENvbm5lY3Rpb25JRCBjb25u
ZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRl
YnVnZ2FibGVUeXBlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1h
cC5lbnN1cmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBj
b25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZV0geworICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFy
Z2V0SUQsIGRlYnVnZ2FibGVUeXBlKTsKKyAgICB9KTsKKworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpIHsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0
dXAiX3MpOworICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29u
bmVjdGlvbklEKTsKKyAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFy
Z2V0SUQpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pTT05TdHJp
bmcoKSk7CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9CisKK3Zv
aWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9u
SUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIGF1dG8gYmFja2VuZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRvQmFja2Vu
ZCJfcyk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNv
bm5lY3Rpb25JRCk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywg
dGFyZ2V0SUQpOworICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNz
YWdlKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pTT05TdHJp
bmcoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVu
ZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBh
dXRvIGNsb3NlZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBjbG9zZWRFdmVu
dC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOworICAgIGNsb3Nl
ZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7CisgICAg
Y2xvc2VkRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2Vu
ZFdlYkluc3BlY3RvckV2ZW50KGNsb3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBt
X2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRh
cmdldElEKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29t
bWFuZHMoY29uc3QgRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBl
dmVudC5tZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYmFja2Vu
ZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIs
IGJhc2U2NEVuY29kZShldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKK30KKwordm9pZCBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQoreworICAg
IGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKKyAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJh
eTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgIGZvciAoYXV0
byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgeworICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBpdGVtT2JqZWN0OworICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9i
amVjdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBUYXJnZXQgdGFyZ2V0Owor
ICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQu
aWQpCisgICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJn
ZXQubmFtZSkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywg
dGFyZ2V0LnVybCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUi
X3MsIHRhcmdldC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdl
dExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CisgICAgfQorCisgICAgYXV0byBjb25uZWN0
aW9uSUQgPSBldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKKworICAgIC8vIEZpbmQgY2xvc2Vk
IHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRz
VG9SZW1vdmU7CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlz
KCkpIHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3Ig
KGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaWQg
PT0gcGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWZvdW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7
CisgICAgfQorICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCisgICAg
ICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25J
RCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3Zl
KHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsK
K30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2
ZW50LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQu
Y29ubmVjdGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKKyAgICBpZiAo
IXByb3h5KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdl
LnZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmNTFkNjNkZWEwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZW1vdGVDb250cm9sbGFibGVUYXJnZXQuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJl
bW90ZUluc3BlY3RvckNsaWVudDsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OworCitjbGFz
cyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3Rl
SW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5n
ZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0
aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKK307CisKK3VzaW5nIENvbm5l
Y3Rpb25JRCA9IEluc3BlY3Rvcjo6Q29ubmVjdGlvbklEOwordXNpbmcgVGFyZ2V0SUQgPSBJbnNw
ZWN0b3I6OlRhcmdldElEOworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvckNs
aWVudChVUkwsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJik7CisgICAgflJlbW90ZUluc3BlY3Rv
ckNsaWVudCgpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1cGRhdGUgdGhlIG1lc3NhZ2lu
ZyBwcm90b2NvbCB0byB1c2UgRGVidWdnYWJsZVR5cGUgaW5zdGVhZCBvZiBTdHJpbmcgZm9yIHRo
ZSB0YXJnZXQgdHlwZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA2MDQ3CisgICAgc3RydWN0IFRhcmdldCB7CisgICAgICAgIFRhcmdldElEIGlkOwor
ICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmlu
ZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8
VGFyZ2V0Pj4mIHRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldHM7IH0KKyAgICBjb25z
dCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENv
bW1hbmRzVVJMOyB9CisKKyAgICB2b2lkIGluc3BlY3QoQ29ubmVjdGlvbklELCBUYXJnZXRJRCwg
SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2Vu
ZChDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsb3Nl
RnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQpOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+OworCisgICAg
dm9pZCBzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xv
c2VkKCk7CisKKyAgICB2b2lkIHNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lk
IHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2V0QmFja2Vu
ZENvbW1hbmRzKGNvbnN0IEV2ZW50Jik7CisKKyAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rpb25J
RCkgZmluYWw7CisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAo
KSBmaW5hbDsKKworICAgIHZvaWQgc2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0cmluZyYp
OworCisgICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOworICAgIFJlbW90ZUluc3BlY3Rv
ck9ic2VydmVyJiBtX29ic2VydmVyOworICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jb25u
ZWN0aW9uSUQ7CisgICAgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiBtX3Rh
cmdldHM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Q29ubmVjdGlvbklELCBUYXJnZXRJRD4sIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YmM0NTVkM2U2
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtMCwwICsxLDIwOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkFQSUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRp
b24uaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudFdvcmxkLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0
TWVzc2FnZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBTY3JpcHRNZXNzYWdlQ2xp
ZW50IGZpbmFsIDogcHVibGljIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpDbGllbnQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNjcmlwdE1lc3NhZ2VDbGll
bnQoUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIpCisgICAgICAgIDogbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyKSB7IH0KKworICAgIH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9CisKKyAgICB2
b2lkIGRpZFBvc3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZvRGF0YSYmLCBX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gdG9rZW5zID0gc2VyaWFsaXplZFNjcmlwdFZhbHVl
LnRvU3RyaW5nKCkuc3BsaXQoIjoiKTsKKyAgICAgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBVUkwgcmVxdWVzdFVSTCB7IHsgfSwgcGFn
ZS5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgbV9pbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuaW5zcGVjdChyZXF1ZXN0VVJMLmhvc3RBbmRQb3J0KCksIHRva2Vuc1swXS50b1VJbnRT
dHJpY3QoKSwgdG9rZW5zWzFdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMl0pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1faW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyOworfTsKKworY2xhc3MgTG9hZGVyQ2xpZW50IGZpbmFsIDogcHVibGlj
IEFQSTo6TG9hZGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBMb2FkZXJDbGllbnQoRnVuY3Rpb248dm9pZCgpPiYmIGxvYWRlZENhbGxiYWNrKQor
ICAgICAgICA6IG1fbG9hZGVkQ2FsbGJhY2sgeyBXVEZNb3ZlKGxvYWRlZENhbGxiYWNrKSB9IHsg
fQorCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCop
IGZpbmFsCisgICAgeworICAgICAgICBtX2xvYWRlZENhbGxiYWNrKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9sb2FkZWRDYWxsYmFjazsKK307CisKK3N0YXRp
YyBPcHRpb25hbDxJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlPiBwYXJzZURlYnVnZ2FibGVUeXBl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGRlYnVnZ2FibGVUeXBlU3RyaW5nKQoreworICAgIGlm
IChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAiamF2YXNjcmlwdCJfcykKKyAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OkphdmFTY3JpcHQ7CisgICAgaWYgKGRlYnVnZ2Fi
bGVUeXBlU3RyaW5nID09ICJwYWdlIl9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1
Z2dhYmxlVHlwZTo6UGFnZTsKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInNlcnZp
Y2Utd29ya2VyIl9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6
U2VydmljZVdvcmtlcjsKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gIndlYi1wYWdl
Il9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyOjppbnNwZWN0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rp
b25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUp
Cit7CisgICAgYXV0byBkZWJ1Z2dhYmxlVHlwZSA9IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3Ry
aW5nKHR5cGUpOworICAgIGlmICghZGVidWdnYWJsZVR5cGUpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJVbmtub3duIGRlYnVnZ2FibGUgdHlwZTogXCIlc1wiIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2luc3BlY3RvckNsaWVudCkKKyAg
ICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmluc3BlY3QoY29ubmVjdGlvbklELCB0YXJnZXRJRCwg
ZGVidWdnYWJsZVR5cGUudmFsdWUoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyOjpydW5TY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCit7CisgICAgbV9wYWdl
LnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh7IHNjcmlwdCwgZmFsc2UsIFdURjo6bnVsbG9wdCwg
ZmFsc2UgfSwgCisgICAgICAgIFtdKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgT3B0aW9u
YWw8V2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscz4gZXhjZXB0aW9uRGV0YWlscywgQ2FsbGJhY2tC
YXNlOjpFcnJvcikgeworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpCisgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gcnVubmluZyBzY3JpcHQgXCIlc1wiIiwgZXhj
ZXB0aW9uRGV0YWlscy0+bWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKyAgICB9KTsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90
ZUluc3BlY3RvckNsaWVudCYgY2xpZW50KQoreworICAgIFN0cmluZ0J1aWxkZXIgaHRtbDsKKyAg
ICBpZiAoY2xpZW50LnRhcmdldHMoKS5pc0VtcHR5KCkpCisgICAgICAgIGh0bWwuYXBwZW5kKCI8
cD5ObyB0YXJnZXRzIGZvdW5kPC9wPiJfcyk7CisgICAgZWxzZSB7CisgICAgICAgIGh0bWwuYXBw
ZW5kKCI8dGFibGU+Iik7CisgICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50
LnRhcmdldHMoKS5rZXlzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogY2xp
ZW50LnRhcmdldHMoKS5nZXQoY29ubmVjdGlvbklEKSkgeworICAgICAgICAgICAgICAgIGh0bWwu
YXBwZW5kKG1ha2VTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRyPiIKKyAg
ICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0
bmFtZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVybFwiPiIs
IHRhcmdldC51cmwsICI8L2Rpdj48L3RkPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFz
cz1cImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNs
aWNrPVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdl
KFxcJyIsIGNvbm5lY3Rpb25JRCwgIjoiLCB0YXJnZXQuaWQsICI6IiwgdGFyZ2V0LnR5cGUsICJc
XCcpO1wiPjwvdGQ+IgorICAgICAgICAgICAgICAgICAgICAiPC90cj48L3Rib2R5PiIKKyAgICAg
ICAgICAgICAgICApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBodG1sLmFw
cGVuZCgiPC90YWJsZT4iKTsKKyAgICB9CisgICAgbV90YXJnZXRMaXN0c0h0bWwgPSBodG1sLnRv
U3RyaW5nKCk7CisgICAgaWYgKG1fcGFnZUxvYWRlZCkKKyAgICAgICAgdXBkYXRlVGFyZ2V0TGlz
dCgpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6dXBkYXRlVGFy
Z2V0TGlzdCgpCit7CisgICAgaWYgKCFtX3RhcmdldExpc3RzSHRtbC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgcnVuU2NyaXB0KG1ha2VTdHJpbmcoInVwZGF0ZVRhcmdldHMoYCIsIG1fdGFyZ2V0TGlz
dHNIdG1sLCAiYCk7IikpOworICAgICAgICBtX3RhcmdldExpc3RzSHRtbCA9IHsgfTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpwbGF0Zm9ybVN0YXJ0
VGFzayhXZWJQYWdlUHJveHkmIHBhZ2VQcm94eSwgV2ViVVJMU2NoZW1lVGFzayYgdGFzaykKK3sK
KyAgICBhdXRvJiByZXF1ZXN0VVJMID0gdGFzay5yZXF1ZXN0KCkudXJsKCk7CisKKyAgICAvLyBE
ZXN0cm95IHRoZSBjbGllbnQgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24gc28gaXQg
Y2FuIGNvbm5lY3QgdG8gdGhlIHNhbWUgcG9ydAorICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbnVs
bHB0cjsKKyAgICBtX2luc3BlY3RvckNsaWVudCA9IG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9y
Q2xpZW50PihyZXF1ZXN0VVJMLCAqdGhpcyk7CisKKyAgICAvLyBTZXR1cCB0YXJnZXQgcG9zdE1l
c3NhZ2UgbGlzdGVuZXIKKyAgICBhdXRvIGhhbmRsZXIgPSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxl
cjo6Y3JlYXRlKG1ha2VVbmlxdWU8U2NyaXB0TWVzc2FnZUNsaWVudD4oKnRoaXMpLCAiaW5zcGVj
dG9yIiwgQVBJOjpVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKKyAgICBwYWdlUHJv
eHkucGFnZUdyb3VwKCkudXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdE1lc3Nh
Z2VIYW5kbGVyKGhhbmRsZXIuZ2V0KCkpOworCisgICAgLy8gU2V0dXAgbG9hZGVyIGNsaWVudCB0
byBnZXQgbm90aWZpZWQgb2YgcGFnZSBsb2FkCisgICAgbV9wYWdlLnNldExvYWRlckNsaWVudCht
YWtlVW5pcXVlPExvYWRlckNsaWVudD4oW3RoaXNdIHsKKyAgICAgICAgbV9wYWdlTG9hZGVkID0g
dHJ1ZTsKKyAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOworICAgIH0pKTsKKyAgICBtX3BhZ2VM
b2FkZWQgPSBmYWxzZTsKKworICAgIFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7CisgICAgaHRt
bEJ1aWxkZXIuYXBwZW5kKAorICAgICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNw
ZWN0b3I8L3RpdGxlPiIKKyAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVc
IiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz4iCisgICAgICAgICI8c3R5
bGU+IgorICAgICAgICAiICBoMSB7IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHgg
MCB3aGl0ZTsgbWFyZ2luLWJvdHRvbTogMDsgfSIKKyAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFt
aWx5OiAtd2Via2l0LXN5c3RlbS1mb250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2
OyBwYWRkaW5nOiAyMHB4IDIwcHggMCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAi
CisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxp
bmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xv
ci1zdG9wKDEsICNmNmY2ZjQpKTsiCisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6
IDEwMCUgNWVtOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IgorICAgICAgICAiICB0
YWJsZSB7IHdpZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB0YWJsZS1sYXlv
dXQ6IGZpeGVkOyB9IgorICAgICAgICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAj
ZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9IgorICAgICAg
ICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKKyAgICAgICAgIiAgdGQgeyBwYWRkaW5n
OiAxNXB4OyB9IgorICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9IgorICAgICAg
ICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBvdmVyZmxvdzogaGlkZGVuOyB3
aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9IgorICAgICAgICAi
ICAudGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IGJhY2tncm91bmQ6ICNlZWU7IHdvcmQtd3Jh
cDogYnJlYWstd29yZDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgfSIKKyAgICAgICAgIiAg
dGQuaW5wdXQgeyB3aWR0aDogNjRweDsgfSIKKyAgICAgICAgIiAgaW5wdXQgeyB3aWR0aDogMTAw
JTsgcGFkZGluZzogOHB4OyB9IgorICAgICAgICAiPC9zdHlsZT4iCisgICAgICAgICI8L2hlYWQ+
PGJvZHk+PGgxPkluc3BlY3RhYmxlIHRhcmdldHM8L2gxPiIKKyAgICAgICAgIjxkaXYgaWQ9XCJ0
YXJnZXRsaXN0XCI+PHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD48L2Rpdj48L2JvZHk+IgorICAgICAg
ICAiPHNjcmlwdD4iCisgICAgICAgICJmdW5jdGlvbiB1cGRhdGVUYXJnZXRzKHN0cikgeyIKKyAg
ICAgICAgICAgICJsZXQgdGFyZ2V0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rhcmdl
dGxpc3QnKTsiCisgICAgICAgICAgICAidGFyZ2V0RGl2LmlubmVySFRNTCA9IHN0cjsiCisgICAg
ICAgICJ9IgorICAgICAgICAiPC9zY3JpcHQ+Iik7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8
L2h0bWw+Iik7CisKKyAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0Zjgo
KTsKKyAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShodG1sLmRhdGEoKSwgaHRt
bC5sZW5ndGgoKSk7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShyZXF1ZXN0VVJMLCAi
dGV4dC9odG1sIl9zLCBodG1sLmxlbmd0aCgpLCAiVVRGLTgiX3MpOworICAgIHRhc2suZGlkUmVj
ZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICB0YXNrLmRpZFJlY2VpdmVEYXRhKFdURk1vdmUo
ZGF0YSkpOworICAgIHRhc2suZGlkQ29tcGxldGUoUmVzb3VyY2VFcnJvcigpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjYwMGVmZGVkNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxl
ci5oIgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlVSTFNjaGVtZVRhc2s7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlciBmaW5hbCA6IHB1YmxpYyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciwgcHVi
bGljIFdlYlVSTFNjaGVtZUhhbmRsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyPiBjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihwYWdlKSk7
IH0KKworICAgIHZvaWQgaW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0
aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpOworCitwcml2YXRlOgorICAgIFJl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgICAg
IDogbV9wYWdlKHBhZ2UpIHsgfQorCisgICAgLy8gUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKKyAg
ICB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOwor
ICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7
IH0KKworICAgIC8vIFdlYlVSTFNjaGVtZUhhbmRsZXIKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRU
YXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbDsKKyAgICB2b2lkIHBs
YXRmb3JtU3RvcFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsg
fQorICAgIHZvaWQgcGxhdGZvcm1UYXNrQ29tcGxldGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5h
bCB7IH0KKworICAgIHZvaWQgdXBkYXRlVGFyZ2V0TGlzdCgpOworCisgICAgdm9pZCBydW5TY3Jp
cHQoY29uc3QgU3RyaW5nJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9y
Q2xpZW50PiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAg
ICBib29sIG1fcGFnZUxvYWRlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNI
dG1sOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVN
T1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM5MGMyYjk0ZjJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5
LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSVBhZ2VD
b25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9w
ID0gVEVYVCgiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIik7Citjb25zdCBMUENXU1RS
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzIjsKKworTFJFU1VMVCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
KQoreworICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9j
YXN0PFJlbW90ZVdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2Fz
ZSBXTV9TSVpFOgorICAgICAgICByZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAgY2Fz
ZSBXTV9DTE9TRToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2Mo
aHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2lu
ZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3Mg
PSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXpl
b2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2NleC5s
cGZuV25kUHJvYyAgICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jOworICAgIHdj
ZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAg
IHdjZXguaEluc3RhbmNlICAgICAgPSAwOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOwor
ICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAg
d2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7Cisg
ICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1l
OworICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5k
b3dDbGFzcyA9IHRydWU7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30K
KworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2l6ZUNoYW5nZSgpCit7CisgICAg
aWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0OworICAg
IDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRXaW5k
b3dQb3MobV93ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5y
aWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsK
KyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b25D
bG9zZSgpCit7CisgICAgOjpTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX0hJREUpOwor
ICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViUGFnZVByb3h5
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKQoreworICAgIFJlZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQ
cmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyAg
ICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOworCisj
aWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJF
eHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2Vz
VG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFdlYlBh
Z2VHcm91cD4gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdy
b3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJh
dGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1
cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2
ZWxGb3JQYWdlKG51bGxwdHIpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVu
Y2VzKHByZWZlcmVuY2VzLmdldCgpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdy
b3VwKHBhZ2VHcm91cC5nZXQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIw
MCwgMTUwMCwgMTAwMCk7CisgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJvbnRl
bmRIYW5kbGUgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xh
c3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6OlNl
dFByb3AobV9mcm9udGVuZEhhbmRsZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJv
cCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1fZnJv
bnRlbmRIYW5kbGUsIFNXX1NIT1cpOworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50UmVj
dChtX2Zyb250ZW5kSGFuZGxlLCAmcik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRl
KHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4gbV93
ZWJWaWV3LT5wYWdlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtUmVzZXRTdGF0ZSgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1CcmluZ1RvRnJvbnQoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5n
JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7
CisgICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRlbmRIYW5kbGUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQ
cm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYklu
c3BlY3RvclByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMmRlYWM5NzMxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcApAQCAtMCwwICsxLDQ1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclByb3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJ
TmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisj
aW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvV2ViQ29yZUJ1bmRsZVdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3Rh
bmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIu
aD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8
d3RmL2NmL0NGVVJMRXh0cmFzLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYklu
c3BlY3RvclByb3h5UG9pbnRlciI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzTmFtZSA9IEwiV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7CisKK3N0cnVjdCBJbnNw
ZWN0ZWRXaW5kb3dJbmZvIHsKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgdG9wOworICAgIGludCB2
aWV3V2lkdGg7CisgICAgaW50IHZpZXdIZWlnaHQ7CisgICAgaW50IHBhcmVudFdpZHRoOworICAg
IGludCBwYXJlbnRIZWlnaHQ7Cit9OworCitzdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJ
bnNwZWN0ZWRXaW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRv
dykKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRv
dywgJnJlY3QpOworICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50
V2luZG93LCAoTFBQT0lOVCkmcmVjdCwgMik7CisKKyAgICBSRUNUIHBhcmVudFJlY3Q7CisgICAg
OjpHZXRDbGllbnRSZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJlY3QpOworICAgIHJldHVybiB7
IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9t
IC0gcmVjdC50b3AsIHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJl
Y3QuYm90dG9tIC0gcGFyZW50UmVjdC50b3AgfTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICBzd2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fV0lORE9XUE9T
Q0hBTkdJTkc6IHsKKyAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BP
Uyo+KGxQYXJhbSk7CisKKyAgICAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpF
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50
KGh3bmQpOworICAgICAgICBSRUNUIHBhcmVudFJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3Qo
cGFyZW50LCAmcGFyZW50UmVjdCk7CisKKyAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OworICAg
ICAgICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3Qp
OworCisgICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgICAgICBjYXNlIEF0
dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3Rvckhl
aWdodCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVk
QXR0YWNoZWRXaW5kb3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0
LnRvcCwgd2luZG93UG9zLT5jeSk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3Bl
Y3RvckhlaWdodDsKKyAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dp
bmRvdywgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5k
b3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDogeworICAgICAgICAgICAgdW5zaWduZWQg
aW5zcGVjdG9yV2lkdGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpj
b25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3Bl
Y3RvclJlY3QubGVmdCwgd2luZG93UG9zLT5jeCk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN4
IC09IGluc3BlY3RvcldpZHRoOworICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0
b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3Mt
PnksIGluc3BlY3RvcldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJv
eHk6OnduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBv
aW50ZXJQcm9wKSk7CisgICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAg
ICAgIDo6U2V0V2luZG93UG9zKGNsaWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAw
LCBMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7CisgICAgICAg
IHJldHVybiAwOworICAgIGNhc2UgV01fQ0xPU0U6CisgICAgICAgIGNsaWVudC0+Y2xvc2UoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9
CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAg
IHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKworICAgIGlm
IChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBo
YXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2NleDsK
KyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxlID0g
MDsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jID0gd25kUHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEg
PSAwOworICAgIHdjZXguY2JXbmRFeHRyYSA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgPSBXZWJD
b3JlOjppbnN0YW5jZUhhbmRsZSgpOworICAgIHdjZXguaEljb24gPSAwOworICAgIHdjZXguaEN1
cnNvciA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQg
PSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUg
PSBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKKyAgICB3Y2V4LmhJY29uU20gPSAwOworICAg
IHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlv
bkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYg
bGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICAv
LyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgQVBJOjpG
cmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3Vy
Y2VGcmFtZSgpOworICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZy
YW1lKCkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVj
dG9yUHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudElu
Zm8pOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7CisKKyAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVz
dCgpOworCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4K
KyAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVx
dWVzdC51cmwoKSkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBm
cm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVy
UmVmKS0+aWdub3JlKCk7CisKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNw
ZWN0ZWQgcGFnZS4KKyAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2Fk
UmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0Rp
ZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNw
ZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQ
cm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBBU1NFUlQod2ViSW5z
cGVjdG9yUHJveHkpOworICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9
CisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKKworICAgIGF1dG8gcHJl
ZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAi
V2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2
ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRo
b3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRy
YXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9T
eXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIHByZWZlcmVuY2VzLT5zZXRB
bGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldEph
dmFTY3JpcHRSdW50aW1lRmxhZ3MoeyB9KTsKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VH
cm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3Rl
ZFBhZ2UoKSkpOworICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1
cmF0aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2wo
Jmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7CisgICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7CisKKyAgICBXS1BhZ2VO
YXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKKyAgICAgICAgeyAwLCB0aGlz
IH0sCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCisgICAgICAgIG51
bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQorICAgICAgICBudWxs
cHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRy
LCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZENvbW1pdE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlv
bgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRy
LCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQorICAgICAgICBudWxscHRyLCAv
LyBkaWRGaW5pc2hEb2N1bWVudExvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3Vt
ZW50TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENo
YW5nZQorICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZQorICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCisgICAgICAgIG51bGxwdHIsIC8vIGNv
cHlXZWJDcnlwdG9NYXN0ZXJLZXkKKworICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmln
YXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVy
ZQorICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBu
dWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CisgICAgfTsKKwor
ICAgIFJFQ1QgciA9IHsgMCwgMCwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRo
KSwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd0hlaWdodCkgfTsKKyAgICBhdXRvIHBh
Z2UgPSBpbnNwZWN0ZWRQYWdlKCk7CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+
dmlld1dpZGdldCgpOworICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFy
ZW50KG1faW5zcGVjdGVkVmlld1dpbmRvdyk7CisgICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3Jl
YXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwor
ICAgIG1faW5zcGVjdG9yVmlldyA9ICZ2aWV3LmxlYWtSZWYoKTsKKyAgICBhdXRvIGluc3BlY3Rv
clBhZ2UgPSBtX2luc3BlY3RvclZpZXctPnBhZ2UoKTsKKyAgICBtX2luc3BlY3RvclZpZXdXaW5k
b3cgPSBpbnNwZWN0b3JQYWdlLT52aWV3V2lkZ2V0KCk7CisgICAgV0tQYWdlU2V0UGFnZU5hdmln
YXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2Up
OworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFdlYkNvcmU6
OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3
V2luZG93LCB0aGlzKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAgIG1faW5z
cGVjdG9yUGFnZSA9IG51bGxwdHI7CisgICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgewor
ICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93KTsKKyAgICAgICAg
bV9pbnNwZWN0b3JWaWV3V2luZG93ID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1faW5zcGVj
dG9yRGV0YWNoV2luZG93KSB7CisgICAgICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFj
aFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCk7CisgICAgICAgIDo6RGVzdHJv
eVdpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0
YWNoV2luZG93ID0gbnVsbHB0cjsKKyAgICB9CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0g
bnVsbHB0cjsKKyAgICBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOworfQor
CitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworI2lmIFVT
RShDRikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVu
ZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIp
LCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOworICAgIHJldHVybiBD
RlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsK
KyNlbmRpZgorfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdl
VVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVm
ID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUo
KSwgQ0ZTVFIoIlRlc3QiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikp
KTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7CisjZWxzZQor
ICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JCYXNlVVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVm
PiBiYXNlVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3
ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIiksIG51bGxwdHIsIG51bGxwdHIp
KTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoYmFzZVVSTFJlZi5nZXQoKSk7CisjZWxzZQor
ICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3Bl
Y3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwg
ZGF0YS4KKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit1bnNp
Z25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQor
eworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2lu
ZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Cit9CisKK3Vu
c2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkK
K3sKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dp
bmRvdywgJnJlY3QpOworICAgIHJldHVybiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisKKyAgICBpZiAobV9pbnNwZWN0
b3JEZXRhY2hXaW5kb3cgJiYgOjpHZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBt
X2luc3BlY3RvckRldGFjaFdpbmRvdykgeworICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3Rv
clZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgICAgIDo6U2hv
d1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfSElERSk7CisgICAgfQorCisgICAg
V2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3Rl
ZFZpZXdXaW5kb3csIHRoaXMpOworCisgICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNo
bWVudFNpZGU6OkJvdHRvbSkgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWln
aHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7CisgICAgICAgIHBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVp
Z2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQp
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGgg
PSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBz
dGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAg
ICB9CisgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKK3sKKyAgICBpZiAo
IWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2luc3BlY3RvckRldGFjaFdpbmRvdykgeworICAgICAgICByZWdpc3Rlcldp
bmRvd0NsYXNzKCk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVX
aW5kb3dFeCgwLCBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJ
TkRPVywKKyAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxX
aW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwKKyAgICAgICAgICAgIDAsIDAsIFdlYkNv
cmU6Omluc3RhbmNlSGFuZGxlKCksIDApOworICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nh
c3Q8SEFORExFPih0aGlzKSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJy
b2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwor
CisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdp
bmRvdywgJnJlY3QpOworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0lu
Zm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwor
ICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hX
aW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwg
MCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05P
Wk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdp
bmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3
aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3As
IFNXUF9OT1pPUkRFUik7CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisgICAgICAgIDo6U2hvd1dp
bmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQoreworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9p
bnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6
U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3
aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIGhlaWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAt
IHdpbmRvd0luZm8ubGVmdCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93
UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZv
LnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5m
by5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2ln
bmVkIHdpZHRoKQoreworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0lu
Zm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwor
ICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5w
YXJlbnRXaWR0aCAtIHdpZHRoLCB3aW5kb3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFy
ZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5k
b3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0lu
Zm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJ
bmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1C
cmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29u
c3QgU3RyaW5nJiAvKiB1cmwgKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgYm9vbCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWlsYWJsZSAq
LykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBwbGF0Zm9ybURldGFjaCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2go
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3RvclRhcmdldFByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjky
OGNhMmZiZmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFByb3h5LmgiCi0KLSNpbmNsdWRlICJQcm92
aXNpb25hbFBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1z
dGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5
OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1
ZTxJbnNwZWN0b3JUYXJnZXRQcm94eT4ocGFnZSwgdGFyZ2V0SWQsIHR5cGUpOwotfQotCi1zdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5Ojpj
cmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCi17Ci0gICAg
YXV0byB0YXJnZXQgPSBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFn
ZS5wYWdlKCksIHRhcmdldElkLCB0eXBlKTsKLSAgICB0YXJnZXQtPm1fcHJvdmlzaW9uYWxQYWdl
ID0gbWFrZVdlYWtQdHIocHJvdmlzaW9uYWxQYWdlKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQot
Ci1JbnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5
JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dFR5cGUgdHlwZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9pZGVudGlmaWVyKHRhcmdl
dElkKQotICAgICwgbV90eXBlKHR5cGUpCi17Ci19Ci0KLXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJv
eHk6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNv
bm5lY3Rpb25UeXBlKQotewotICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewotICAgICAgICBt
X3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3Rv
cihpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29u
bmVjdGlvblR5cGUpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlzY29ubmVj
dCgpCi17Ci0gICAgaWYgKGlzUGF1c2VkKCkpCi0gICAgICAgIHJlc3VtZSgpOwotCi0gICAgaWYg
KG1fcHJvdmlzaW9uYWxQYWdlKSB7Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2Vzcygp
KQotICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3Bl
Y3RvcihpZGVudGlmaWVyKCkpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6c2Vu
ZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlm
IChtX3Byb3Zpc2lvbmFsUGFnZSkgewotICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigp
LCBtZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wYWdlLmhh
c1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQo
KQotewotICAgIG1fcHJvdmlzaW9uYWxQYWdlID0gbnVsbHB0cjsKLX0KLQotYm9vbCBJbnNwZWN0
b3JUYXJnZXRQcm94eTo6aXNQcm92aXNpb25hbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9w
cm92aXNpb25hbFBhZ2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGEyMjM5Y2VjOGUxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+
Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFByb3Zpc2lvbmFsUGFnZVByb3h5OwotY2xh
c3MgV2ViUGFnZVByb3h5OwotCi0vLyBOT1RFOiBUaGlzIFVJUHJvY2VzcyBzaWRlIEluc3BlY3Rv
clRhcmdldCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZyb250ZW5kIGNoYW5uZWwsIHNpbmNlCi0v
LyBhbnkgdGFyZ2V0IC0+IGZyb250ZW5kIG1lc3NhZ2VzIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBX
ZWJQYWdlUHJveHkgd2l0aCBhIHRhcmdldElkLgotCi1jbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94
eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFy
Z2V0UHJveHkpOwotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
VGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElk
LCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYs
IGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7
Ci0gICAgSW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICB+SW5zcGVjdG9y
VGFyZ2V0UHJveHkoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdl
dFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIFN0cmluZyBp
ZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0KLSAgICB2
b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7Ci0gICAgYm9vbCBpc1Byb3Zpc2lvbmFs
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3Qo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwot
ICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRU
eXBlIG1fdHlwZTsKLSAgICBXZWFrUHRyPFByb3Zpc2lvbmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lv
bmFsUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMTkyYzI5ZjQxOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2Fi
bGVJbmZvLmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIlJlbW90ZVdl
Ykluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkKLSAgICA6IG1f
ZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZv
RGF0YTo6ZW1wdHkoKSkpCi17Ci19Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp+UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkoKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKLSNlbmRpZgotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYm
IGRlYnVnZ2FibGVJbmZvLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCkKLXsKLSAg
ICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIG1fZGVidWdnYWJsZUluZm8g
PSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJh
Y2tlbmRDb21tYW5kc1VSTDsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUobV9kZWJ1Z2dhYmxlSW5mby0+ZGVidWdn
YWJsZUluZm9EYXRhKCksIGJhY2tlbmRDb21tYW5kc1VSTCkpOwotICAgIG1faW5zcGVjdG9yUGFn
ZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFn
ZVVSTCgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUJh
Y2tlbmQoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUNyYXNoKCkKLXsKLSAgICAvLyBCZWhh
dmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1c3QgY2xvc2VkLCBzbyBjbGllbnRzIGFyZSBpbmZvcm1l
ZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4KLSAgICBmcm9udGVuZERpZENsb3NlKCk7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQotewotICAgIGJyaW5nVG9Gcm9udCgp
OwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNz
YWdlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xv
c2UoKQotewotICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7
Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5jbG9zZUZyb21Gcm9udGVu
ZCgpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKLXsKLSAgICBBU1NFUlQoIW1fYmFja2VuZENv
bW1hbmRzVVJMLmlzRW1wdHkoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotICAgIGxvYWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5UmVmKCksIG1fYmFja2VuZENvbW1hbmRz
VVJMKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCi17
Ci0gICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlRGlhbG9nKQotewotICAgIHBsYXRmb3JtU2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRl
bnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxvZyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQotewotICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29u
dGVudCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17
Ci0gICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIHBsYXRm
b3JtT3BlbkluTmV3VGFiKHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykK
LXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+
c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5z
cGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gcGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIHRyYWNrSW5zcGVjdG9y
UGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgp
LCAqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vz
c1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9y
QmFzZVVSTCgpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotCi0gICAgdW50cmFja0lu
c3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51
bGxwdHI7Ci0KLSAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0K
LSNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKLVdlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Ci12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiwgYm9vbCwgYm9vbCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0Ry
YWcoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3
VGFiKGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikgeyB9Ci12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCkgeyB9Ci0jZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JN
KE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYjU4ZjhjZTA2Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JN
KE1BQykKLU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFT
UyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBXS1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5T2JqQ0FkYXB0ZXI7Ci1PQkpDX0NMQVNTIFdLV2ViVmlldzsKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci19Ci0KLW5hbWVzcGFj
ZSBBUEkgewotY2xhc3MgRGVidWdnYWJsZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJWaWV3OwotCi1jbGFzcyBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3Nl
RnJvbUZyb250ZW5kKCkgPSAwOwotfTsKLQotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkg
OiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4sIHB1YmxpYyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkpOwotICAgIH0KLQotICAgIH5SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eSgpOwotCi0gICAgdm9pZCBzZXRDbGllbnQoUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQotCi0gICAgYm9vbCBpc1Vu
ZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAg
ICB2b2lkIGxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYsIGNvbnN0IFN0cmluZyYgYmFj
a2VuZENvbW1hbmRzVVJMKTsKLSAgICB2b2lkIGNsb3NlRnJvbUJhY2tlbmQoKTsKLSAgICB2b2lk
IHNob3coKTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgTlNXaW5kb3cgKndpbmRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fd2luZG93LmdldCgpOyB9Ci0gICAgV0tXZWJWaWV3ICp3ZWJWaWV3KCkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAg
ICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmKTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oV0lOX0NBSVJPKQotICAgIExSRVNVTFQgc2l6ZUNoYW5nZSgpOwotICAgIExSRVNV
TFQgb25DbG9zZSgpOwotCi0gICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY2xvc2VGcm9tQ3Jh
c2goKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkgbWVzc2FnZXMuCi0gICAgdm9pZCBmcm9udGVuZERpZENsb3NlKCk7Ci0g
ICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIGJyaW5n
VG9Gcm9udCgpOwotICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0g
ICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250
ZW50KTsKLSAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0
IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0KLSAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIC8vIFBsYXRm
b3JtIGltcGxlbWVudGF0aW9ucy4KLSAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIHBs
YXRmb3JtQnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlQXMpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0U2hl
ZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFy
dFdpbmRvd0RyYWcoKTsKLSAgICB2b2lkIHBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmlu
ZyYgdXJsKTsKLSAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpOwotCi0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQq
IG1fY2xpZW50IHsgbnVsbHB0ciB9OwotICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdl
IHsgbnVsbHB0ciB9OwotCi0gICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IG1fZGVidWdnYWJs
ZUluZm87Ci0gICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOwotCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3Rv
clZpZXc7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBtX3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8
V0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOwotICAg
IEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJM
TWFwOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKLSNlbmRpZgotI2lmIFBM
QVRGT1JNKEdUSykKLSAgICBHdGtXaWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsKLSAgICBH
dGtXaWRnZXQqIG1fd2luZG93IHsgbnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oV0lO
X0NBSVJPKQotICAgIEhXTkQgbV9mcm9udGVuZEhhbmRsZTsKLSAgICBSZWZQdHI8V2ViVmlldz4g
bV93ZWJWaWV3OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMDkxYjc4ZmI2Li4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkgewotICAgIEZyb250ZW5kRGlkQ2xvc2UoKQotICAgIFJlb3BlbigpCi0g
ICAgUmVzZXRTdGF0ZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLQotICAgIFNhdmUoU3RyaW5nIGZp
bGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2
ZUFzKQotICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAg
U2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dE
cmFnKCkKLQotICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQotICAgIFNob3dDZXJ0aWZpY2F0
ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQotCi0gICAgU2VuZE1l
c3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhOTgzOTFjNDIwYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbXBv
cnQgPFVJS2l0L1VJS2l0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBIaWdobGln
aHQ7Ci19Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IDogVUlWaWV3IHsK
LSAgICBOU011dGFibGVBcnJheSAqX2xheWVyczsgLy8gQ0FTaGFwZUxheWVycy4KLX0KLS0gKHZv
aWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodDsKLUBlbmQKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWYwYzAzZTMzLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmgi
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVh
ZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9JbnNwZWN0b3JPdmVybGF5Lmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFt
ZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIF9sYXllcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3Nl
bGYgX3JlbW92ZUFsbExheWVyc107Ci0gICAgW19sYXllcnMgcmVsZWFzZV07Ci0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tICh2b2lkKV9yZW1vdmVBbGxMYXllcnMKLXsKLSAgICBmb3IgKENB
U2hhcGVMYXllciAqbGF5ZXIgaW4gX2xheWVycykKLSAgICAgICAgW2xheWVyIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKLSAgICBbX2xheWVycyByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotLSAodm9p
ZClfY3JlYXRlTGF5ZXJzOihOU1VJbnRlZ2VyKW51bUxheWVycwotewotICAgIGlmIChbX2xheWVy
cyBjb3VudF0gPT0gbnVtTGF5ZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfcmVt
b3ZlQWxsTGF5ZXJzXTsKLQotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVy
czsgKytpKSB7Ci0gICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbW0NBU2hhcGVMYXllciBh
bGxvY10gaW5pdF07Ci0gICAgICAgIFtfbGF5ZXJzIGFkZE9iamVjdDpsYXllcl07Ci0gICAgICAg
IFtzZWxmLmxheWVyIGFkZFN1YmxheWVyOmxheWVyXTsKLSAgICAgICAgW2xheWVyIHJlbGVhc2Vd
OwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Q
b2ludHMoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHAyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgZDIsIFdlYkNvcmU6OkZsb2F0UG9pbnQmIGludGVyc2VjdGlvbikgCi17Ci0g
ICAgLy8gRG8gdGhlIGxpbmVzIGludGVyc2VjdD8KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRl
bXBvcmFyeUludGVyc2VjdGlvblBvaW50OwotICAgIGlmICghZmluZEludGVyc2VjdGlvbihwMSwg
cDIsIGQxLCBkMiwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBJcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIHR3byBwb2lu
dHMgb24gdGhlIGxpbmU/Ci0gICAgaWYgKHAxLngoKSA+PSBwMi54KCkpIHsKLSAgICAgICAgaWYg
KHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+IHAxLngoKSB8fCB0ZW1wb3JhcnlJbnRl
cnNlY3Rpb25Qb2ludC54KCkgPCBwMi54KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+
IHAyLngoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPCBwMS54KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChwMS55KCkgPj0gcDIueSgpKSB7
Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPiBwMS55KCkgfHwg
dGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwgcDIueSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rp
b25Qb2ludC55KCkgPiBwMi55KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwg
cDEueSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludGVyc2Vj
dGlvbiA9IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50OwotICAgIHJldHVybiB0cnVlOwotfQot
Ci0vLyBUaGlzIHF1YWQgaW50ZXJzZWN0aW9uIHdvcmtzIGJlY2F1c2UgdGhlIHR3byBxdWFkcyBh
cmUga25vd24gdG8gYmUgYXQgdGhlIHNhbWUKLS8vIHJvdGF0aW9uIGFuZCBjbG9ja3dpc2UtbmVz
cy4KLXN0YXRpYyBXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZEludGVyc2VjdGlvbihXZWJDb3JlOjpG
bG9hdFF1YWQgYm91bmRzLCBXZWJDb3JlOjpGbG9hdFF1YWQgdG9DbGFtcCkKLXsKLSAgICAvLyBS
ZXN1bHRpbmcgcG9pbnRzLgotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcDEsIHAyLCBwMywgcDQ7
Ci0gICAgYm9vbCBjb250YWluc1BvaW50MSA9IGZhbHNlOwotICAgIGJvb2wgY29udGFpbnNQb2lu
dDIgPSBmYWxzZTsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQzID0gZmFsc2U7Ci0gICAgYm9vbCBj
b250YWluc1BvaW50NCA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQxID0gZmFs
c2U7Ci0gICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDIgPSBmYWxzZTsKLSAgICBib29sIGludGVy
c2VjdEZvclBvaW50MyA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmFs
c2U7Ci0KLSAgICAvLyBUb3AgLyBib3R0b20gdmVydGljYWwgY2xhbXBpbmcuCi0gICAgaWYgKGJv
dW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDEoKSkpIHsKLSAgICAgICAgY29udGFpbnNQb2lu
dDEgPSB0cnVlOwotICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsKLSAgICB9IGVsc2UgaWYgKCEo
aW50ZXJzZWN0Rm9yUG9pbnQxID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMo
Ym91bmRzLnAxKCksIGJvdW5kcy5wMigpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAucDQoKSwgcDEp
KSkKLSAgICAgICAgcDEgPSB0b0NsYW1wLnAxKCk7Ci0KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5z
UG9pbnQodG9DbGFtcC5wMigpKSkgewotICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Ci0g
ICAgICAgIHAyID0gdG9DbGFtcC5wMigpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQ
b2ludDIgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwg
Ym91bmRzLnAyKCksIHRvQ2xhbXAucDIoKSwgdG9DbGFtcC5wMygpLCBwMikpKQotICAgICAgICBw
MiA9IHRvQ2xhbXAucDIoKTsKLQotICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1w
LnAzKCkpKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKLSAgICAgICAgcDMgPSB0
b0NsYW1wLnAzKCk7Ci0gICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MyA9IGZpbmRJ
bnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wNCgpLCBib3VuZHMucDMoKSwg
dG9DbGFtcC5wMigpLCB0b0NsYW1wLnAzKCksIHAzKSkpCi0gICAgICAgIHAzID0gdG9DbGFtcC5w
MygpOwotCi0gICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDQoKSkpIHsKLSAg
ICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOwotICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsK
LSAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmluZEludGVyc2VjdGlvbk9u
TGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAxKCks
IHRvQ2xhbXAucDQoKSwgcDQpKSkKLSAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7Ci0KLSAgICAv
LyBJZiBvbmx5IG9uZSBvZiB0aGUgcG9pbnRzIGludGVyc2VjdGVkIG9uIGVpdGhlciB0aGUgdG9w
IG9yIGJvdHRvbSBsaW5lIHRoZW4gd2UKLSAgICAvLyBjYW4gY2xhbXAgdGhlIG90aGVyIHBvaW50
IG9uIHRoYXQgbGluZSB0byB0aGUgY29ybmVyIG9mIHRoZSBib3VuZHMuCi0gICAgaWYgKCFjb250
YWluc1BvaW50MSAmJiBpbnRlcnNlY3RGb3JQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MSkg
ewotICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7Ci0gICAgICAgIHAxID0gYm91bmRzLnAx
KCk7Ci0gICAgfSBlbHNlIGlmICghY29udGFpbnNQb2ludDIgJiYgaW50ZXJzZWN0Rm9yUG9pbnQx
ICYmICFpbnRlcnNlY3RGb3JQb2ludDIpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVl
OwotICAgICAgICBwMiA9IGJvdW5kcy5wMigpOwotICAgIH0KLSAgICBpZiAoIWNvbnRhaW5zUG9p
bnQ0ICYmIGludGVyc2VjdEZvclBvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KSB7Ci0gICAg
ICAgIGNvbnRhaW5zUG9pbnQ0ID0gdHJ1ZTsKLSAgICAgICAgcDQgPSBib3VuZHMucDQoKTsKLSAg
ICB9IGVsc2UgaWYgKCFjb250YWluc1BvaW50MyAmJiBpbnRlcnNlY3RGb3JQb2ludDQgJiYgIWlu
dGVyc2VjdEZvclBvaW50MykgewotICAgICAgICBjb250YWluc1BvaW50MyA9IHRydWU7Ci0gICAg
ICAgIHAzID0gYm91bmRzLnAzKCk7Ci0gICAgfQotCi0gICAgLy8gTm93IHdlIG9ubHkgbmVlZCB0
byBwZXJmb3JtIGhvcml6b250YWwgY2xhbXBpbmcgZm9yIHVuYWRqdXN0ZWQgcG9pbnRzLgotICAg
IGlmICghY29udGFpbnNQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MikKLSAgICAgICAgZmlu
ZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygp
LCBwMSwgcDIsIHAyKTsKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQ
b2ludDMpCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5k
cy5wMigpLCBib3VuZHMucDMoKSwgcDQsIHAzLCBwMyk7Ci0gICAgaWYgKCFjb250YWluc1BvaW50
MSAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5l
QmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHAxLCBwMiwgcDEpOwotICAg
IGlmICghY29udGFpbnNQb2ludDQgJiYgIWludGVyc2VjdEZvclBvaW50NCkKLSAgICAgICAgZmlu
ZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wNCgp
LCBwNCwgcDMsIHA0KTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFF1YWQocDEsIHAyLCBw
MywgcDQpOwotfQotCi1zdGF0aWMgdm9pZCBsYXllclBhdGhXaXRoSG9sZShDQVNoYXBlTGF5ZXIg
KmxheWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRRdWFkJiBob2xlUXVhZCkKLXsKLSAgICAvLyBOb3RoaW5nIHRvIHNob3cuCi0gICAg
aWYgKG91dGVyUXVhZCA9PSBob2xlUXVhZCB8fCBob2xlUXVhZC5jb250YWluc1F1YWQob3V0ZXJR
dWFkKSkgewotICAgICAgICBsYXllci5wYXRoID0gTlVMTDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgbmVnYXRpdmUgbWFyZ2luIC8gcGFkZGluZyB0aGVu
IHRoZSBvdXRlciBib3ggbWlnaHQgbm90Ci0gICAgLy8gZnVsbHkgY29udGFpbiB0aGUgaG9sZSBi
b3guIEluIHN1Y2ggY2FzZXMgd2UgcmVjYWxjdWxhdGUgdGhlIGhvbGUgdG8KLSAgICAvLyBiZSB0
aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gcXVhZHMuCi0gICAgV2ViQ29yZTo6RmxvYXRRdWFk
IGlubmVySG9sZTsKLSAgICBpZiAob3V0ZXJRdWFkLmNvbnRhaW5zUXVhZChob2xlUXVhZCkpCi0g
ICAgICAgIGlubmVySG9sZSA9IGhvbGVRdWFkOwotICAgIGVsc2UKLSAgICAgICAgaW5uZXJIb2xl
ID0gcXVhZEludGVyc2VjdGlvbihvdXRlclF1YWQsIGhvbGVRdWFkKTsKLQotICAgIC8vIENsb2Nr
d2lzZSBpbnNpZGUgcmVjdCAoaG9sZSksIENvdW50ZXItQ2xvY2t3aXNlIG91dHNpZGUgcmVjdCAo
ZmlsbCkuCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgp
OwotICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMSgpLngoKSwgaW5u
ZXJIb2xlLnAxKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5l
ckhvbGUucDIoKS54KCksIGlubmVySG9sZS5wMigpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRv
UG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAzKCkueCgpLCBpbm5lckhvbGUucDMoKS55KCkpOwot
ICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wNCgpLngoKSwgaW5u
ZXJIb2xlLnA0KCkueSgpKTsKLSAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1
YWQucDEoKS54KCksIG91dGVyUXVhZC5wMSgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9p
bnQocGF0aCwgMCwgb3V0ZXJRdWFkLnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOwotICAg
IENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJR
dWFkLnAzKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1
YWQucDIoKS54KCksIG91dGVyUXVhZC5wMigpLnkoKSk7Ci0gICAgbGF5ZXIucGF0aCA9IHBhdGg7
Ci0gICAgQ0dQYXRoUmVsZWFzZShwYXRoKTsKLX0KLQotc3RhdGljIHZvaWQgbGF5ZXJQYXRoKENB
U2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkKQot
ewotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAg
ICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDEoKS54KCksIG91dGVyUXVh
ZC5wMSgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFk
LnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50
KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKLSAgICBD
R1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91dGVyUXVh
ZC5wMigpLnkoKSk7Ci0gICAgbGF5ZXIucGF0aCA9IHBhdGg7Ci0gICAgQ0dQYXRoUmVsZWFzZShw
YXRoKTsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDooY29uc3QgV2ViQ29y
ZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQgb2Zmc2V0Oih1bnNpZ25lZClvZmZzZXQKLXsKLSAgICBB
U1NFUlQoW19sYXllcnMgY291bnRdID49IG9mZnNldCArIDQpOwotICAgIEFTU0VSVChoaWdobGln
aHQucXVhZHMuc2l6ZSgpID49IG9mZnNldCArIDQpOwotICAgIGlmIChbX2xheWVycyBjb3VudF0g
PCBvZmZzZXQgKyA0IHx8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPCBvZmZzZXQgKyA0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDQVNoYXBlTGF5ZXIgKm1hcmdpbkxheWVyID0gW19sYXllcnMg
b2JqZWN0QXRJbmRleDpvZmZzZXRdOwotICAgIENBU2hhcGVMYXllciAqYm9yZGVyTGF5ZXIgPSBb
X2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDFdOwotICAgIENBU2hhcGVMYXllciAqcGFk
ZGluZ0xheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAyXTsKLSAgICBDQVNo
YXBlTGF5ZXIgKmNvbnRlbnRMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsg
M107Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFyZ2luUXVhZCA9IGhpZ2hsaWdodC5xdWFk
c1tvZmZzZXRdOwotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBib3JkZXJRdWFkID0gaGlnaGxpZ2h0
LnF1YWRzW29mZnNldCArIDFdOwotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBwYWRkaW5nUXVhZCA9
IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAyXTsKLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgY29u
dGVudFF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgM107Ci0KLSAgICBtYXJnaW5MYXll
ci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5tYXJnaW5Db2xvcik7Ci0gICAg
Ym9yZGVyTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuYm9yZGVyQ29s
b3IpOwotICAgIHBhZGRpbmdMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdo
dC5wYWRkaW5nQ29sb3IpOwotICAgIGNvbnRlbnRMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0Nv
bG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOwotCi0gICAgbGF5ZXJQYXRoV2l0aEhvbGUobWFy
Z2luTGF5ZXIsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQpOwotICAgIGxheWVyUGF0aFdpdGhIb2xl
KGJvcmRlckxheWVyLCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCk7Ci0gICAgbGF5ZXJQYXRoV2l0
aEhvbGUocGFkZGluZ0xheWVyLCBwYWRkaW5nUXVhZCwgY29udGVudFF1YWQpOwotICAgIGxheWVy
UGF0aChjb250ZW50TGF5ZXIsIGNvbnRlbnRRdWFkKTsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9y
Tm9kZUxpc3RIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Ci17
Ci0gICAgaWYgKCFoaWdobGlnaHQucXVhZHMuc2l6ZSgpKSB7Ci0gICAgICAgIFtzZWxmIF9yZW1v
dmVBbGxMYXllcnNdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbm9k
ZUNvdW50ID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSAvIDQ7Ci0gICAgW3NlbGYgX2NyZWF0ZUxh
eWVyczpub2RlQ291bnQgKiA0XTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rl
Q291bnQ7ICsraSkKLSAgICAgICAgW3NlbGYgX2xheW91dEZvck5vZGVIaWdobGlnaHQ6aGlnaGxp
Z2h0IG9mZnNldDppICogNF07Ci19Ci0KLS0gKHZvaWQpX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0
Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAotewotICAgIE5TVUludGVnZXIg
bnVtTGF5ZXJzID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKTsKLSAgICBpZiAoIW51bUxheWVycykg
ewotICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bnVtTGF5ZXJzXTsKLQotICAgIENHQ29sb3JS
ZWYgY29udGVudENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuY29udGVudENvbG9yKTsK
LSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgewotICAgICAg
ICBDQVNoYXBlTGF5ZXIgKmxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAg
ICAgbGF5ZXIuZmlsbENvbG9yID0gY29udGVudENvbG9yOwotICAgICAgICBsYXllclBhdGgobGF5
ZXIsIGhpZ2hsaWdodC5xdWFkc1tpXSk7Ci0gICAgfQotfQotCi0tICh2b2lkKXVwZGF0ZTooY29u
c3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKLXsKLSAgICBpZiAoaGlnaGxpZ2h0LnR5
cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6Tm9kZSB8fCBoaWdobGlnaHQudHlwZSA9PSBX
ZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpOb2RlTGlzdCkKLSAgICAgICAgW3NlbGYgX2xheW91dEZv
ck5vZGVMaXN0SGlnaGxpZ2h0OmhpZ2hsaWdodF07Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0LnR5
cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6UmVjdHMpCi0gICAgICAgIFtzZWxmIF9sYXlv
dXRGb3JSZWN0c0hpZ2hsaWdodDpoaWdobGlnaHRdOwotfQotCi1AZW5kCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyM2Q3MDVlODNlNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5j
bHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oIgotI2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViQXV0b21hdGlv
blNlc3Npb24uaCIKLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVj
dG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0j
aW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJX
ZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Nb2NrUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9TZXRG
b3JTY29wZS5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgIldlYkluc3BlY3RvclBy
b3h5Q2xpZW50LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1X
aW5kb3dXaWR0aCA9IDUwMDsKLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5p
bXVtV2luZG93SGVpZ2h0ID0gNDAwOwotCi1jb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94
eTo6aW5pdGlhbFdpbmRvd1dpZHRoID0gMTAwMDsKLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3Rv
clByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0ID0gNjUwOwotCi1XZWJJbnNwZWN0b3JQcm94eTo6
V2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICA6IG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyKFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJldlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJ
bmFjdGl2aXR5VGltZXJGaXJlZCkKLSNlbmRpZgotewotICAgIGlmIChpbnNwZWN0ZWRQYWdlICYm
IGluc3BlY3RlZFBhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNz
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0g
ICAgfQotfQotCi1XZWJJbnNwZWN0b3JQcm94eTo6fldlYkluc3BlY3RvclByb3h5KCkKLXsKLX0K
LQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGluc3BlY3RvckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpOwotfQot
Ci1XZWJQcmVmZXJlbmNlcyYgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgcmV0dXJu
IG1faW5zcGVjdG9yUGFnZS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFn
ZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7Ci0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBh
Z2UgPSBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRv
RnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQot
Ci0vLyBQdWJsaWMgQVBJcwotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6aXNGcm9udCgpCi17Ci0g
ICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBwbGF0Zm9ybUlzRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29u
bmVjdCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3Nob3dNZXNzYWdlU2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG93
TWVzc2FnZVNlbnQgPSB0cnVlOwotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSB0cnVl
OwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Ok5vdGlmeU5lZWRE
ZWJ1Z2dlckJyZWFrKCksIDApOwotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yOjpTaG93KCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93
KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgYnJpbmdUb0Zyb250KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0KCk7Ci0KLSAgICAvLyBEb24ndCBpZ25vcmUgdGhl
IGZpcnN0IGJyaW5nVG9Gcm9udCBzbyBpdCBvcGVucyB0aGUgSW5zcGVjdG9yLgotICAgIG1faWdu
b3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6aGlkZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faXNWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybUhpZGUoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2UoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6Q2xvc2UoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZvckNyYXNoKCkKLXsK
LSAgICBjbG9zZSgpOwotCi0gICAgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlb3BlbigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsb3NlKCk7Ci0gICAgc2hvdygpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkKLXsKLSAgICBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwotICAgIGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAg
ICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2htZW50U2lk
ZSgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvclN0YXJ0
c0F0dGFjaGVkKCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVj
dG9yV2luZG93RnJhbWUoKTsKLQotICAgIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpyZXNldCgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkg
ewotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBu
dWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3
UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotewotICAgIEFTU0VSVCgh
bV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2lu
c3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vz
cygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwot
Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6VXBkYXRlQ29ubmVjdGlvbigpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVu
dCBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFn
ZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlNob3dDb25zb2xlKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93UmVzb3Vy
Y2VzKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291cmNlcygpKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1l
KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
cmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQo
KSkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hCb3R0b20oKQotewotICAg
IGF0dGFjaChBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6YXR0YWNoUmlnaHQoKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6UmlnaHQp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hMZWZ0KCkKLXsKLSAgICBhdHRh
Y2goQXR0YWNobWVudFNpZGU6OkxlZnQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojph
dHRhY2goQXR0YWNobWVudFNpZGUgc2lkZSkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8
fCAhY2FuQXR0YWNoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNBdHRhY2hlZCA9IHRy
dWU7Ci0gICAgbV9hdHRhY2htZW50U2lkZSA9IHNpZGU7Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJl
ZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2htZW50U2lkZShzdGF0aWNfY2FzdDx1aW50MzJf
dD4oc2lkZSkpOwotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKLQotICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0
cnVlKSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFj
aG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1BdHRhY2goKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0KLSAg
ICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNl
dEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZChmYWxzZSkpOwotICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkp
OwotCi0gICAgcGxhdGZvcm1EZXRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGluc3BlY3Rv
clBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGhlaWdodCk7Ci0g
ICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQot
ewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkV2lk
dGgod2lkdGgpOwotICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFydFdp
bmRvd0RyYWcoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlUGFnZVByb2Zp
bGluZygpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2lzUHJvZmlsaW5nUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BQYWdlUHJvZmlsaW5nKCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0
YXJ0UGFnZVByb2ZpbGluZygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xl
RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUpIHsKLSAgICAgICAg
bV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9u
KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbm5lY3QoKTsKLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlv
bigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdElu
c3BlY3RvclBhZ2UoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgLy8gVXNlIFVSTCBzbyB3ZSBjYW4g
Y29tcGFyZSB0aGUgcGF0aHMgYW5kIHByb3RvY29scy4KLSAgICBVUkwgbWFpblBhZ2VVUkwoVVJM
KCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpOwotICAgIGlmICh1cmwu
cHJvdG9jb2woKSA9PSBtYWluUGFnZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobWFpblBhZ2VV
UkwucGF0aCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBtaWdodCBub3Qg
aGF2ZSBhIFRlc3QgVVJMIGluIFByb2R1Y3Rpb24gYnVpbGRzLgotICAgIFN0cmluZyB0ZXN0UGFn
ZVVSTFN0cmluZyA9IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwot
ICAgIGlmICh0ZXN0UGFnZVVSTFN0cmluZy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgVVJMIHRlc3RQYWdlVVJMKFVSTCgpLCB0ZXN0UGFnZVVSTFN0cmluZyk7Ci0gICAg
cmV0dXJuIHVybC5wcm90b2NvbCgpID09IHRlc3RQYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyh0ZXN0UGFnZVVSTC5wYXRoKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjcmVh
dGVGcm9udGVuZFBhZ2UoKQotewotICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdl
KCk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3Rv
clBhZ2UsIG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCAqdGhpcyk7Ci0g
ICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgq
bV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQo
Ym9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuaGFzTG9jYWxGcm9udGVuZCgpKSB7Ci0gICAgICAgIHNob3coKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OwotICAg
IGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0g
ICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkVzdGFibGlzaENvbm5lY3Rp
b24obV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCksIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUo
KSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0KLSAgICBBU1NFUlQoIW1faXNB
Y3RpdmVGcm9udGVuZCk7Ci0gICAgbV9pc0FjdGl2ZUZyb250ZW5kID0gdHJ1ZTsKLSAgICBtX2lu
c3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKnRoaXMp
OwotCi0gICAgaWYgKCFtX3VuZGVyVGVzdCkgewotICAgICAgICBtX2NhbkF0dGFjaCA9IHBsYXRm
b3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCk7Ci0gICAgICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9w
ZW5BdHRhY2hlZCgpOwotICAgICAgICBtX2F0dGFjaG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0
YWNobWVudFNpZGU+KGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1l
bnRTaWRlKCkpOwotCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTZXRBdHRhY2hlZChtX2lzQXR0YWNoZWQpKTsKLQotICAgICAgICBpZiAobV9p
c0F0dGFjaGVkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJv
dHRvbSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAg
ICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpBdHRhY2hlZExlZnQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0
b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxh
YmxlKCFtX2NhbkF0dGFjaCkpOwotICAgIH0KLQotICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50
IHdoZW4gYSBsb2NhbCBpbnNwZWN0b3IgYXR0YWNoZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBk
ZWxlZ2F0ZXMgcHJpb3IgdG8gdGhlIF9XS0luc3BlY3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4K
LSAgICBtX2luc3BlY3RlZFBhZ2UtPnVpQ2xpZW50KCkuZGlkQXR0YWNoSW5zcGVjdG9yKCptX2lu
c3BlY3RlZFBhZ2UsICp0aGlzKTsKLQotICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjbGllbnQgY2xv
c2VkIHRoZSBpbnNwZWN0b3IgZnJvbSB0aGUgZGVsZWdhdGUgbWV0aG9kLgotICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPmxv
YWRSZXF1ZXN0KFVSTChVUkwoKSwgbV91bmRlclRlc3QgPyBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdG9yVGVzdFBhZ2VVUkwoKSA6IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJM
KCkpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6b3BlbigpCi17Ci0gICAgaWYgKG1f
dW5kZXJUZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaXNPcGVuaW5nKG1faXNP
cGVuaW5nLCB0cnVlKTsKLSAgICBtX2lzVmlzaWJsZSA9IHRydWU7Ci0gICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNp
YmxlKSk7Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybUF0dGFjaCgp
OwotICAgIGVsc2UKLSAgICAgICAgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotCi0g
ICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
ZGlkQ2xvc2UoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAg
ICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2li
bGUgPSBmYWxzZTsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGZhbHNlOwotICAgIG1fc2hvd01l
c3NhZ2VTZW50ID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNl
OwotCi0gICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJs
ZShtX2lzVmlzaWJsZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCkpOwotCi0gICAgaWYgKG1faXNB
Y3RpdmVGcm9udGVuZCkgewotICAgICAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSBmYWxzZTsKLSAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZy
b250ZW5kKCp0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBw
bGF0Zm9ybURldGFjaCgpOwotCi0gICAgLy8gTnVsbCBvdXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVy
IHBsYXRmb3JtRGV0YWNoKCksIHNvIHRoZSB2aWV3cyBjYW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0
bHkuCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLQotICAgIG1faXNBdHRhY2hlZCA9
IGZhbHNlOwotICAgIG1fY2FuQXR0YWNoID0gZmFsc2U7Ci0gICAgbV91bmRlclRlc3QgPSBmYWxz
ZTsKLQotICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3Nh
Z2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmZy
b250ZW5kTG9hZGVkKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdl
LT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQotICAgICAgICBh
dXRvbWF0aW9uU2Vzc2lvbi0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVkUGFn
ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAg
Ly8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB0ZWxscyB1cyB0byBkbyB0
aGlzIG9uIGxvYWQuIFdlIHdhbnQgdG8KLSAgICAvLyBpZ25vcmUgaXQgb25jZSBpZiB3ZSBvbmx5
IHdhbnRlZCB0byBjb25uZWN0LiBUaGlzIGFsbG93cyB0aGUgSW5zcGVjdG9yIHRvIGxhdGVyCi0g
ICAgLy8gcmVxdWVzdCB0byBiZSBicm91Z2h0IHRvIHRoZSBmcm9udCB3aGVuIGEgYnJlYWtwb2lu
dCBpcyBoaXQgb3Igc29tZSBvdGhlciBhY3Rpb24uCi0gICAgaWYgKG1faWdub3JlRmlyc3RCcmlu
Z1RvRnJvbnQpIHsKLSAgICAgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAgIGVsc2UKLSAgICAgICAgb3BlbigpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpicmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAg
ICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsK
LSAgICBib29sIHByZXZpb3VzQ2FuQXR0YWNoID0gbV9jYW5BdHRhY2g7Ci0KLSAgICBtX2NhbkF0
dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGF2YWlsYWJsZSk7Ci0KLSAgICBpZiAocHJldmlvdXND
YW5BdHRhY2ggPT0gbV9jYW5BdHRhY2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lu
c3BlY3RvclBhZ2UgJiYgIW1fdW5kZXJUZXN0KQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2Fu
QXR0YWNoKSk7Ci0KLSAgICBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5B
dHRhY2gpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hh
bmdlZCh1cmxTdHJpbmcpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q2VydGlm
aWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAg
bV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlID0gYWN0aXZlOwotCi0gICAgaWYgKG1faWdub3JlRWxl
bWVudFNlbGVjdGlvbkNoYW5nZSkgewotICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25D
aGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAgICAgIGNs
b3NlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aXZlKQotICAgICAg
ICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLSAgICBlbHNlIGlmIChpc0Nv
bm5lY3RlZCgpKQotICAgICAgICBicmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIG1f
aXNQcm9maWxpbmdQYWdlID0gYWN0aXZlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpz
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxl
ZCkKLXsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfVEVMRU1FVFJZKQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFp
bGFibGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGF2YWlsYWJsZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKLXsKLSAgICBwbGF0Zm9ybVNhdmUoZmls
ZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0
cmluZyYgY29udGVudCkKLXsKLSAgICBwbGF0Zm9ybUFwcGVuZChmaWxlbmFtZSwgY29udGVudCk7
Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnNob3VsZE9wZW5BdHRhY2hlZCgpCi17Ci0g
ICAgcmV0dXJuIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkKCkgJiYgY2FuQXR0YWNoKCk7Ci19Ci0KLS8vIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25z
IGNhbiB1c2UgdGhlIHN0dWJzIHByb3ZpZGVkIGhlcmUuCi0KLSNpZiAhUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi1XZWJQYWdlUHJveHkqIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRh
dGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5n
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiAwOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNw
ZWN0ZWRXaW5kb3dXaWR0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
RGV0YWNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBh
Z2VVUkwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1EZWJ1Z2dhYmxl
SW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1w
dHkoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd1dpZHRoKHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29s
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFD
KSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjFmZGZjYTFkZi4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDMwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRl
ICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JKQ19DTEFTUyBO
U1VSTDsKLU9CSkNfQ0xBU1MgTlNWaWV3OwotT0JKQ19DTEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xB
U1MgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyOwotT0JKQ19DTEFTUyBXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyOwotI2VsaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIldlYlZpZXcu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xhc3Mg
V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQ
cmVmZXJlbmNlczsKLQotZW51bSBjbGFzcyBBdHRhY2htZW50U2lkZSB7Ci0gICAgQm90dG9tLAot
ICAgIFJpZ2h0LAotICAgIExlZnQsCi19OwotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eQotICAg
IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SW5zcGVjdG9yPgot
ICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgLCBwdWJsaWMgSW5zcGVjdG9y
OjpGcm9udGVuZENoYW5uZWwKLSNpZiBQTEFURk9STShXSU4pCi0gICAgLCBwdWJsaWMgV2ViQ29y
ZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yUHJveHko
aW5zcGVjdGVkUGFnZSkpOwotICAgIH0KLQotICAgIH5XZWJJbnNwZWN0b3JQcm94eSgpOwotCi0g
ICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBQdWJsaWMgQVBJcwotICAgIFdlYlBhZ2VQ
cm94eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQot
ICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVj
dG9yUGFnZTsgfQotCi0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9p
bnNwZWN0b3JQYWdlOyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lz
VmlzaWJsZTsgfQotICAgIGJvb2wgaXNGcm9udCgpOwotCi0gICAgdm9pZCBjb25uZWN0KCk7Ci0K
LSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIGhpZGUoKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0g
ICAgdm9pZCBjbG9zZUZvckNyYXNoKCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJl
c2V0U3RhdGUoKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIHVwZGF0ZUZvck5ld1Bh
Z2VQcm9jZXNzKFdlYlBhZ2VQcm94eSopOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGVudW0g
Y2xhc3MgSW5zcGVjdGlvblRhcmdldFR5cGUgeyBMb2NhbCwgUmVtb3RlIH07Ci0gICAgc3RhdGlj
IFJldGFpblB0cjxOU1dpbmRvdz4gY3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2lu
ZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlKTsKLQotICAgIHZvaWQgdXBkYXRlSW5zcGVj
dG9yV2luZG93VGl0bGUoKSBjb25zdDsKLSAgICB2b2lkIGluc3BlY3RlZFZpZXdGcmFtZURpZENo
YW5nZShDR0Zsb2F0ID0gMCk7Ci0gICAgdm9pZCB3aW5kb3dGcmFtZURpZENoYW5nZSgpOwotICAg
IHZvaWQgd2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotICAgIE5TV2luZG93KiBpbnNwZWN0
b3JXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsgfQotCi0g
ICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZEFmdGVy
SW5hY3Rpdml0eVRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgYXR0YWNobWVudFZpZXdEaWRDaGFu
Z2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpOwotICAgIHZvaWQgYXR0YWNobWVu
dFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KTsKLSAgICB2b2lkIGF0dGFj
aG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dpbmRvdyk7Ci0KLSAgICBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0
OyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBHdGtXaWRnZXQqIGluc3BlY3Rv
clZpZXcoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclZpZXc7IH07Ci0gICAgdm9pZCBzZXRD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmKTsKLSNlbmRp
ZgotCi0gICAgdm9pZCBzaG93Q29uc29sZSgpOwotICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOwot
ICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqKTsKLQotICAg
IEF0dGFjaG1lbnRTaWRlIGF0dGFjaG1lbnRTaWRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2ht
ZW50U2lkZTsgfQotICAgIGJvb2wgaXNBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRh
Y2hlZDsgfQotICAgIHZvaWQgYXR0YWNoUmlnaHQoKTsKLSAgICB2b2lkIGF0dGFjaExlZnQoKTsK
LSAgICB2b2lkIGF0dGFjaEJvdHRvbSgpOwotICAgIHZvaWQgYXR0YWNoKEF0dGFjaG1lbnRTaWRl
ID0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7Ci0gICAgdm9pZCBkZXRhY2goKTsKLQotICAgIHZv
aWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7Ci0KLSAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7Ci0KLSAg
ICBib29sIGlzUHJvZmlsaW5nUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQcm9maWxpbmdQYWdl
OyB9Ci0gICAgdm9pZCB0b2dnbGVQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICBib29sIGlzRWxlbWVu
dFNlbGVjdGlvbkFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2
ZTsgfQotICAgIHZvaWQgdG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpOwotCi0gICAgYm9vbCBpc1Vu
ZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9Ci0KLSAgICB2b2lkIHNldERp
YWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwotCi0gICAgLy8gUHJvdmlkZWQgYnkgcGxh
dGZvcm0gV2ViSW5zcGVjdG9yUHJveHkgaW1wbGVtZW50YXRpb25zLgotICAgIHN0YXRpYyBTdHJp
bmcgaW5zcGVjdG9yUGFnZVVSTCgpOwotICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBh
Z2VVUkwoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvckJhc2VVUkwoKTsKLSAgICBzdGF0
aWMgYm9vbCBpc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYpOwotICAgIHN0YXRp
YyBEZWJ1Z2dhYmxlSW5mb0RhdGEgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpOwotCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dXaWR0aDsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWluaW11bVdpbmRvd0hlaWdodDsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbml0aWFsV2luZG93V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxX
aW5kb3dIZWlnaHQ7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yUHJveHko
V2ViUGFnZVByb3h5Kik7Ci0KLSAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZv
aWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBv
dmVycmlkZTsKLSAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIENvbm5lY3Rpb25UeXBlOjpMb2NhbDsgfQotCi0gICAgV2ViUGFnZVByb3h5
KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVG
cm9udGVuZFdpbmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOwotCi0gICAgdm9pZCBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKLSAgICB2b2lk
IHBsYXRmb3JtSW52YWxpZGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ0lu
c3BlY3RlZFBhZ2VUb0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUhpZGUoKTsKLSAgICBib29s
IHBsYXRmb3JtSXNGcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYpOwotICAgIHZvaWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0gICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5k
b3dIZWlnaHQoKTsKLSAgICB1bnNpZ25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXRhY2goKTsK
LSAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwotICAg
IHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKLSAgICB2b2lk
IHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZv
aWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLSAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNo
KTsKLSNlbHNlCi0gICAgYm9vbCBwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5B
dHRhY2gpIHsgcmV0dXJuIHdlYlByb2Nlc3NDYW5BdHRhY2g7IH0KLSNlbmRpZgotCi0gICAgLy8g
Q2FsbGVkIGJ5IFdlYkluc3BlY3RvclByb3h5IG1lc3NhZ2VzCi0gICAgdm9pZCBvcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpOwotICAgIHZv
aWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCk7Ci0KLSAgICB2b2lkIHNl
bmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZnJvbnRlbmRMb2Fk
ZWQoKTsKLSAgICB2b2lkIGRpZENsb3NlKCk7Ci0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLSAg
ICB2b2lkIGJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLSAgICB2b2lkIGF0dGFjaEF2YWls
YWJpbGl0eUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYpOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyYpOwotICAgIHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0g
ICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9p
ZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotCi0gICAgYm9vbCBj
YW5BdHRhY2goKSBjb25zdCB7IHJldHVybiBtX2NhbkF0dGFjaDsgfQotICAgIGJvb2wgc2hvdWxk
T3BlbkF0dGFjaGVkKCk7Ci0KLSAgICB2b2lkIG9wZW4oKTsKLQotICAgIHVuc2lnbmVkIGluc3Bl
Y3Rpb25MZXZlbCgpIGNvbnN0OwotCi0gICAgV2ViUHJlZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQ
cmVmZXJlbmNlcygpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUp
Ci0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OwotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhI
V05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0gICAgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNz
KCk7Ci0gICAgdm9pZCB3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdGVk
UGFnZSB7IG51bGxwdHIgfTsKLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51
bGxwdHIgfTsKLQotICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9p
c1Zpc2libGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0F0dGFjaGVkIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fY2FuQXR0YWNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNQcm9maWxpbmdQYWdl
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvd01lc3NhZ2VTZW50IHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9lbGVt
ZW50U2VsZWN0aW9uQWN0aXZlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRWxlbWVudFNl
bGVjdGlvbkNoYW5nZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzT3BlbmluZyB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2lzQWN0aXZlRnJvbnRlbmQgeyBmYWxzZSB9OwotCi0gICAgQXR0YWNobWVu
dFNpZGUgbV9hdHRhY2htZW50U2lkZSB7QXR0YWNobWVudFNpZGU6OkJvdHRvbX07Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2luc3Bl
Y3RvcldpbmRvdzsKLSAgICBSZXRhaW5QdHI8V0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
PiBtX29iakNBZGFwdGVyOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOwotICAgIFJ1bkxvb3A6OlRpbWVyPFdlYkluc3BlY3Rv
clByb3h5PiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcjsKLSAgICBTdHJpbmcg
bV91cmxTdHJpbmc7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OwotICAgIGJv
b2wgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0IHsgZmFsc2UgfTsKLSNlbGlmIFBMQVRG
T1JNKEdUSykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+IG1f
Y2xpZW50OwotICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JWaWV3IHsgbnVsbHB0ciB9OwotICAg
IEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0
KiBtX2hlYWRlckJhciB7IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9pbnNwZWN0ZWRVUkxTdHJp
bmc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgSFdORCBtX2luc3BlY3RlZFZpZXdXaW5kb3cg
eyBudWxscHRyIH07Ci0gICAgSFdORCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxs
cHRyIH07Ci0gICAgSFdORCBtX2luc3BlY3RvclZpZXdXaW5kb3cgeyBudWxscHRyIH07Ci0gICAg
SFdORCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8V2Vi
Vmlldz4gbV9pbnNwZWN0b3JWaWV3OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjc3NTUzYzZiLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94
eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViSW5zcGVj
dG9yUHJveHkgewotICAgIE9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNo
LCBib29sIHVuZGVyVGVzdCkKLSAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2ht
ZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQotCi0gICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3Ry
aW5nIG1lc3NhZ2UpCi0KLSAgICBGcm9udGVuZExvYWRlZCgpCi0gICAgRGlkQ2xvc2UoKQotICAg
IEJyaW5nVG9Gcm9udCgpCi0gICAgQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi0gICAgUmVv
cGVuKCkKLSAgICBSZXNldFN0YXRlKCkKLQotICAgIEluc3BlY3RlZFVSTENoYW5nZWQoU3RyaW5n
IHVybFN0cmluZykKLSAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
IGNlcnRpZmljYXRlSW5mbykKLSAgICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2
ZSkKLSAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi0gICAgU2V0TW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi0K
LSAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKLSAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJp
bmcgY29udGVudCkKLQotICAgIEF0dGFjaEJvdHRvbSgpCi0gICAgQXR0YWNoUmlnaHQoKQotICAg
IEF0dGFjaExlZnQoKQotICAgIERldGFjaCgpCi0KLSAgICBBdHRhY2hBdmFpbGFiaWxpdHlDaGFu
Z2VkKGJvb2wgYXZhaWxhYmxlKQotCi0gICAgU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgaGVpZ2h0KQotICAgIFNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi0K
LSAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0KLSAgICBTdGFydFdp
bmRvd0RyYWcoKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5z
cGVjdG9yVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3Rv
clV0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZWExNWVlNjU3
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JV
dGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgi
Ci0KLSNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJX
ZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQ
cm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi10eXBlZGVmIEhhc2hNYXA8V2ViUGFnZVByb3h5KiwgdW5zaWduZWQ+IFBhZ2VMZXZlbE1h
cDsKLQotc3RhdGljIFBhZ2VMZXZlbE1hcCYgcGFnZUxldmVsTWFwKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8UGFnZUxldmVsTWFwPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQot
dW5zaWduZWQgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAg
ICBpZiAocGFnZSkgewotICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBwYWdlTGV2ZWxNYXAoKS5m
aW5kKHBhZ2UpOwotICAgICAgICBpZiAoZmluZFJlc3VsdCAhPSBwYWdlTGV2ZWxNYXAoKS5lbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZSArIDE7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIDE7Ci19Ci0KLVN0cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9y
UGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIl9fV2Vi
SW5zcGVjdG9yUGFnZUdyb3VwTGV2ZWwiLCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UocGFnZSksICJf
XyIpOwotfQotCi12b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3Rv
clBhZ2UsIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKLXsKLSAgICBwYWdlTGV2ZWxNYXAo
KS5zZXQoaW5zcGVjdG9yUGFnZSwgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2Up
KTsKLX0KLQotdm9pZCB1bnRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3Rv
clBhZ2UpCi17Ci0gICAgcGFnZUxldmVsTWFwKCkucmVtb3ZlKGluc3BlY3RvclBhZ2UpOwotfQot
Ci1zdGF0aWMgV2ViUHJvY2Vzc1Bvb2wqIHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sOwotc3Rh
dGljIFdlYlByb2Nlc3NQb29sKiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sOwotCi1XZWJQ
cm9jZXNzUG9vbCYgaW5zcGVjdG9yUHJvY2Vzc1Bvb2wodW5zaWduZWQgaW5zcGVjdGlvbkxldmVs
KQotewotICAgIC8vIEhhdmluZyBvdXIgb3duIHByb2Nlc3MgcG9vbCByZW1vdmVzIHVzIGZyb20g
dGhlIG1haW4gcHJvY2VzcyBwb29sIGFuZAotICAgIC8vIGd1YXJhbnRlZXMgbm8gcHJvY2VzcyBz
aGFyaW5nIGZvciBvdXIgdXNlciBpbnRlcmZhY2UuCi0gICAgV2ViUHJvY2Vzc1Bvb2wqJiBwb29s
ID0gKGluc3BlY3Rpb25MZXZlbCA9PSAxKSA/IHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sIDog
c19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbDsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAg
YXV0byBjb25maWd1cmF0aW9uID0gQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0
ZSgpOwotICAgICAgICBwb29sID0gJldlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlv
bi5nZXQoKSkubGVha1JlZigpOwotICAgICAgICAvLyBEbyBub3QgZGVsYXkgcHJvY2VzcyBsYXVu
Y2ggZm9yIGluc3BlY3RvciBwYWdlcyBhcyBpbnNwZWN0b3IgcGFnZXMgZG8gbm90IGtub3cgaG93
IHRvIHRyYW5zaXRpb24gZnJvbSBhIHRlcm1pbmF0ZWQgcHJvY2Vzcy4KLSAgICAgICAgcG9vbC0+
ZGlzYWJsZURlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoKCk7Ci0gICAgfQotICAgIHJldHVybiAqcG9v
bDsKLX0KLQotYm9vbCBpc0luc3BlY3RvclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9j
ZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gKHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sICYmIHNf
bWFpbkluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9jZXNzUG9vbCkKLSAgICAgICAgfHwgKHNf
bmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9v
bCA9PSAmcHJvY2Vzc1Bvb2wpOwotfQotCi1ib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJv
eHkmIHdlYlBhZ2UpCi17Ci0gICAgcmV0dXJuIHBhZ2VMZXZlbE1hcCgpLmNvbnRhaW5zKCZ3ZWJQ
YWdlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjMTllYTc1ODhjYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNz
IFdlYlByb2Nlc3NQb29sOwotCi0vLyBUaGUgaW5zcGVjdG9yIHBhZ2UgZ3JvdXBzIGFyZSB1c2Vk
IHRvIGdpdmUgZGlmZmVyZW50IHByZWZlcmVuY2VzIHRvIGVhY2gKLS8vIGluc3BlY3RvciBsZXZl
bCBieSBzZXR0aW5nIGEgcGVyLWxldmVsIHBhZ2UgZ3JvdXAgaWRlbnRpZmllci4KLXVuc2lnbmVk
IGluc3BlY3RvckxldmVsRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKLVN0cmluZyBpbnNwZWN0b3JQ
YWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKLXZvaWQgdHJhY2tJbnNw
ZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNw
ZWN0ZWRQYWdlKTsKLXZvaWQgdW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNw
ZWN0b3JQYWdlKTsKLQotV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVuc2ln
bmVkIGluc3BlY3Rpb25MZXZlbCk7Ci1ib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJv
Y2Vzc1Bvb2wmKTsKLWJvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYpOwotCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYmJkZjg3YWNlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlRGVidWdnYWJsZS5o
IgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJXZWJGcmFtZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLVdlYlBhZ2VEZWJ1Z2dhYmxlOjpXZWJQYWdlRGVidWdnYWJsZShXZWJQ
YWdlUHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLXsKLX0KLQotU3RyaW5nIFdlYlBh
Z2VEZWJ1Z2dhYmxlOjpuYW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7Ci0KLSAgICBpZiAoIW1fcGFn
ZS5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1f
cGFnZS5tYWluRnJhbWUoKS0+dGl0bGUoKTsKLX0KLQotU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxl
Ojp1cmwoKSBjb25zdAotewotICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQotICAgICAgICBy
ZXR1cm4gV1RGOjpibGFua1VSTCgpLnN0cmluZygpOwotCi0gICAgU3RyaW5nIHVybCA9IG1fcGFn
ZS5tYWluRnJhbWUoKS0+dXJsKCkuc3RyaW5nKCk7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gdXJs
OwotfQotCi1ib29sIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250
ZW5kKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFu
bmVsJiBjaGFubmVsLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVs
eVBhdXNlKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250
ZW5kKGNoYW5uZWwsIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgaW1tZWRpYXRlbHlQYXVzZSk7Ci19
Ci0KLXZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmRpc2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBj
aGFubmVsKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZy
b250ZW5kKGNoYW5uZWwpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1l
c3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3BhZ2UuaW5z
cGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsK
LX0KLQotdm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRp
bmcpCi17Ci0gICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbmRpY2F0aW5nKGlu
ZGljYXRpbmcpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUo
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fbmFtZU92ZXJyaWRlID0gbmFtZTsKLSAgICB1
cGRhdGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VEZWJ1Z2dhYmxlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdn
YWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjg0OGRlMTE2YS4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdGlvblRhcmdl
dC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViUGFnZVByb3h5OwotCi1jbGFzcyBXZWJQYWdlRGVidWdnYWJsZSBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rpb25UYXJnZXQgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VEZWJ1Z2dh
YmxlKTsKLXB1YmxpYzoKLSAgICBXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmKTsKLSAg
ICB+V2ViUGFnZURlYnVnZ2FibGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJbnNwZWN0b3I6OlJlbW90
ZUNvbnRyb2xsYWJsZVRhcmdldDo6VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5z
cGVjdG9yOjpSZW1vdGVDb250cm9sbGFibGVUYXJnZXQ6OlR5cGU6OldlYlBhZ2U7IH0KLQotICAg
IFN0cmluZyBuYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgU3RyaW5nIHVybCgpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgaGFzTG9jYWxEZWJ1Z2dlcigpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBj
b25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5l
Y3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIGZpbmFsOwotICAg
IHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIGZpbmFsOwotICAg
IHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZp
bmFsOwotICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKSBmaW5hbDsKLQotICAgIGNvbnN0IFN0
cmluZyYgbmFtZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7IH0KLSAg
ICB2b2lkIHNldE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBX
ZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAgICBTdHJpbmcgbV9uYW1lT3ZlcnJpZGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DT05UUk9MTEFC
TEVfVEFSR0VUKFdlYktpdDo6V2ViUGFnZURlYnVnZ2FibGUsIFdlYlBhZ2UpOwotCi0jZW5kaWYg
Ly8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDFlZTI4YmY3MTYzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgotCi0jaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKLSNpbmNsdWRl
ICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgot
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFnZW50QmFzZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2Vu
dC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1zdGF0aWMgU3RyaW5nIGdldFRhcmdldElEKGNv
bnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCi17Ci0gICAgcmV0dXJu
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlLndlYlBh
Z2VJRCgpKTsKLX0KLQotV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAg
ICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRlKCkpCi0gICAgLCBtX2Jh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUobV9mcm9udGVuZFJvdXRl
ci5jb3B5UmVmKCkpKQotewotICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVlPEluc3Bl
Y3RvclRhcmdldEFnZW50PihtX2Zyb250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmREaXNwYXRj
aGVyLmdldCgpKTsKLQotICAgIG1fdGFyZ2V0QWdlbnQgPSB0YXJnZXRBZ2VudC5nZXQoKTsKLQot
ICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdldEFnZW50KSk7Ci19Ci0KLXZvaWQgV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmluaXQoKQotewotICAgIFN0cmluZyBwYWdlVGFyZ2V0
SWQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG1fcGFnZS53ZWJQYWdlSUQo
KSk7Ci0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cGFnZUNsb3NlZCgpCi17Ci0gICAgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOwot
Ci0gICAgbV9hZ2VudHMuZGlzY2FyZFZhbHVlcygpOwotfQotCi1ib29sIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpoYXNMb2NhbEZyb250ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9m
cm9udGVuZFJvdXRlci0+aGFzTG9jYWxGcm9udGVuZCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmIGZyb250ZW5kQ2hhbm5lbCwgYm9vbCwgYm9vbCkKLXsKLSAgICBib29sIGNvbm5lY3RpbmdG
aXJzdEZyb250ZW5kID0gIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpOwotCi0gICAg
bV9mcm9udGVuZFJvdXRlci0+Y29ubmVjdEZyb250ZW5kKGZyb250ZW5kQ2hhbm5lbCk7Ci0KLSAg
ICBpZiAoY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQpCi0gICAgICAgIG1fYWdlbnRzLmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZCgmbV9mcm9udGVuZFJvdXRlci5nZXQoKSwgJm1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCkpOwotCi0gICAgbV9wYWdlLmRpZENoYW5nZUluc3BlY3RvckZyb250ZW5k
Q291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsKLQotI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQotICAgIGlmIChoYXNMb2NhbEZyb250ZW5kKCkpCi0gICAgICAgIG1f
cGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0K
LXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZChGcm9u
dGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCkKLXsKLSAgICBtX2Zyb250ZW5kUm91dGVyLT5k
aXNjb25uZWN0RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVsKTsKLQotICAgIGJvb2wgZGlzY29ubmVj
dGluZ0xhc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKLSAg
ICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkKLSAgICAgICAgbV9hZ2VudHMud2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdG9yRGVzdHJv
eWVkKTsKLQotICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJv
bnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLSAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkKLSAgICAgICAgbV9wYWdl
LnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEFsbEZyb250ZW5kcygpCi17
Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBhIGxvY2FsIGluc3BlY3RvciBjbGllbnQuCi0KLSAgICBp
ZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBOb3RpZnkgYWdlbnRzIGZpcnN0LCBzaW5jZSB0aGV5IG1heSBuZWVkIHRvIHVzZSBJ
bnNwZWN0b3JDbGllbnQuCi0gICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsKLQotICAgIC8v
IERpc2Nvbm5lY3QgYW55IHJlbWFpbmluZyByZW1vdGUgZnJvbnRlbmRzLgotICAgIG1fZnJvbnRl
bmRSb3V0ZXItPmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIG1fcGFnZS5kaWRDaGFu
Z2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQo
KSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBtX3BhZ2UucmVtb3RlSW5z
cGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPmRpc3BhdGNoKG1lc3Nh
Z2UpOwotfQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi12b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKLXsKLSNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3BhZ2Uuc2V0SW5kaWNhdGluZyhpbmRpY2F0aW5n
KTsKLSNlbHNlCi0gICAgaWYgKGluZGljYXRpbmcpCi0gICAgICAgIG1fcGFnZS5zaG93SW5zcGVj
dG9ySW5kaWNhdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYWdlLmhpZGVJbnNwZWN0b3JJ
bmRpY2F0aW9uKCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCi17Ci0gICAgYWRkVGFyZ2V0KElu
c3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSkpOwotfQot
Ci12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCi17Ci0gICAgYXV0byBpdCA9IG1fdGFyZ2V0cy5maW5k
KHRhcmdldElkKTsKLSAgICBpZiAoaXQgPT0gbV90YXJnZXRzLmVuZCgpKQotICAgICAgICByZXR1
cm47Ci0gICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCppdC0+dmFsdWUpOwotICAg
IG1fdGFyZ2V0cy5yZW1vdmUoaXQpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNz
YWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2UpOwotfQotCi1ib29sIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzaG91bGRQYXVzZUxvYWRpbmcoY29uc3QgUHJvdmlz
aW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fZnJv
bnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFn
ZSkpOwotICAgIEFTU0VSVCh0YXJnZXQpOwotICAgIHJldHVybiB0YXJnZXQtPmlzUGF1c2VkKCk7
Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldENvbnRpbnVlTG9hZGlu
Z0NhbGxiYWNrKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIFdU
Rjo6RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGF1dG8qIHRhcmdldCA9IG1f
dGFyZ2V0cy5nZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci0gICAgQVNTRVJUKHRh
cmdldCk7Ci0gICAgdGFyZ2V0LT5zZXRSZXN1bWVDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lv
bmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIGFk
ZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0
VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBl
OjpQYWdlKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxEZXN0
cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25h
bFBhZ2UpCi17Ci0gICAgZGVzdHJveUluc3BlY3RvclRhcmdldChnZXRUYXJnZXRJRChwcm92aXNp
b25hbFBhZ2UpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29t
bWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlEKQotewotICAgIFN0cmluZyBvbGRJ
RCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQob2xkV2ViUGFnZUlEKTsKLSAg
ICBTdHJpbmcgbmV3SUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dl
YlBhZ2VJRCk7Ci0gICAgYXV0byBuZXdUYXJnZXQgPSBtX3RhcmdldHMudGFrZShuZXdJRCk7Ci0g
ICAgQVNTRVJUKG5ld1RhcmdldCk7Ci0gICAgbmV3VGFyZ2V0LT5kaWRDb21taXRQcm92aXNpb25h
bFRhcmdldCgpOwotICAgIG1fdGFyZ2V0QWdlbnQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0
KG9sZElELCBuZXdJRCk7Ci0KLSAgICAvLyBXZSd2ZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xk
IHBhZ2UgYW5kIHdpbGwgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2UgZnJvbSBpdCwgc28KLSAgICAv
LyB3ZSBkZXN0cm95IGV2ZXJ5dGhpbmcgYnV0IHRoZSBuZXcgdGFyZ2V0IGhlcmUuCi0gICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDI5Mzc+IGRvIG5vdCBkZXN0cm95IHRhcmdl
dHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvbW1pdHRlZCBwYWdlLgotICAgIGZvciAoYXV0byYgdGFy
Z2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQotICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXRE
ZXN0cm95ZWQoKnRhcmdldCk7Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV90YXJnZXRz
LnNldChuZXdUYXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZShuZXdUYXJnZXQpKTsKLX0KLQot
dm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJiB0YXJnZXQpCi17Ci0gICAgbV90YXJnZXRBZ2VudC0+
dGFyZ2V0Q3JlYXRlZCgqdGFyZ2V0KTsKLSAgICBtX3RhcmdldHMuc2V0KHRhcmdldC0+aWRlbnRp
ZmllcigpLCBXVEZNb3ZlKHRhcmdldCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNhZWRmMGMwYy4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkluc3Bl
Y3RvclRhcmdldFByb3h5LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdl
bnRSZWdpc3RyeS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFn
ZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgQmFja2Vu
ZERpc3BhdGNoZXI7Ci1jbGFzcyBGcm9udGVuZENoYW5uZWw7Ci1jbGFzcyBGcm9udGVuZFJvdXRl
cjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7Ci0KLSAgICB2b2lkIGluaXQoKTsK
LSAgICB2b2lkIHBhZ2VDbG9zZWQoKTsKLQotICAgIGJvb2wgaGFzTG9jYWxGcm9udGVuZCgpIGNv
bnN0OwotCi0gICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmLCBib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5
UGF1c2UgPSBmYWxzZSk7Ci0gICAgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWwmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQot
ICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICB2b2lkIHNldEluZGljYXRp
bmcoYm9vbCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAg
dm9pZCBkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOwotICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSAgICBib29sIHNob3VsZFBhdXNlTG9hZGlu
Zyhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGlu
dWVMb2FkaW5nQ2FsbGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92
aXNpb25hbFBhZ2VQcm94eSYpOwotICAgIHZvaWQgd2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2Uo
Y29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lv
bmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhZGRUYXJn
ZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmKTsKLQotICAgIFdlYlBh
Z2VQcm94eSYgbV9wYWdlOwotICAgIFJlZjxJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zy
b250ZW5kUm91dGVyOwotICAgIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwotICAgIEluc3BlY3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsK
LSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KiBtX3RhcmdldEFnZW50OwotICAg
IEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBt
X3RhcmdldHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlkNTBkYzI4NmIuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUlu
c3BlY3RvckNsaWVudC5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNs
dWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yVXRpbHMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8
Z2lvL2dpby5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVi
bGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3Bl
Y3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2
NF90IHRhcmdldElEKQotICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OmNyZWF0ZSgpKQotICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkK
LSAgICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJn
ZXRJRCh0YXJnZXRJRCkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsK
LSAgICB9Ci0KLSAgICB+UmVtb3RlSW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAgICAgbV9w
cm94eS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7
Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FIDxodHRw
czovL3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBk
YXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJ
bmZvPiBkZWJ1Z2dhYmxlSW5mbyA9IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dh
YmxlSW5mb0RhdGE6OmVtcHR5KCkpOwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdn
YWJsZVR5cGUoSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZSk7Ci0gICAgICAgIG1f
cHJveHktPmxvYWQoV1RGTW92ZShkZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xpZW50LmJh
Y2tlbmRDb21tYW5kc1VSTCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAg
ICAgICAgbV9wcm94eS0+c2hvdygpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VGFyZ2V0TmFtZShj
b25zdCBDU3RyaW5nJiBuYW1lKQotICAgIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIG1f
cHJveHktPnVwZGF0ZVdpbmRvd1RpdGxlKG5hbWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9p
ZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAg
ICAgICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tl
bmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZv
aWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0
b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJv
eHk7Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLSAgICB1
aW50NjRfdCBtX2Nvbm5lY3Rpb25JRDsKLSAgICB1aW50NjRfdCBtX3RhcmdldElEOwotfTsKLQot
Y29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzJiBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6Om1lc3NhZ2VIYW5kbGVycygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycz4gbWVzc2FnZUhhbmRsZXJzID0g
U29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzKHsKLSAgICB7ICJEaWRDbG9zZSIsIHN0
ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9
LAotICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2Vy
RGF0YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUlu
c3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGNsaWVudC5jb25uZWN0aW9u
RGlkQ2xvc2UoKTsKLSAgICAgICAgfX0KLSAgICB9LAotICAgIHsgIkRpZFNldHVwSW5zcGVjdG9y
Q2xpZW50Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxs
YmFjaz4geyAiKGF5KSIsCi0gICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCog
cGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIGNsaWVu
dCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7Ci0gICAg
ICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiBiYWNrZW5kQ29tbWFuZHNWYXJpYW50OwotICAgICAg
ICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKEBheSkiLCAmYmFja2VuZENvbW1hbmRz
VmFyaWFudC5vdXRQdHIoKSk7Ci0gICAgICAgICAgICBjbGllbnQuc2V0QmFja2VuZENvbW1hbmRz
KGdfdmFyaWFudF9nZXRfYnl0ZXN0cmluZyhiYWNrZW5kQ29tbWFuZHNWYXJpYW50LmdldCgpKSk7
Ci0gICAgICAgIH19Ci0gICAgfSwKLSAgICB7ICJTZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENT
dHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHRhKHRzc3NiKSki
LAotICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdw
b2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nh
c3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgZ3VpbnQ2
NCBjb25uZWN0aW9uSUQ7Ci0gICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4g
aXRlcjsKLSAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0YSh0c3NzYikp
IiwgJmNvbm5lY3Rpb25JRCwgJml0ZXIub3V0UHRyKCkpOwotICAgICAgICAgICAgc2l6ZV90IHRh
cmdldENvdW50ID0gZ192YXJpYW50X2l0ZXJfbl9jaGlsZHJlbihpdGVyLmdldCgpKTsKLSAgICAg
ICAgICAgIFZlY3RvcjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlRhcmdldD4gdGFyZ2V0TGlzdDsK
LSAgICAgICAgICAgIHRhcmdldExpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0YXJnZXRDb3Vu
dCk7Ci0gICAgICAgICAgICBndWludDY0IHRhcmdldElEOwotICAgICAgICAgICAgY29uc3QgY2hh
ciogdHlwZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyKiB1cmw7Ci0gICAgICAgICAgICBnYm9vbGVhbiBoYXNMb2NhbERlYnVnZ2VyOwotICAg
ICAgICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoaXRlci5nZXQoKSwgIih0JnMmcyZz
YikiLCAmdGFyZ2V0SUQsICZ0eXBlLCAmbmFtZSwgJnVybCwgJmhhc0xvY2FsRGVidWdnZXIpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAodHlwZSwgIldlYiIpIHx8ICFnX3N0cmNt
cDAodHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGlzdC51
bmNoZWNrZWRBcHBlbmQoeyB0YXJnZXRJRCwgdHlwZSwgbmFtZSwgdXJsIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2xpZW50LnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZN
b3ZlKHRhcmdldExpc3QpKTsKLSAgICAgICAgfX0KLSAgICB9LAotICAgIHsgIlNlbmRNZXNzYWdl
VG9Gcm9udGVuZCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdl
Q2FsbGJhY2s+IHsgIih0dHMpIiwKLSAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJp
YW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYg
Y2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsK
LSAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklELCB0YXJnZXRJRDsKLSAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG1lc3NhZ2U7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRl
cnMsICIodHQmcykiLCAmY29ubmVjdGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdlKTsKLSAgICAg
ICAgICAgIGNsaWVudC5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29ubmVjdGlvbklELCB0YXJnZXRJ
RCwgbWVzc2FnZSk7Ci0gICAgICAgIH19Ci0gICAgfQotICAgIH0pOwotICAgIHJldHVybiBtZXNz
YWdlSGFuZGxlcnM7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNsaWVudDo6UmVtb3RlSW5zcGVjdG9y
Q2xpZW50KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rv
ck9ic2VydmVyJiBvYnNlcnZlcikKLSAgICA6IG1faG9zdEFuZFBvcnQoU3RyaW5nOjpmcm9tVVRG
OChhZGRyZXNzKSArICc6JyArIFN0cmluZzo6bnVtYmVyKHBvcnQpKQotICAgICwgbV9vYnNlcnZl
cihvYnNlcnZlcikKLSAgICAsIG1fY2FuY2VsbGFibGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVf
bmV3KCkpKQotewotICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRv
cHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7Ci0gICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5l
Y3RfdG9faG9zdF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0KCksIG1faG9zdEFuZFBvcnQudXRmOCgp
LmRhdGEoKSwgMCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgW10oR09iamVjdCogb2Jq
ZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAg
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R1Nv
Y2tldENvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nv
bm5lY3RfdG9faG9zdF9maW5pc2goR19TT0NLRVRfQ0xJRU5UKG9iamVjdCksIHJlc3VsdCwgJmVy
cm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdl
dCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgYXV0byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8UmVtb3RlSW5z
cGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pCi0g
ICAgICAgICAgICAgICAgY2xpZW50LT5zZXR1cENvbm5lY3Rpb24oU29ja2V0Q29ubmVjdGlvbjo6
Y3JlYXRlKFdURk1vdmUoY29ubmVjdGlvbiksIG1lc3NhZ2VIYW5kbGVycygpLCBjbGllbnQpKTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIGluc3BlY3RvciBzZXJ2ZXI6ICVz
IiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGNsaWVudC0+bV9vYnNlcnZlci5j
b25uZWN0aW9uQ2xvc2VkKCpjbGllbnQpOwotICAgICAgICAgICAgfQotICAgIH0sIHRoaXMpOwot
fQotCi1SZW1vdGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQotewot
ICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwotfQotCi12b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0
aW9uPiYmIGNvbm5lY3Rpb24pCi17Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShj
b25uZWN0aW9uKTsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXR1cElu
c3BlY3RvckNsaWVudCIsIGdfdmFyaWFudF9uZXcoIihAYXkpIiwgZ192YXJpYW50X25ld19ieXRl
c3RyaW5nKEluc3BlY3Rvcjo6YmFja2VuZENvbW1hbmRzSGFzaCgpLmRhdGEoKSkpKTsKLX0KLQot
dm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFy
KiBiYWNrZW5kQ29tbWFuZHMpCi17Ci0gICAgaWYgKCFiYWNrZW5kQ29tbWFuZHMgfHwgIWJhY2tl
bmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IFN0cmluZygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7
Ci0gICAgYmFzZTY0RW5jb2RlKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5k
cyksIGJhc2U2NERhdGEpOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9q
YXZhc2NyaXB0O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCi17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7
Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVhcigpOwotICAgIG1fc29ja2V0Q29ubmVjdGlv
biA9IG51bGxwdHI7Ci0gICAgbV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKLX0K
LQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3QodWludDY0X3QgY29ubmVjdGlv
bklELCB1aW50NjRfdCB0YXJnZXRJRCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVj
dG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQp
LCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRF0gewotICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQp
OwotICAgIH0pOwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRf
bmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+dmFsdWUtPmxvYWQoKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
bmRNZXNzYWdlVG9CYWNrZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0
SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNl
bmRNZXNzYWdlKCJTZW5kTWVzc2FnZVRvQmFja2VuZCIsIGdfdmFyaWFudF9uZXcoIih0dHMpIiwg
Y29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25u
ZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotewotICAgIEFTU0VSVChtX2luc3BlY3RvclBy
b3h5TWFwLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKSk7
Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiRnJvbnRlbmREaWRDbG9zZSIs
IGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0gICAgbV9p
bnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJn
ZXRJRCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCh1
aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYgdGFyZ2V0TGlzdCkKLXsKLSAg
ICAvLyBGaW5kIGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3Rvcjx1aW50
NjRfdCwgND4gdGFyZ2V0c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYgY29ubmVjdGlvblRhcmdl
dFBhaXIgOiBtX2luc3BlY3RvclByb3h5TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoY29ubmVj
dGlvblRhcmdldFBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB0YXJnZXQgOiB0YXJnZXRMaXN0KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IGNv
bm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCkgewotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9y
UHJveHlNYXAuZ2V0KGNvbm5lY3Rpb25UYXJnZXRQYWlyKS0+c2V0VGFyZ2V0TmFtZSh0YXJnZXQu
bmFtZSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZm91bmQpCi0gICAg
ICAgICAgICB0YXJnZXRzVG9SZW1vdmUuYXBwZW5kKGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29u
ZCk7Ci0gICAgfQotICAgIGZvciAoYXV0byB0YXJnZXRJRCA6IHRhcmdldHNUb1JlbW92ZSkKLSAg
ICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlv
bklELCB0YXJnZXRJRCkpOwotCi0gICAgbV90YXJnZXRzLnNldChjb25uZWN0aW9uSUQsIFdURk1v
dmUodGFyZ2V0TGlzdCkpOwotICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMp
OwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCi17Ci0gICAgYXV0byBwcm94eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6
bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLSAgICBBU1NFUlQocHJveHkpOwot
ICAgIGlmICghcHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICBwcm94eS0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZWUwMmNlNWQ2Li4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCisr
KyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvU29j
a2V0Q29ubmVjdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBl
ZGVmIHN0cnVjdCBfR0NhbmNlbGxhYmxlIEdDYW5jZWxsYWJsZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsKLWNsYXNzIFJlbW90ZUluc3BlY3Rv
clByb3h5OwotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUlu
c3BlY3Rvck9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JP
YnNlcnZlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQo
UmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOwotfTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJl
bW90ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYpOwotICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsK
LQotICAgIHN0cnVjdCBUYXJnZXQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdWludDY0X3QgaWQ7
Ci0gICAgICAgIENTdHJpbmcgdHlwZTsKLSAgICAgICAgQ1N0cmluZyBuYW1lOwotICAgICAgICBD
U3RyaW5nIHVybDsKLSAgICB9OwotCi0gICAgY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9y
PFRhcmdldD4+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiBob3N0QW5kUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0K
LSAgICBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZENvbW1hbmRzVVJMOyB9Ci0KLSAgICB2b2lkIGluc3BlY3QodWludDY0X3QgY29ubmVj
dGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2Vu
ZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWlu
dDY0X3QgdGFyZ2V0SUQpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25u
ZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMmIG1lc3NhZ2VIYW5kbGVycygpOwotICAgIHZvaWQgc2V0
dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmKTsKLSAgICB2b2lkIGNvbm5lY3Rp
b25EaWRDbG9zZSgpOwotCi0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciop
OwotICAgIHZvaWQgc2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxU
YXJnZXQ+JiYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5l
Y3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqKTsKLQotICAgIFN0cmluZyBt
X2hvc3RBbmRQb3J0OwotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLSAgICBSZW1v
dGVJbnNwZWN0b3JPYnNlcnZlciYgbV9vYnNlcnZlcjsKLSAgICBSZWZQdHI8U29ja2V0Q29ubmVj
dGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2Nh
bmNlbGxhYmxlOwotICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiBtX3Rhcmdl
dHM7Ci0gICAgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlx
dWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTljNDQ2NTc2OC4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3Rv
clByb3h5Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQg
ewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgPSBkZWZh
dWx0OwotICAgIHZpcnR1YWwgYm9vbCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5JikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5JiwgY29u
c3QgU3RyaW5nJiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3Rv
clByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yUHJveHkm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3Bl
Y3RvclByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCB3aWR0aCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVj
dG9yUHJveHkmLCBib29sIGF2YWlsYWJsZSkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkZTM0OWJiNzEuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+LgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIK
LQotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0
aW9uLmgiCi0jaW5jbHVkZSAiV0tBcnJheS5oIgotI2luY2x1ZGUgIldLQ29udGV4dE1lbnVJdGVt
LmgiCi0jaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgot
I2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJ
bmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1z
dGF0aWMgdm9pZCBpbnNwZWN0b3JWaWV3RGVzdHJveWVkKEd0a1dpZGdldCosIGdwb2ludGVyIHVz
ZXJEYXRhKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3JQcm94eSA9IHN0YXRp
Y19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4odXNlckRhdGEpOwotCi0gICAgLy8gSW5mb3JtIFdl
YlByb2Nlc3MgYWJvdXQgd2ViaW5zcGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBzbywKLSAgICAv
LyByZXN1bHRzIGluIGZhaWx1cmUgb2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIHdlYmluc3Bl
Y3Rvci4KLSAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dD4mJiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIHdlYmtpdEluc3BlY3Rvcldp
bmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1faW5zcGVjdG9yV2luZG93
KSwgIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSA/IG1faW5zcGVjdGVkVVJMU3RyaW5n
LnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u
ZyBleGNlZWRlZERhdGFiYXNlUXVvdGEoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5
T3JpZ2luUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIHVuc2lnbmVkIGxvbmcgbG9uZywg
dW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNh
Z2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBjb25zdCB2b2lkKikKLXsKLSAg
ICByZXR1cm4gc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVzYWdlLCBjdXJy
ZW50RGF0YWJhc2VVc2FnZSAqIDEuMjUpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlk
Q3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYkluc3Bl
Y3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclBy
b3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotICAgIEFTU0VSVCh3ZWJJbnNw
ZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0K
LQotc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYg
cGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJh
bWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQotewotICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBh
bnl3aGVyZS4KLSAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdh
dGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJjZUZyYW1lICYmICFz
b3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYp
LT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkluc3Bl
Y3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkluc3Bl
Y3RvclByb3h5Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsK
LQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRp
b25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBt
YWluIGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JU
ZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICB0b0ltcGwobGlzdGVu
ZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZXZl
bnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4K
LSAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKLQotICAgIC8vIEFuZCBpbnN0ZWFk
IGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclByb3h5LT5p
bnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi1zdGF0
aWMgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdlUmVmIHBhZ2VSZWYs
IFdLQXJyYXlSZWYgcHJvcG9zZWRNZW51UmVmLCBXS0FycmF5UmVmKiBuZXdNZW51UmVmLCBXS0hp
dFRlc3RSZXN1bHRSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCi17Ci0gICAgV0tNdXRhYmxl
QXJyYXlSZWYgbWVudUl0ZW1zID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKLQotICAgIHNpemVf
dCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHByb3Bvc2VkTWVudVJlZik7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVm
IGNvbnRleHRNZW51SXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgocHJvcG9zZWRNZW51UmVmLCBpKSk7Ci0gICAgICAgIHN3aXRjaCAo
V0tDb250ZXh0TWVudUl0ZW1HZXRUYWcoY29udGV4dE1lbnVJdGVtKSkgewotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lbnVJ
dGVtcywgY29udGV4dE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgKm5ld01lbnVSZWYgPSBtZW51SXRlbXM7Ci19Ci0KLVdlYlBhZ2VQcm94eSog
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBB
U1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yVmlldyk7Ci0K
LSAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwg
IldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0jaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQotICAg
IC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1
ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1Bh
Z2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBwcmVm
ZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7Ci0gICAgfSk7Ci0gICAgYXV0byBw
YWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlm
aWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRp
b24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJh
dGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZl
bCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2Vz
LnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5w
dHIoKSk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFz
ZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKLSAgICBnX29iamVjdF9hZGRfd2Vh
a19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmbV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3Rv
clZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhp
cyk7Ci0KLSAgICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xpZW50ID0gewotICAgICAgICB7IDIsIHRo
aXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNl
V2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCi0gICAgICAgIG51bGxwdHIsIC8v
IGNsb3NlUGFnZQotICAgICAgICBudWxscHRyLCAvLyB0YWtlRm9jdXMKLSAgICAgICAgbnVsbHB0
ciwgLy8gZm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1cwotICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlw
dENvbmZpcm0KLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdAotICAgICAg
ICBudWxscHRyLCAvLyBzZXRTdGF0dXNUZXh0Ci0gICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwg
Ly8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAotICAg
ICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAotICAgICAgICBudWxscHRyLCAv
LyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGFyZVRvb2xiYXJz
VmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUKLSAgICAgICAg
bnVsbHB0ciwgLy8gaXNNZW51QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51
QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2libGUKLSAgICAg
ICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBp
c1Jlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRSZXNpemFibGUKLSAgICAgICAgbnVs
bHB0ciwgLy8gZ2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFdpbmRvd0Zy
YW1lLAotICAgICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdwotICAgICAgICBudWxscHRyLCAvLyBwYWdlRGlkU2Ny
b2xsCi0gICAgICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKLSAgICAgICAgbnVsbHB0ciwgLy8g
cnVuT3BlblBhbmVsLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIsIC8vIGhlYWRlckhlaWdodAot
ICAgICAgICBudWxscHRyLCAvLyBmb290ZXJIZWlnaHQKLSAgICAgICAgbnVsbHB0ciwgLy8gZHJh
d0hlYWRlcgotICAgICAgICBudWxscHRyLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAgIG51bGxwdHIs
IC8vIHByaW50RnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKLSAgICAgICAgbnVs
bHB0ciwgLy8gdW51c2VkCi0gICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3du
bG9hZHNGb2xkZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dAotICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZv
ck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIsIC8vIHVuYXZh
aWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxCi0gICAgICAg
IG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgotICAgICAgICBudWxscHRyLCAvLyBoaWRlQ29s
b3JQaWNrZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlj
a2VkCi0gICAgfTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xp
ZW50ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvblJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxv
YWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRp
b24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgotICAgICAgICBudWxs
cHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxO
YXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1
YmZyYW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAotICAgICAg
ICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIs
IC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAgICAgIHdlYlByb2Nlc3NEaWRDcmFz
aCwKLSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQotCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwg
Ly8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5h
dmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25H
ZXN0dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgV0tQYWdlQ29udGV4dE1lbnVDbGllbnRWMyBj
b250ZXh0TWVudUNsaWVudCA9IHsKLSAgICAgICAgeyAzLCB0aGlzIH0sCi0gICAgICAgIG51bGxw
dHIsIC8vIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0
aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNlbGVjdGVkCi0g
ICAgICAgIG51bGxwdHIsIC8vIGNvbnRleHRNZW51RGlzbWlzc2VkCi0gICAgICAgIGdldENvbnRl
eHRNZW51RnJvbVByb3Bvc2VkTWVudSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbnRleHRN
ZW51Ci0gICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVudQotICAgIH07Ci0KLSAgICBX
ZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VC
S0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgQVNTRVJUKGluc3BlY3Rv
clBhZ2UpOwotCi0gICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2Up
LCAmdWlDbGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9B
UEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotICAgIFdLUGFnZVNl
dFBhZ2VDb250ZXh0TWVudUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNvbnRleHRNZW51
Q2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQotewotICAgIGlm
IChtX2NsaWVudCAmJiBtX2NsaWVudC0+b3BlbldpbmRvdygqdGhpcykpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEd0a1dpZGdldCogaW5zcGVjdGVkVmlld1BhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLSAgICBpZiAoIVdlYkNv
cmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhpbnNwZWN0ZWRWaWV3UGFyZW50KSkK
LSAgICAgICAgaW5zcGVjdGVkVmlld1BhcmVudCA9IG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoIW1f
aW5zcGVjdG9yV2luZG93KTsKLSAgICBtX2luc3BlY3RvcldpbmRvdyA9IHdlYmtpdEluc3BlY3Rv
cldpbmRvd05ldyhpbnNwZWN0ZWRWaWV3UGFyZW50ID8gR1RLX1dJTkRPVyhpbnNwZWN0ZWRWaWV3
UGFyZW50KSA6IG51bGxwdHIpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
bV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwotICAgIGd0a193aWRnZXRfc2hv
dyhtX2luc3BlY3RvclZpZXcpOwotCi0gICAgaWYgKCFtX2luc3BlY3RlZFVSTFN0cmluZy5pc0Vt
cHR5KCkpCi0gICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci0KLSAgICBnX29i
amVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yV2luZG93KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvcldpbmRvdykpOwotICAgIGd0a193aW5kb3df
cHJlc2VudChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAg
IGlmIChtX2luc3BlY3RvclZpZXcpIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5z
cGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBu
dWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRp
ZENsb3NlKCp0aGlzKTsKLQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBn
dGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3Rv
cldpbmRvdyA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBpZiAobV9pc09wZW5pbmcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YnJpbmdU
b0Zyb250KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnQg
PSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmIChXZWJD
b3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKLSAgICAgICAgZ3Rr
X3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cocGFyZW50KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zy
b250KCkKLXsKLSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVs
KG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3Bs
ZXZlbFdpbmRvdyhwYXJlbnQpKQotICAgICAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgZ3RrX3dp
bmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyhwYXJlbnQpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2luc3BlY3RlZFVSTFN0cmluZyA9IHVybDsKLSAg
ICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKCp0
aGlzLCB1cmwpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQotICAgICAgICB1cGRhdGVJ
bnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dl
YmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9NYWluLmh0bWwiKTsKLX0KLQotU3RyaW5nIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0
cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9UZXN0
Lmh0bWwiKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJM
KCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rv
ci9Vc2VySW50ZXJmYWNlLyIpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9y
UHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxodHRwczov
L3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRh
IGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6
ZW1wdHkoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVk
X2hlaWdodChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Ci19Ci0KLXVuc2lnbmVkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBy
ZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX3dpZHRoKGluc3BlY3RlZFBhZ2UoKS0+dmll
d1dpZGdldCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2go
KQotewotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JW
aWV3OwotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3
KTsKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAg
ICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOwotICAgIH0KLQotICAgIC8vIFNldCBhIGRlZmF1bHQg
c2l6ZXMgYmFzZWQgb24gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC4KLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLQotICAgIGlmIChtX2F0dGFj
aG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKLSAgICAgICAgdW5zaWduZWQg
bWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAq
IDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4
KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0KSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1h
eGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAv
IDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heChtaW5p
bXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0
dGFjaGVkV2lkdGgpKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5h
dHRhY2goKnRoaXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUFk
ZFdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdX
aWRnZXQoKSksIG1faW5zcGVjdG9yVmlldywgbV9hdHRhY2htZW50U2lkZSk7Ci0gICAgZ3RrX3dp
ZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmlu
Z1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGlu
c3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYgKCFtX2NsaWVudCB8fCAhbV9j
bGllbnQtPmRldGFjaCgqdGhpcykpIHsKLSAgICAgICAgLy8gRGV0YWNoIGlzIGNhbGxlZCB3aGVu
IG1faXNBdHRhY2hlZCBpcyB0cnVlLCBidXQgaXQgY291bGQgY2FsbGVkIGJlZm9yZQotICAgICAg
ICAvLyB0aGUgaW5zcGVjdG9yIGlzIG9wZW5lZCBpZiB0aGUgaW5zcGVjdG9yIGlzIHNob3duL2Ns
b3NlZCBxdWlja2x5LiBTbywKLSAgICAgICAgLy8gd2UgbWlnaHQgbm90IGhhdmUgYSBwYXJlbnQg
eWV0LgotICAgICAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJl
bnQobV9pbnNwZWN0b3JWaWV3KSkKLSAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdU
S19DT05UQUlORVIocGFyZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICB9Ci0KLSAgICAvLyBS
ZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0
b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNy
ZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxl
KSB7Ci0gICAgICAgIC8vIFRoZSBpbnNwZWN0b3IgdmlldyB3aWxsIGJlIGRlc3Ryb3llZCwgYnV0
IHdlIGRvbid0IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0byBjbG9zZSB0aGUKLSAg
ICAgICAgLy8gaW5zcGVjdG9yIGluIHRoaXMgY2FzZSwgc2luY2UgaXQncyBhbHJlYWR5IGNsb3Nl
ZC4KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVj
dG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCks
IHRoaXMpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBp
ZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7
Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJ
RVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNp
Z25lZCB3aWR0aCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRX
aWR0aCgqdGhpcywgd2lkdGgpOwotICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmll
d1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkp
LCB3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29u
dGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VP
YmplY3QpOwotICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJl
c3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBh
Z2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7Ci0gICAgR1VuaXF1ZVB0
cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0gICAgcGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpLCBwYWdl
LT53ZWJQYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2
ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29s
IGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIFVOVVNFRF9QQVJB
TShmb3JjZVNhdmVEaWFsb2cpOwotCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0
X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0
SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmls
ZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1cocGFy
ZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOwot
Ci0gICAgR3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5n
ZXQoKSk7Ci0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlv
bihjaG9vc2VyLCBUUlVFKTsKLQotICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMg
Zm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAotICAgIC8vIGFzIHdl
Yi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZp
bGU6Ly8vIFVSTAotICAgIC8vIHVuZm9ydHVuYXRlbHkuCi0gICAgVVJMIHVybChVUkwoKSwgc3Vn
Z2VzdGVkVVJMKTsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgotICAgIGd0a19m
aWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmlu
ZygxKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RL
X05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmlu
ZyBkYXRhU3RyaW5nOwotICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwotCi0gICAgY29u
c3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkg
OiBkYXRhVmVjdG9yLmRhdGEoKTsKLSAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5n
LmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAg
IEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmls
ZShjaG9vc2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChm
aWxlLmdldCgpKSk7Ci0gICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQo
KSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCi0gICAgICAgIEdfRklMRV9DUkVB
VEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxi
YWNrLCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoKnRoaXMsIGF2YWls
YWJsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTQ5MGYwZTZmMzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3Rv
cldpbmRvdy5oIgotCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKLQotc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgewot
ICAgIEd0a1dpbmRvdyBwYXJlbnQ7Ci0KLSAgICBHdGtXaWRnZXQqIGhlYWRlckJhcjsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MgewotICAgIEd0a1dpbmRvd0NsYXNz
IHBhcmVudDsKLX07Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0SW5zcGVjdG9yV2luZG93LCB3ZWJr
aXRfaW5zcGVjdG9yX3dpbmRvdywgR1RLX1RZUEVfV0lORE9XKQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfaW5zcGVjdG9yX3dpbmRvd19jbGFzc19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNz
KikKLXsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfaW5pdChXZWJL
aXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdykKLXsKLSAgICB3aW5kb3ctPmhlYWRlckJhciA9IGd0
a19oZWFkZXJfYmFyX25ldygpOwotICAgIGd0a19oZWFkZXJfYmFyX3NldF90aXRsZShHVEtfSEVB
REVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIF8oIldlYiBJbnNwZWN0b3IiKSk7Ci0gICAgZ3Rr
X2hlYWRlcl9iYXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+
aGVhZGVyQmFyKSwgVFJVRSk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfdGl0bGViYXIoR1RLX1dJTkRP
Vyh3aW5kb3cpLCB3aW5kb3ctPmhlYWRlckJhcik7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdpbmRv
dy0+aGVhZGVyQmFyKTsKLX0KLQotR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXco
R3RrV2luZG93KiBwYXJlbnQpCi17Ci0gICAgcmV0dXJuIEdUS19XSURHRVQoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZF
TCwgInRyYW5zaWVudC1mb3IiLCBwYXJlbnQsCi0gICAgICAgICJkZWZhdWx0LXdpZHRoIiwgV2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0IiwgV2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsKLX0KLQotdm9p
ZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cq
IHdpbmRvdywgY29uc3QgY2hhciogc3VidGl0bGUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyh3aW5kb3cpKTsKLQotICAgIGd0a19oZWFkZXJfYmFy
X3NldF9zdWJ0aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIHN1YnRpdGxl
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0
b3JXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkYzI4ZDEwOWYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0
b3JXaW5kb3cuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfSU5T
UEVDVE9SX1dJTkRPVyAgICAgICAgICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlw
ZSgpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lO
RE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3cpKQotI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9S
X1dJTkRPVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9X
SU5ET1dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3Mp
KQotI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9X
KSkKLSNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRP
VywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0
SW5zcGVjdG9yV2luZG93IFdlYktpdEluc3BlY3RvcldpbmRvdzsKLXR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzczsKLQot
R1R5cGUgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7Ci0KLUd0a1dpZGdl
dCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKLXZvaWQgd2Vi
a2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiwgY29u
c3QgY2hhciogc3VidGl0bGUpOwotCi1HX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2Vz
dHVyZVJlY29nbml6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiYTY5NWU2
YmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0
IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyLmg+Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCi0tIChDR1Bv
aW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3OwotQGVuZAotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDY3ZmU3YmNjZGIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgiCi0K
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNv
Z25pemVyU3ViY2xhc3MuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGltcGxlbWVu
dGF0aW9uIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIHsKLSAgICBSZXRh
aW5QdHI8VUlUb3VjaD4gX3RvdWNoOwotfQotCi0tIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihV
SVZpZXcgKil2aWV3Ci17Ci0gICAgcmV0dXJuIFtfdG91Y2ggbG9jYXRpb25JblZpZXc6dmlld107
Ci19Ci0KLS0gKHZvaWQpX3Byb2Nlc3NUb3VjaGVzOihOU1NldCAqKXRvdWNoZXMgc3RhdGU6KFVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZSluZXdTdGF0ZQotewotICAgIEFTU0VSVChfdG91Y2gpOwot
ICAgIGlmIChbdG91Y2hlcyBjb250YWluc09iamVjdDpfdG91Y2guZ2V0KCldKQotICAgICAgICBz
ZWxmLnN0YXRlID0gbmV3U3RhdGU7Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc0JlZ2FuOihOU1NldCAq
KXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoc2VsZi5zdGF0
ZSAhPSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFfdG91Y2gpOwotICAgIF90b3VjaCA9IFt0b3VjaGVzIGFueU9iamVjdF07
Ci0KLSAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVCZWdhbl07Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc01vdmVkOihOU1NldCAqKXRv
dWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJvY2Vzc1Rv
dWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkXTsKLX0K
LQotLSAodm9pZCl0b3VjaGVzRW5kZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZl
bnQgKilldmVudAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkXTsKLX0KLQotLSAodm9pZCl0b3VjaGVzQ2FuY2Vs
bGVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBb
c2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVDYW5jZWxsZWRdOwotfQotCi0tICh2b2lkKXJlc2V0Ci17Ci0gICAgX3RvdWNoID0gbmlsOwot
fQotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YWJkZWI1ZjZkMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCisrKyAvZGV2L251bGwK
QEAgLTEsMjYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMu
aCIKLSNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyLmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKLSNpbXBvcnQgIldLTmF2
aWdhdGlvbkRlbGVnYXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9y
dCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmlj
YXRlUGFuZWwuaD4KLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvQmFzZTY0Lmg+Ci0KLUBpbnRlcmZhY2UgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNB
ZGFwdGVyIDogTlNPYmplY3QgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZT4gewotICAgIFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIF9p
bnNwZWN0b3JQcm94eTsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94
eTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpD
QWRhcHRlcgotCi0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRp
b25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3Bl
Y3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJl
Y3QoKS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkqKWluc3BlY3RvclByb3h5Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0
b3JQcm94eTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdD
b250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilp
bnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VGcm9t
Q3Jhc2goKTsKLX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rvcklz
VW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIKLXsKLSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpOwotfQot
Ci1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LVdLV2ViVmlldyAqUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OndlYlZpZXcoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2luc3BlY3RvclZpZXcuZ2V0KCkud2ViVmlldzsKLX0KLQotV2ViUGFnZVBy
b3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKQotewotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OnRoaXNdKTsKLQotICAgIG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFBhZ2U6bnVsbHB0cl0p
OwotICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5n
ZXQoKV07Ci0KLSAgICBtX3dpbmRvdyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVu
ZFdpbmRvdyhOU1plcm9SZWN0LCBXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGlvblRhcmdldFR5
cGU6OlJlbW90ZSk7Ci0gICAgW21fd2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0
KCldOwotICAgIFttX3dpbmRvdyBzZXRGcmFtZUF1dG9zYXZlTmFtZTpAIldLUmVtb3RlV2ViSW5z
cGVjdG9yV2luZG93RnJhbWUiXTsKLQotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBtX3dpbmRv
dy5nZXQoKS5jb250ZW50VmlldzsKLSAgICBbd2ViVmlldygpIHNldEZyYW1lOmNvbnRlbnRWaWV3
LmJvdW5kc107Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6d2ViVmlldygpXTsKLQotICAg
IHJldHVybiB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBp
ZiAobV93aW5kb3cpIHsKLSAgICAgICAgW21fd2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAg
ICAgIFttX3dpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1fd2luZG93ID0gbmlsOwotICAgIH0KLQot
ICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKLSAgICAgICAgW21faW5zcGVjdG9yVmlldy5nZXQo
KSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBuaWw7Ci0gICAg
fQotCi0gICAgaWYgKG1fb2JqQ0FkYXB0ZXIpCi0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgp
Ci17Ci0gICAgW05TV2luZG93IHJlbW92ZUZyYW1lVXNpbmdOYW1lOlttX3dpbmRvdyBmcmFtZUF1
dG9zYXZlTmFtZV1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgW21fd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5p
bF07Ci0gICAgW21fd2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp3ZWJWaWV3KCldOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNw
ZWN0b3JQcm94eU1hYy4KLQotICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0g
ICAgCi0gICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5n
ZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Ci0gICAgICAg
IHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKLSAgICAg
ICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBz
YXZlIHRvIHRoZW0uCi0gICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7Ci0gICAgfQotICAg
IAotICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCi0gICAg
U3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7Ci0gICAgU3RyaW5nIGNvbnRl
bnRDb3B5ID0gY29udGVudDsKLQotICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFs
VVJMKSB7Ci0gICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOwotCi0gICAgICAgIG1fc3VnZ2VzdGVk
VG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7Ci0KLSAgICAg
ICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0g
ICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxp
ZGF0ZVBhZGRpbmcpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFp
blB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBbZGF0
YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9t
aWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKLQot
ICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5z
cGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotICAgIH07Ci0KLSAgICBpZiAoIWZvcmNlU2F2ZURp
YWxvZykgewotICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5l
bF07Ci0gICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0
aENvbXBvbmVudDsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5
IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCi0gICAgLy8gY2FuIHByb3ZpZGUgYSBnb29k
IGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKLSAgICAvLyBk
ZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUg
ZGlhbG9nLgotICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCi0gICAgICAgIHBhbmVsLmRp
cmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRd
OwotCi0gICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgewot
ICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7Ci0g
ICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOwotICAgIH07Ci0KLSAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gbV93aW5kb3cgPyBtX3dpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOwotICAg
IGlmICh3aW5kb3cpCi0gICAgICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2lu
ZG93IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBlbHNlCi0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0pOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRo
IFdlYkluc3BlY3RvclByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0
eSgpKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVk
VG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVuZCB1
bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2
ZSgpLgotICAgIGlmICghYWN0dWFsVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZpbGVI
YW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDph
Y3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVd
OwotICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRG
OFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgV2ViUGFn
ZVByb3h5KiBpbnNwZWN0b3JQYWdlID0gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKLSAgICBpbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIGluc3BlY3RvclBhZ2UtPndl
YlBhZ2VJRCgpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
ZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fc2hlZXRSZWN0ID0g
cmVjdDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdp
bmRvd0RyYWcoKQotewotICAgIHdlYlZpZXcoKS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOwot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0g
b3BlblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzp1cmxdXTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNF
bXB0eSgpKTsKLQotICAgIFJldGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRl
UGFuZWwgPSBhZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7Ci0KLSAg
ICBBU1NFUlQobV93aW5kb3cpOwotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0g
ICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBt
b2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIg
dHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAg
IFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9k
YWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNl
cnRpZmljYXRlczooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkg
c2hvd0dyb3VwOllFU107Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0
ZXIgdGhlIHRydXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlm
aWNhdGVWaWV3IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmll
dyAqY2VydGlmaWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsK
LSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZp
Y2F0ZVZpZXcgc2V0RWRpdGFibGVUcnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRE
aXNwbGF5RGV0YWlsczpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Ns
b3NlZDpZRVNdOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhiZDA4ZmY5ZDQuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250
cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPHd0
Zi9OYWtlZFB0ci5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1PQkpDX0NMQVNTIFdLV2ViVmll
dzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLUBwcm90
b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0KLU5TX0FTU1VNRV9OT05O
VUxMX0JFR0lOCi0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciA6IE5TT2Jq
ZWN0Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3ICp3ZWJWaWV3
OwotQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyRGVsZWdhdGU+IGRlbGVnYXRlOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0
ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4paW5zcGVjdGVkUGFnZTsKLQot
KyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJWaWV3OihOU1ZpZXcgKil2aWV3OwotCi1AZW5kCi0K
LUBwcm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0Pgot
QG9wdGlvbmFsCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jh
c2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsK
LS0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotLSAodm9p
ZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWlu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2lu
ZG93OwotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotQGVuZAot
Ci1OU19BU1NVTUVfTk9OTlVMTF9FTkQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9s
bGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjYzZTBmZDZlLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKLSNp
bXBvcnQgIlZlcnNpb25DaGVja3MuaCIKLSNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCi0jaW1wb3J0
ICJXS0luc3BlY3RvcldLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgi
Ci0jaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV0tPcGVuUGFuZWxQ
YXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgotI2ltcG9ydCAi
V0tQcm9jZXNzUG9vbEludGVybmFsLmgiCi0jaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgi
Ci0jaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tX
ZWJWaWV3UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbXBvcnQg
IldlYkluc3BlY3RvclV0aWxpdGllcy5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1w
b3J0IDx3dGYvV2Vha09iakNQdHIuaD4KLQotQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyICgpIDxXS1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS0luc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlPgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlciB7Ci0gICAgTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9pbnNw
ZWN0ZWRQYWdlOwotICAgIFJldGFpblB0cjxXS0luc3BlY3RvcldLV2ViVmlldz4gX3dlYlZpZXc7
Ci0gICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4+
IF9kZWxlZ2F0ZTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZToo
TmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBhZ2UKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFRo
ZSAobG9jYWwpIGluc3BlY3RlZCBwYWdlIGlzIG5pbCBpZiB0aGUgY29udHJvbGxlciBpcyBob3N0
aW5nIGEgUmVtb3RlIFdlYiBJbnNwZWN0b3Igdmlldy4KLSAgICBfaW5zcGVjdGVkUGFnZSA9IGlu
c3BlY3RlZFBhZ2U7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17
Ci0gICAgaWYgKF93ZWJWaWV3KSB7Ci0gICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5p
bF07Ci0gICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmlsXTsKLSAgICAg
ICAgW193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOm5pbF07Ci0gICAgICAg
IF93ZWJWaWV3ID0gbmlsOwotICAgIH0KLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAo
aWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBy
ZXR1cm4gX2RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwotfQotCi0tIChXS1dlYlZpZXcgKil3
ZWJWaWV3Ci17Ci0gICAgLy8gQ29uc3RydWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQg
dGhlIGRlbGVnYXRlIGJlZm9yZSB0aGUgV2ViVmlldyBpcyBjcmVhdGVkLgotICAgIGlmICghX3dl
YlZpZXcpIHsKLSAgICAgICAgTlNSZWN0IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwg
V2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsKLSAgICAgICAgX3dlYlZpZXcg
PSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5p
dGlhbEZyYW1lIGNvbmZpZ3VyYXRpb246W3NlbGYgY29uZmlndXJhdGlvbl1dKTsKLSAgICAgICAg
W193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmlldyBzZXROYXZp
Z2F0aW9uRGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dl
YlZpZXdEZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5
QWRqdXN0c0NvbnRlbnRJbnNldHM6Tk9dOwotICAgICAgICBbX3dlYlZpZXcgX3NldFVzZVN5c3Rl
bUFwcGVhcmFuY2U6WUVTXTsKLSAgICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6
TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0gICAgfQotCi0gICAg
cmV0dXJuIF93ZWJWaWV3LmdldCgpOwotfQotCi0tICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAgIF9kZWxlZ2F0
ZSA9IGRlbGVnYXRlOwotfQotCi0tIChXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJh
dGlvbgotewotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0KLSAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNl
cyA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXM7Ci0gICAgcHJlZmVyZW5jZXMuX2Fs
bG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IFlFUzsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKLSAgICBwcmVmZXJlbmNlcy5f
c3RvcmFnZUJsb2NraW5nUG9saWN5ID0gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QWxsb3dBbGw7
Ci0gICAgcHJlZmVyZW5jZXMuX2phdmFTY3JpcHRSdW50aW1lRmxhZ3MgPSAwOwotCi0jaWZuZGVm
IE5ERUJVRwotICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3Bl
Y3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAgICBwcmVm
ZXJlbmNlcy5fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IFlFUzsKLSAgICBwcmVmZXJlbmNlcy5f
bG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQgPSBZRVM7Ci0jZW5kaWYKLQot
ICAgIHByZWZlcmVuY2VzLl9kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQgPSBZRVM7Ci0KLSAgICBp
ZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KV0pIHsKLSAgICAg
ICAgaWYgKFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVy
VGVzdDpzZWxmXSkgewotICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2hpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdFbmFibGVkID0gTk87Ci0gICAgICAgICAgICBwcmVmZXJlbmNlcy5fcGFnZVZp
c2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQgPSBOTzsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFtjb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29sOndyYXBwZXIoV2ViS2l0
OjppbnNwZWN0b3JQcm9jZXNzUG9vbChXZWJLaXQ6Omluc3BlY3RvckxldmVsRm9yUGFnZShfaW5z
cGVjdGVkUGFnZSkpKV07Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3NldEdyb3VwSWRlbnRpZmllcjpX
ZWJLaXQ6Omluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKF9pbnNwZWN0ZWRQYWdl
KV07Ci0KLSAgICByZXR1cm4gY29uZmlndXJhdGlvbi5hdXRvcmVsZWFzZSgpOwotfQotCi0rIChC
T09MKXZpZXdJc0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZpZXcKLXsKLSAgICByZXR1cm4g
W3ZpZXcgaXNLaW5kT2ZDbGFzczpbV0tJbnNwZWN0b3JXS1dlYlZpZXcgY2xhc3NdXTsKLX0KLQot
Ly8gTUFSSzogV0tVSURlbGVnYXRlIG1ldGhvZHMKLQotLSAodm9pZClfd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoQ0dSZWN0KSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGlmICghX3dlYlZpZXcuZ2V0KCku
d2luZG93KQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDR1JlY3RaZXJvKTsKLSAgICBlbHNl
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TUmVjdFRvQ0dSZWN0KFt3ZWJWaWV3IGZyYW1l
XSkpOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNldFdpbmRv
d0ZyYW1lOihDR1JlY3QpZnJhbWUKLXsKLSAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW193ZWJWaWV3LmdldCgpLndpbmRvdyBzZXRGcmFtZTpO
U1JlY3RGcm9tQ0dSZWN0KGZyYW1lKSBkaXNwbGF5OllFU107Ci19Ci0KLS0gKHZvaWQpd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczooV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzICopcGFyYW1ldGVycyBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5m
byAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVVJMICo+ICpV
UkxzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBb
TlNPcGVuUGFuZWwgb3BlblBhbmVsXTsKLSAgICBvcGVuUGFuZWwuYWxsb3dzTXVsdGlwbGVTZWxl
Y3Rpb24gPSBwYXJhbWV0ZXJzLmFsbG93c011bHRpcGxlU2VsZWN0aW9uOwotCi0gICAgYXV0byBy
ZXBvcnRTZWxlY3RlZEZpbGVzID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChy
ZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihvcGVuUGFuZWwuVVJMcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG5pbCk7Ci0gICAgfTsKLQotICAgIGlmIChfd2ViVmlldy5nZXQoKS53aW5kb3cpCi0g
ICAgICAgIFtvcGVuUGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93Ol93ZWJWaWV3LmdldCgp
LndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpyZXBvcnRTZWxlY3RlZEZpbGVzXTsKLSAgICBlbHNl
Ci0gICAgICAgIHJlcG9ydFNlbGVjdGVkRmlsZXMoW29wZW5QYW5lbCBydW5Nb2RhbF0pOwotfQot
Ci0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVv
dGFGb3JTZWN1cml0eU9yaWdpbjooV0tTZWN1cml0eU9yaWdpbiAqKXNlY3VyaXR5T3JpZ2luIGN1
cnJlbnRRdW90YToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2lu
VXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFi
YXNlVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50VXNhZ2UgZXhwZWN0ZWRVc2FnZToo
dW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOih2b2lkIChe
KSh1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEpKWRlY2lzaW9uSGFuZGxlcgotewotICAgIGRl
Y2lzaW9uSGFuZGxlcihzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2Us
IGN1cnJlbnRVc2FnZSAqIDEuMjUpKTsKLX0KLQotLSAoTlNNZW51ICopX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgY29udGV4dE1lbnU6KE5TTWVudSAqKW1lbnUgZm9yRWxlbWVudDooX1dL
Q29udGV4dE1lbnVFbGVtZW50SW5mbyAqKWVsZW1lbnQKLXsKLSAgICBmb3IgKE5TSW50ZWdlciBp
ID0gbWVudS5udW1iZXJPZkl0ZW1zIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgTlNNZW51
SXRlbSAqaXRlbSA9IFttZW51IGl0ZW1BdEluZGV4OmldOwotICAgICAgICBzd2l0Y2ggKGl0ZW0u
dGFnKSB7Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dp
bmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dp
bmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dp
bmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0Ns
aXBib2FyZDoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0Ns
aXBib2FyZDoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtU
b0Rpc2s6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRv
RGlzazoKLSAgICAgICAgICAgIFttZW51IHJlbW92ZUl0ZW1BdEluZGV4OmldOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWVudTsKLX0KLQotLy8g
TUFSSzogV0tOYXZpZ2F0aW9uRGVsZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKXdlYlZpZXdXZWJD
b250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZTooV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlm
ICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDopXSkKLSAgICAgICAgW19k
ZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOnNlbGZdOwot
fQotCi0tICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBk
ZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNp
b25IYW5kbGVyCi17Ci0gICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFu
eXdoZXJlLgotICAgIGlmICghbmF2aWdhdGlvbkFjdGlvbi50YXJnZXRGcmFtZS5pc01haW5GcmFt
ZSkgewotICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxs
b3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0
aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJM
KSkgewotICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxs
b3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5n
IGVsc2UuCi0gICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNl
bCk7Ci0gICAgCi0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBh
Z2UuCi0gICAgaWYgKF9pbnNwZWN0ZWRQYWdlKQotICAgICAgICBfaW5zcGVjdGVkUGFnZS0+bG9h
ZFJlcXVlc3QobmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0KTsKLX0KLQotLy8gTUFSSzogV0tJbnNw
ZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJW
aWV3UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoIV9p
bnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPcHRpb25TZXQ8V2ViQ29yZTo6
UmVsb2FkT3B0aW9uPiByZWxvYWRPcHRpb25zOwotICAgIGlmIChXZWJLaXQ6OmxpbmtlZE9uT3JB
ZnRlcihXZWJLaXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aEV4cGlyZWRPbmx5UmVsb2FkQmVoYXZp
b3IpKQotICAgICAgICByZWxvYWRPcHRpb25zLmFkZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4
cGlyZWRPbmx5KTsKLQotICAgIF9pbnNwZWN0ZWRQYWdlLT5yZWxvYWQocmVsb2FkT3B0aW9ucyk7
Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNw
ZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgX2luc3BlY3RlZFBhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxv
YWRPcHRpb246OkZyb21PcmlnaW4pOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzoo
V0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93
ICopbmV3V2luZG93Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjp3aWxsTW92ZVRv
V2luZG93OildKQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyOnNl
bGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldL
V2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Ci17
Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzopXSkKLSAgICAg
ICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzpzZWxm
XTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzU3ZTc3Y2ZlN2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3Lmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLUBwcm90b2NvbCBXS0lu
c3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOwotCi1AaW50ZXJmYWNlIFdLSW5zcGVjdG9yV0tXZWJW
aWV3IDogV0tXZWJWaWV3Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFdLSW5zcGVj
dG9yV0tXZWJWaWV3RGVsZWdhdGU+IGluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOwotQGVuZAot
Ci1AcHJvdG9jb2wgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZQotQHJlcXVpcmVkCi0tICh2
b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJW
aWV3OwotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihXS0luc3Bl
Y3RvcldLV2ViVmlldyAqKXdlYlZpZXc7Ci0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJ
bnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICop
bmV3V2luZG93OwotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6KFdL
SW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldL
V2ViVmlldy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmZWY0YTAxYmEuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldL
V2ViVmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCi0KLSNp
ZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgotI2lt
cG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvcldL
V2ViVmlldyB7Ci0gICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdh
dGU+PiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci19Ci0KLS0gKE5TUmVjdClfb3BhcXVl
UmVjdEZvcldpbmRvd01vdmVXaGVuSW5UaXRsZWJhcgotewotICAgIC8vIFRoaXMgY29udmluY2Vz
IEFwcEtpdCB0byBhbGxvdyB3aW5kb3cgbW92ZXMgd2hlbiBjbGlja2luZyBhbnl3aGVyZSBpbiB0
aGUgdGl0bGViYXIgKHRvcCAyMnB0KQotICAgIC8vIHdoZW4gdGhpcyB2aWV3J3MgY29udGVudHMg
Y292ZXIgdGhlIGVudGlyZSB3aW5kb3cncyBjb250ZW50cywgaW5jbHVkaW5nIHRoZSB0aXRsZWJh
ci4KLSAgICByZXR1cm4gTlNaZXJvUmVjdDsKLX0KLQotLSAoTlNJbnRlZ2VyKXRhZwotewotICAg
IHJldHVybiBXS0luc3BlY3RvclZpZXdUYWc7Ci19Ci0KLS0gKGlkIDxXS0luc3BlY3RvcldLV2Vi
Vmlld0RlbGVnYXRlPilpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZQotewotICAgIHJldHVybiBf
aW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKHZv
aWQpc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlPilkZWxlZ2F0ZQotewotICAgIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSA9
IGRlbGVnYXRlOwotfQotCi0tIChJQkFjdGlvbilyZWxvYWQ6KGlkKXNlbmRlcgotewotICAgIFtz
ZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZDpz
ZWxmXTsKLX0KLQotLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdpbjooaWQpc2VuZGVyCi17Ci0g
ICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVs
b2FkRnJvbU9yaWdpbjpzZWxmXTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzoo
TlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBbc3VwZXIgdmlld1dpbGxNb3ZlVG9XaW5kb3c6
bmV3V2luZG93XTsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0
b3JXS1dlYlZpZXc6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107Ci19Ci0KLS0gKHZv
aWQpdmlld0RpZE1vdmVUb1dpbmRvdwotewotICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93
XTsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZp
ZXdEaWRNb3ZlVG9XaW5kb3c6c2VsZl07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTcyOGQ0MzVjLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KKysrIC9k
ZXYvbnVsbApAQCAtMSw4MDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oTUFD
KQotCi0jaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKLSNpbXBvcnQgIldLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCi0jaW1wb3J0
ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5o
IgotI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNp
bXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tJbnNwZWN0b3JXaW5k
b3cuaCIKLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgot
I2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5o
PgotI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLXN0YXRpYyBjb25zdCBOU1VJbnRlZ2Vy
IHdpbmRvd1N0eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNXaW5kb3dTdHls
ZU1hc2tDbG9zYWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUgfCBOU1dpbmRv
d1N0eWxlTWFza1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVDb250ZW50Vmll
dzsKLQotLy8gVGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZvcmUgY2xvc2lu
ZyBpdCBhbmQgaXRzIHByb2Nlc3MuCi0vLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGltcHJvdmVzIHN0
YXJ0IHVwIHRpbWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0aGUgSW5zcGVj
dG9yLgotc3RhdGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7IDFfbWluIH07
Ci0KLXN0YXRpYyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCA9ICZr
V2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dDsKLQotQGludGVyZmFjZSBXS1dlYklu
c3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5z
cGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5Owot
LSAodm9pZClpbnZhbGlkYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYkluc3Bl
Y3RvclByb3h5T2JqQ0FkYXB0ZXIgewotICAgIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqIF9p
bnNwZWN0b3JQcm94eTsKLX0KLQotLSAoV0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9yUmVmCi17Ci0g
ICAgcmV0dXJuIHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Ci19Ci0KLS0gKF9XS0luc3BlY3RvciAq
KWluc3BlY3RvcgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIHJldHVybiB3
cmFwcGVyKCpfaW5zcGVjdG9yUHJveHkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5KilpbnNwZWN0b3JQcm94eQotewotICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yUHJveHksIGlu
c3BlY3RvclByb3h5KTsKLQotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgLy8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJlZmVyZW5jZSBj
eWNsZS4KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBfaW5zcGVjdG9yUHJveHkg
PSBudWxscHRyOwotfQotCi0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxs
UG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17
Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwg
X2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5z
aGVldFJlY3QoKS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAodm9pZCl3
aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRD
aGFuZ2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3Bl
Y3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd1dp
bGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3Bl
Y3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Ci19Ci0KLS0gKHZv
aWQpd2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+
d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZEV4aXRG
dWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5z
cGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRp
ZENoYW5nZSgpOwotfQotCi0tICh2b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICAvLyBSZXNpemluZyB0aGUgdmlld3Mg
d2hpbGUgaW5zaWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIHdo
ZW4gZW50ZXJpbmcKLSAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBhdm9pZCB0aGF0
IHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBvbmx5Ci0gICAg
Ly8gZGVwZW5kIG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0cmFpbnRzLCBz
byBhIHNtYWxsIGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0Ci0gICAgLy8gb2YgdGhlIHRpbWUg
dGhlIHZpZXdzIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBiZWNhdXNlIG9m
IGF1dG9yZXNpemluZyBtYXNrcy4KLQotICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVf
Tk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoX2luc3BlY3Rv
clByb3h5KQotICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVE
aWRDaGFuZ2UoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRo
OihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlv
bmFyeTxOU0tleVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNv
bnRleHQKLXsKLSAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVudExheW91dE9ic2VydmVy
Q29udGV4dCkgewotICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRo
IG9mT2JqZWN0Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0OwotICAgIEFT
U0VSVChbd2luZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNzXV0pOwotICAgIGlmICh3
aW5kb3cuaW5MaXZlUmVzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkaXNwYXRjaF9hZnRl
cihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAg
ICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5z
cGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfSk7Ci19Ci0KLS8vIE1BUks6IFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkK
LSAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0KLS0gKEJPT0wp
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9p
bnNwZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6IGZhbHNlOwot
fQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5k
b3cgKiluZXdXaW5kb3cKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5z
cGVjdG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIud2ViVmlldy53aW5kb3cpOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250
cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBf
aW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIud2ViVmlldy53aW5kb3cpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0
dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KQot
ewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2
ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIG9iamVjdDpvbGRWaWV3XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9y
KGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VO
b3RpZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkKLSAg
ICAgICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpCi17
Ci0gICAgaWYgKG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgewotICAgICAgICBtX2lz
T2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSBmYWxzZTsKLSAgICAgICAgW29sZFdpbmRvdyBy
ZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5
b3V0UmVjdCIgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07Ci0g
ICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2lu
ZG93KE5TV2luZG93ICpuZXdXaW5kb3cpCi17Ci0gICAgaWYgKG1faXNBdHRhY2hlZCAmJiAhIW5l
d1dpbmRvdykgewotICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSB0cnVl
OwotICAgICAgICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9y
S2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDprV2luZG93Q29u
dGVudExheW91dE9ic2VydmVyQ29udGV4dF07Ci0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZURp
ZENoYW5nZSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5z
cGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAotewotICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVjdGlvbkxldmVs
KCk7Ci0gICAgaWYgKGxldmVsID4gMSkgewotICAgICAgICBOU1N0cmluZyAqZGVidWdUaXRsZSA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig
WyVkXSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBpbnNwZWN0aW5n
IFdlYiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAgICAg
ICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0bGVdOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldF
Ql9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0b3Igd2luZG93
IHRpdGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5zcGVjdG9y
V2luZG93IHNldFRpdGxlOnRpdGxlXTsKLSAgICB9Ci19Ci0KLVJldGFpblB0cjxOU1dpbmRvdz4g
V2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRv
d0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQotewotICAgIE5TUmVjdCB3
aW5kb3dGcmFtZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2ZWRXaW5k
b3dGcmFtZSA6IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2lu
ZG93SGVpZ2h0KTsKLSAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0b3JXaW5k
b3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNrOndpbmRv
d1N0eWxlTWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKLSAg
ICBbd2luZG93IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgsIG1pbmlt
dW1XaW5kb3dIZWlnaHQpXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107
Ci0gICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJl
aGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1hcnkpXTsK
LQotICAgIGJvb2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0aW9uVGFy
Z2V0VHlwZTo6UmVtb3RlOwotICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZvclJlbW90
ZVRhcmdldF07Ci0KLSAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSA9IChb
d2luZG93IHNjcmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKLSAgICBDR0Zsb2F0IG1p
bmltdW1GdWxsU2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJveGltYXRl
bHlIYWxmU2NyZWVuU2l6ZSk7Ci0gICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29udGVudFNp
emU6TlNNYWtlU2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0
KV07Ci0gICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlv
bkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFsbG93c1Rp
bGluZyldOwotCi0gICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVudDpZRVNd
OwotCi0gICAgLy8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdhcyBlbXB0
eS4KLSAgICBpZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKLSAgICAgICAgW3dp
bmRvdyBjZW50ZXJdOwotCi0gICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotV2ViUGFnZVByb3h5KiBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFT
U0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLQot
ICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGlm
IChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIEFTU0VSVChtX29iakNBZGFw
dGVyKTsKLSAgICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXdd
LT5fcGFnZS5nZXQoKTsKLSAgICB9Ci0KLSAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dL
V2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJbnNwZWN0b3JQ
cm94eTp0aGlzXSk7Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgp
LT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURp
ZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107Ci0KLSAgICBtX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsKLSAgICBbbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdl
dCgpXTsKLQotICAgIFdlYlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9y
UGFnZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgQVNTRVJUKCFt
X2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmlu
ZyA9IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JX
aW5kb3dGcmFtZSgpOwotICAgIE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0
cmluZyhzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nKTsKLQotICAgIG1faW5zcGVjdG9yV2luZG93ID0g
V2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUs
IEluc3BlY3Rpb25UYXJnZXRUeXBlOjpMb2NhbCk7Ci0gICAgW21faW5zcGVjdG9yV2luZG93IHNl
dERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAgV0tXZWJWaWV3ICppbnNwZWN0
b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0gICAgTlNWaWV3
ICpjb250ZW50VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107Ci0gICAgaW5z
cGVjdG9yVmlldy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNdOwotICAgIFtjb250ZW50Vmll
dyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXddOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yV2luZG93
VGl0bGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2Uo
KQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3RvcldpbmRvdyk7Ci0K
LSAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgewotICAgICAgICBbbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBtX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIH0KLQotICAgIGlmIChtX29iakNBZGFwdGVy
KSB7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3Zl
T2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICAgICAgW21fb2JqQ0FkYXB0ZXIg
aW52YWxpZGF0ZV07Ci0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci0gICAgfQotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJG
aXJlZCgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYg
KG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxl
Z2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwotICAgICAgICBt
X2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci0KLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Nsb3NlVGltZW91dCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0g
ICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0gICAgY2xv
c2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnZhbGlkYXRlKCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5z
dG9wKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAgICAg
ICAgcGxhdGZvcm1EZXRhY2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICht
X2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdh
dGU6bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAgICAgbV9p
bnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3Vw
KCkucHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gSWYg
dGhlIFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdpbmRvdyBhcyB0aGUg
aW5zcGVjdGVkIHZpZXcsCi0gICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlb3BlbiB0aGUgSW5zcGVj
dG9yIHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93LgotICAgIC8vIFRoaXMg
Y2FuIGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3aW5kb3cgaW4gU2FmYXJp
LgotICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSkgewotICAg
ICAgICBvcGVuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRSA8cmRh
cjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEgYmFja2dyb3VuZCB0
YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93LgotICAgIFtbbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6
bmlsXTsKLSAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1h
a2VGaXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XV07Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpCi17Ci0gICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSBtYWtlS2V5
QW5kT3JkZXJGcm9udDpuaWxdOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUlzRnJvbnQoKQotewotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRo
aXMgd2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSwg
b25seSBhIGJhY2tncm91bmQgd2luZG93LgotICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBbbV9p
bnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cuaXNNYWluV2luZG93OwotfQot
Ci1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nl
c3NDYW5BdHRhY2gpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFn
ZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIGlmIChbV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZpZXddKQotICAgICAg
ICByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBt
aW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heGlt
dW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWlu
aW11bUF0dGFjaGVkV2lkdGggPSA1MDA7Ci0KLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1l
ID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKLQotICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdo
dCA9IE5TSGVpZ2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRS
YXRpbzsKLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hl
ZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZpZXdG
cmFtZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxh
YmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICAvLyBEbyBub3RoaW5nLgotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgbV91cmxTdHJpbmcgPSB1cmxTdHJpbmc7Ci0K
LSAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbykKLXsKLSAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkp
OwotCi0gICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9
IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIE5TV2lu
ZG93ICp3aW5kb3c7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQotICAgICAgICB3aW5kb3cg
PSBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpbmRvdyA9IFtb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5kb3ddOwotCi0gICAgaWYgKCF3
aW5kb3cpCi0gICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5kb3ddOwotCi0jaWYgSEFWRShT
RUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0
Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNv
bnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3Vw
OllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6
d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86
bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNh
dGVDaGFpbigpIHNob3dHcm91cDpZRVNdOwotI2VuZGlmCi0KLSAgICAvLyBUaGlzIG11c3QgYmUg
Y2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2Ug
dGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCi0gICAgU0ZDZXJ0
aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmlj
YXRlVmlld107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKLSAg
ICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOwotICAgIFtjZXJ0aWZpY2F0
ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERl
dGFpbHNEaXNjbG9zZWQ6WUVTXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgQVNTRVJU
KCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZvcm1VUkwg
PSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOwotICAg
IGlmICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0g
bmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAgZm9yY2VT
YXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsK
LSAgICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWNlc3Nh
cnkgZm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1
Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OwotCi0gICAgYXV0
byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJUKGFjdHVh
bFVSTCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVk
VVJMQ29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBh
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91
dC5zaXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW2NvbnRlbnRD
b3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwg
YWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0gICAgfTsK
LQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0Zm9y
bVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFuZWwg
PSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKLSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1
ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBh
IGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKLSAg
ICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNl
IHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRp
cmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlzRmls
ZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVs
ZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0KLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0g
XihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3Bv
bnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09
IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0gICAg
fTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVj
dG9yV2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAg
ICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhh
bmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpCi17Ci0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAg
ICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAu
Z2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIg
aGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlmICgh
YWN0dWFsVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9
IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkg
ZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5kbGUg
d3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5n
XV07Ci0gICAgW2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJM
IGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSgpCi17Ci0gICAgQVNT
RVJUKCFtX2lzQXR0YWNoZWQpOwotICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7Ci0gICAgQVNTRVJU
KG1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNp
YmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJp
bmcgKmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9pbnNwZWN0b3JXaW5kb3cgZnJh
bWVdKTsKLSAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuc2V0
SW5zcGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5Ojp3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNB
dHRhY2hlZCk7Ci0gICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0
b3JXaW5kb3cpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1f
aW5zcGVjdG9yV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCBj
dXJyZW50RGltZW5zaW9uKQotewotICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBh
dHRhY2ggYXZhaWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIGluIGNh
c2UKLSAgICAgICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBub3QgdGhlIFdLVmlldy4KLSAg
ICAgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRh
Y2goKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFpbnNwZWN0ZWRQYWdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3Bl
Y3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmlu
c3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAg
IE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOwotICAgIE5T
UmVjdCBvbGRJbnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1lOwotICAgIE5T
UmVjdCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0OwotICAgIE5TUmVjdCBwYXJl
bnRCb3VuZHMgPSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHM7Ci0gICAgQ0dGbG9hdCBp
bnNwZWN0ZWRWaWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdGcmFtZSk7Ci0KLSAgICBzd2l0
Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206
IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERp
bWVuc2lvbiA9IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dG
bG9hdCBwYXJlbnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zs
b2F0IGluc3BlY3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0
cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVuc2lvbiwgcGFyZW50SGVpZ2h0
KTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0
ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgotICAgICAgICBpbnNwZWN0
ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3RvckhlaWdodCwgTlNXaWR0aChwYXJl
bnRCb3VuZHMpLCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsKLSAgICAgICAg
bmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3Rl
ZFZpZXdGcmFtZSksIGluc3BlY3RvckhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Ci0gICAgICAgIGlmICghY3VycmVudERp
bWVuc2lvbikKLSAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3Bl
Y3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgo
cGFyZW50Qm91bmRzKTsKLSAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJy
ZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRv
cCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3Rp
bGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0Ci0gICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3Ig
dGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRl
IGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNN
YWtlUmVjdCgwLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3
VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdChwYXJlbnRX
aWR0aCAtIGluc3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50
Qm91bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNw
ZWN0b3JWaWV3LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0
ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5j
b250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9y
Vmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29u
dGVudExheW91dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5z
aW9uKQotICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9y
Vmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJl
bnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnRE
aW1lbnNpb24sIHBhcmVudFdpZHRoKTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBv
c2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3
b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKLSAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUg
aW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMg
dGhlIGluc3BlY3RlZCB2aWV3LgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VS
ZWN0KGluc3BlY3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNw
ZWN0ZWRWaWV3VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVj
dCgwLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7Ci0KLSAgICAg
ICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykg
ewotICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcu
c3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBm
cm9tVmlldzpuaWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRl
cnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoTlNFcXVh
bFJlY3RzKG9sZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVjdG9yVmlld0ZyYW1lKSAmJiBO
U0VxdWFsUmVjdHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3RnJhbWUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHRvIG1ha2Ug
c3VyZSB0aGUgbGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgotICAgIFtpbnNw
ZWN0b3JWaWV3LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOwotCi0gICAg
W2luc3BlY3RvclZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsKLSAgICBbaW5z
cGVjdGVkVmlldyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVdOwotfQotCi11bnNpZ25lZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAg
IE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNo
bWVudFZpZXcoKTsKLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmll
dyBmcmFtZV07Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3
UmVjdC5zaXplLmhlaWdodCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcg
PSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgTlNSZWN0
IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0aCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKLXsKLSAgICBOU1ZpZXcg
Kmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgd2ViVmlld107Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAg
W21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3BlY3Rv
cldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAgIH0K
LQotICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgQ0dGbG9h
dCBjdXJyZW50RGltZW5zaW9uOwotICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAg
IGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0
QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZTWFyZ2luXTsK
LSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OlJpZ2h0OgotICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdN
YXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKLSAgICAgICAgY3Vy
cmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFj
aGVkV2lkdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVm
dDoKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWln
aHRTaXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbl07Ci0gICAgICAgIGN1cnJlbnREaW1lbnNpb24g
PSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShj
dXJyZW50RGltZW5zaW9uKTsKLQotICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBhZGRTdWJ2
aWV3Omluc3BlY3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86aW5z
cGVjdGVkVmlld107Ci0gICAgW2luc3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJzdFJlc3BvbmRl
cjppbnNwZWN0b3JWaWV3XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1E
ZXRhY2goKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+
aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcg
PSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIFtpbnNwZWN0b3JW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jl
c2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3BlY3RlZCB2aWV3J3MgZnJhbWUg
YWZ0ZXIgZGV0YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRoYXQgdGhlCi0g
ICAgLy8gYXR0YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRp
b24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsu
Ci0KLSAgICBpbnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGlu
c3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShpbnNwZWN0ZWRWaWV3LmZyYW1l
KSk7Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1l
YW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFuZCB3
ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAgICBp
ZiAoIW1faXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBvcGVuKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVk
IHdpZHRoKQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgd2ViVmlld10tPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotU3RyaW5nIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxl
ID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3Rv
clVJIl07Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAg
IE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJNYWluIiBvZlR5cGU6
QCJodG1sIl07Ci0gICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOwotICAgIGlmICghcGF0
aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJM
V2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Ci19Ci0KLVN0cmlu
ZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIE5TQnVu
ZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUu
V2ViSW5zcGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0Lmh0bWwgaW4gUHJvZHVjdGlv
biBidWlsZHMuCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpA
IlRlc3QiIG9mVHlwZTpAImh0bWwiXTsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJl
Y3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUg
YnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAgICBp
ZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTlNTdHJpbmcgKnBh
dGggPSBidW5kbGUucmVzb3VyY2VQYXRoOwotICAgIEFTU0VSVChwYXRoICYmIHBhdGgubGVuZ3Ro
KTsKLQotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6
WUVTXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQotc3RhdGljIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVy
c2lvblBsaXN0KCkKLXsKLSAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFy
Y2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3Rl
bURvbWFpbk1hc2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKLSAgICBOU1N0cmluZyAqc3lzdGVt
VmVyc2lvblBsaXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJdOwotICAgIE5T
RGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlX
aXRoQ29udGVudHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07Ci0gICAgcmV0dXJuIHN5
c3RlbVZlcnNpb25JbmZvOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJv
eHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIE5TRGljdGlvbmFyeSAqcGxpc3Qg
PSBzeXN0ZW1WZXJzaW9uUGxpc3QoKTsKLQotICAgIERlYnVnZ2FibGVJbmZvRGF0YSByZXN1bHQ7
Ci0gICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6
V2ViUGFnZTsKLSAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1hY09TIl9zOwotICAg
IHJlc3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RCdWlsZFZlcnNpb24i
XTsKLSAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RVc2Vy
VmlzaWJsZVZlcnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0b3IgPSBmYWxzZTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmJlZTVjZGZmMzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCi0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUgIlJlbW90
ZVdlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJl
bW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJl
bW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50
LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKLSAgICAgICAgOiBtX3Byb3h5KFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKLSAgICAgICAgLCBtX2luc3BlY3RvckNsaWVu
dChpbnNwZWN0b3JDbGllbnQpCi0gICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklE
KQotICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCi0gICAgICAgICwgbV9kZWJ1Z2dhYmxl
VHlwZShkZWJ1Z2dhYmxlVHlwZSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0
aGlzKTsKLSAgICB9Ci0KLSAgICB+UmVtb3RlSW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAg
ICAgbV9wcm94eS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlk
YXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVz
ZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVn
Z2FibGVJbmZvPiBkZWJ1Z2dhYmxlSW5mbyA9IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShE
ZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpOwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0
RGVidWdnYWJsZVR5cGUobV9kZWJ1Z2dhYmxlVHlwZSk7Ci0gICAgICAgIG1fcHJveHktPmxvYWQo
V1RGTW92ZShkZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21tYW5k
c1VSTCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9wcm94
eS0+c2hvdygpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVj
dG9yQ2xpZW50LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElE
LCBtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1f
Y29ubmVjdGlvbklELCBtX3RhcmdldElEKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmPFJl
bW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3Byb3h5OwotICAgIFJlbW90ZUluc3BlY3RvckNsaWVu
dCYgbV9pbnNwZWN0b3JDbGllbnQ7Ci0gICAgQ29ubmVjdGlvbklEIG1fY29ubmVjdGlvbklEOwot
ICAgIFRhcmdldElEIG1fdGFyZ2V0SUQ7Ci0gICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBt
X2RlYnVnZ2FibGVUeXBlOwotfTsKLQotUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNw
ZWN0b3JDbGllbnQoVVJMIHVybCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQot
ICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKLXsKLSAgICBpZiAoIXVybC5ob3N0KCkgfHwgIXVy
bC5wb3J0KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGluc3BlY3RvciB1cmw6ICVz
IiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0SW5ldCh1cmwuaG9zdCgpLnV0ZjgoKS5kYXRh
KCksIHVybC5wb3J0KCkudmFsdWUoKSk7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb25JRCkgewotICAg
ICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gJXMi
LCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCk7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNs
aWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCi17Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25JRC5o
YXNWYWx1ZSgpKTsKLSAgICBhdXRvIG1lc3NhZ2UgPSBldmVudC51dGY4KCk7Ci0gICAgc2VuZCht
X2Nvbm5lY3Rpb25JRC52YWx1ZSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPiht
ZXNzYWdlLmRhdGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOwotfQotCi1IYXNoTWFwPFN0cmluZywg
SW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4m
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlzcGF0Y2hNYXAoKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7ICJCYWNrZW5kQ29tbWFuZHMi
X3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRC
YWNrZW5kQ29tbWFuZHMpIH0sCi0gICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0YXRpY19j
YXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KSB9
LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxI
YW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0s
Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hNYXA7Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCkKLXsKLSAgICBhdXRvIGV2
ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBldmVudC0+c2V0U3RyaW5nKCJldmVu
dCJfcywgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9zKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZl
bnQoZXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OmNvbm5lY3Rpb25DbG9zZWQoKQotewotICAgIG1fdGFyZ2V0cy5jbGVhcigpOwotICAgIG1f
aW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKLSAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9z
ZWQoKnRoaXMpOwotICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQot
Ci12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKQotewot
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAgY29ubmVjdGlvbkNsb3NlZCgp
OwotICAgIH0pOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVjdChDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1
Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5z
cGVjdG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQpLCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGVdIHsKLSAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0aGlzLCBjb25u
ZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUtPnNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2V0dXBFdmVu
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3RyaW5nKCJl
dmVudCJfcywgIlNldHVwIl9zKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0
aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0SW50ZWdlcigidGFy
Z2V0SUQiX3MsIHRhcmdldElEKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoc2V0dXBFdmVu
dC0+dG9KU09OU3RyaW5nKCkpOwotCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9h
ZCgpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tl
bmQoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBhdXRvIGJhY2tlbmRFdmVudCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2VuZE1l
c3NhZ2VUb0JhY2tlbmQiX3MpOwotICAgIGJhY2tlbmRFdmVudC0+c2V0SW50ZWdlcigiY29ubmVj
dGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOwotICAgIGJhY2tlbmRFdmVudC0+c2V0SW50ZWdlcigi
dGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKLSAgICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygibWVz
c2FnZSJfcywgbWVzc2FnZSk7Ci0gICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGJhY2tlbmRFdmVu
dC0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xv
c2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0
SUQpCi17Ci0gICAgYXV0byBjbG9zZWRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgY2xvc2VkRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJGcm9udGVuZERpZENsb3NlIl9z
KTsKLSAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0
aW9uSUQpOwotICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0
SUQpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChjbG9zZWRFdmVudC0+dG9KU09OU3RyaW5n
KCkpOwotCi0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29u
bmVjdGlvbklELCB0YXJnZXRJRCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6
c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50
Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2Ny
aXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBl
dmVudCkKLXsKLSAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQubWVzc2FnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7
Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSwg
bWVzc2FnZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEpTT046OkFycmF5
PiBtZXNzYWdlQXJyYXk7Ci0gICAgaWYgKCFtZXNzYWdlVmFsdWUtPmFzQXJyYXkobWVzc2FnZUFy
cmF5KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFRhcmdldD4gdGFyZ2V0TGlzdDsK
LSAgICBmb3IgKGF1dG8mIGl0ZW1WYWx1ZSA6ICptZXNzYWdlQXJyYXkpIHsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaXRlbU9iamVjdDsKLSAgICAgICAgaWYgKCFpdGVtVmFsdWUtPmFz
T2JqZWN0KGl0ZW1PYmplY3QpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVGFy
Z2V0IHRhcmdldDsKLSAgICAgICAgaWYgKCFpdGVtT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJ
RCJfcywgdGFyZ2V0LmlkKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygi
bmFtZSJfcywgdGFyZ2V0Lm5hbWUpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3Ry
aW5nKCJ1cmwiX3MsIHRhcmdldC51cmwpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0
U3RyaW5nKCJ0eXBlIl9zLCB0YXJnZXQudHlwZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICB0YXJnZXRMaXN0LmFwcGVuZChXVEZNb3ZlKHRhcmdldCkpOwotICAgIH0KLQotICAg
IGF1dG8gY29ubmVjdGlvbklEID0gZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCk7Ci0KLSAgICAv
LyBGaW5kIGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3RvcjxUYXJnZXRJ
RCwgND4gdGFyZ2V0c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1faW5zcGVjdG9y
UHJveHlNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChwYWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25J
RCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
LSAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiB0YXJnZXRMaXN0KSB7Ci0gICAgICAgICAgICBp
ZiAodGFyZ2V0LmlkID09IHBhaXIuc2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5hcHBlbmQo
cGFpci5zZWNvbmQpOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIHRhcmdldElEIDogdGFyZ2V0c1Rv
UmVtb3ZlKQotICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFp
cihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0KLSAgICBtX3RhcmdldHMuc2V0KGNvbm5lY3Rp
b25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7Ci0gICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hh
bmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQuY29ubmVj
dGlvbklEIHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBwcm94eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFr
ZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBldmVudC50YXJnZXRJRC52YWx1ZSgp
KSk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
ZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWY1MWQ2M2RlYTAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Jl
bW90ZUNvbnRyb2xsYWJsZVRhcmdldC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90
ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
ckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OwotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3Bl
Y3Rvck9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNl
cnZlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNw
ZWN0b3JDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVt
b3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOwotfTsKLQotdXNpbmcgQ29ubmVjdGlvbklEID0gSW5z
cGVjdG9yOjpDb25uZWN0aW9uSUQ7Ci11c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rvcjo6VGFyZ2V0
SUQ7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCwgUmVt
b3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKLSAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7Ci0K
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVwZGF0ZSB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHRv
IHVzZSBEZWJ1Z2dhYmxlVHlwZSBpbnN0ZWFkIG9mIFN0cmluZyBmb3IgdGhlIHRhcmdldCB0eXBl
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNDcK
LSAgICBzdHJ1Y3QgVGFyZ2V0IHsKLSAgICAgICAgVGFyZ2V0SUQgaWQ7Ci0gICAgICAgIFN0cmlu
ZyB0eXBlOwotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgU3RyaW5nIHVybDsKLSAgICB9
OwotCi0gICAgY29uc3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFy
Z2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFj
a2VuZENvbW1hbmRzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0K
LQotICAgIHZvaWQgaW5zcGVjdChDb25uZWN0aW9uSUQsIFRhcmdldElELCBJbnNwZWN0b3I6OkRl
YnVnZ2FibGVUeXBlKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25J
RCwgVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQo
Q29ubmVjdGlvbklELCBUYXJnZXRJRCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPFJlbW90ZUluc3BlY3RvckNsaWVudD47Ci0KLSAgICB2b2lkIHN0YXJ0SW5p
dGlhbENvbW11bmljYXRpb24oKTsKLSAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKLQotICAg
IHZvaWQgc2V0VGFyZ2V0TGlzdChjb25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29u
c3QgRXZlbnQmKTsKLQotICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBmaW5hbDsKLSAg
ICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIGZpbmFsOwotCi0g
ICAgdm9pZCBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJp
bmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0gICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1f
b2JzZXJ2ZXI7Ci0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKLSAg
ICBIYXNoTWFwPENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKLSAgICBI
YXNoTWFwPHN0ZDo6cGFpcjxDb25uZWN0aW9uSUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZUluc3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YmM0NTVkM2U2Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgiCi0KLSNpZiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudFdvcmxkLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0j
aW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKLSNpbmNsdWRlICJXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSlNET01FeGNlcHRpb25I
YW5kbGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+Ci0j
aW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jbGFz
cyBTY3JpcHRNZXNzYWdlQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVyOjpDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IFNjcmlwdE1lc3NhZ2VDbGllbnQoUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBpbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIpCi0gICAgICAgIDogbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIoaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKSB7IH0KLQotICAgIH5TY3JpcHRNZXNzYWdlQ2xp
ZW50KCkgeyB9Ci0KLSAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwg
RnJhbWVJbmZvRGF0YSYmLCBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGF1dG8gdG9rZW5zID0gc2Vy
aWFsaXplZFNjcmlwdFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoIjoiKTsKLSAgICAgICAgaWYgKHRv
a2Vucy5zaXplKCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBVUkwgcmVx
dWVzdFVSTCB7IHsgfSwgcGFnZS5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgbV9p
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaW5zcGVjdChyZXF1ZXN0VVJMLmhvc3RBbmRQb3J0KCks
IHRva2Vuc1swXS50b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzFdLnRvVUludFN0cmljdCgpLCB0b2tl
bnNbMl0pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXImIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOwotfTsKLQotY2xhc3MgTG9hZGVyQ2xp
ZW50IGZpbmFsIDogcHVibGljIEFQSTo6TG9hZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBMb2FkZXJDbGllbnQoRnVuY3Rpb248dm9pZCgpPiYm
IGxvYWRlZENhbGxiYWNrKQotICAgICAgICA6IG1fbG9hZGVkQ2FsbGJhY2sgeyBXVEZNb3ZlKGxv
YWRlZENhbGxiYWNrKSB9IHsgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5hdmlnYXRp
b24qLCBBUEk6Ok9iamVjdCopIGZpbmFsCi0gICAgewotICAgICAgICBtX2xvYWRlZENhbGxiYWNr
KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9sb2FkZWRDYWxs
YmFjazsKLX07Ci0KLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlPiBw
YXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGRlYnVnZ2FibGVUeXBl
U3RyaW5nKQotewotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAiamF2YXNjcmlwdCJf
cykKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OkphdmFTY3JpcHQ7
Ci0gICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJwYWdlIl9zKQotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6UGFnZTsKLSAgICBpZiAoZGVidWdnYWJsZVR5
cGVTdHJpbmcgPT0gInNlcnZpY2Utd29ya2VyIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZTo6U2VydmljZVdvcmtlcjsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVT
dHJpbmcgPT0gIndlYi1wYWdlIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dh
YmxlVHlwZTo6V2ViUGFnZTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQg
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjppbnNwZWN0KGNvbnN0IFN0cmluZyYgaG9z
dEFuZFBvcnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBj
b25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgYXV0byBkZWJ1Z2dhYmxlVHlwZSA9IHBhcnNlRGVi
dWdnYWJsZVR5cGVGcm9tU3RyaW5nKHR5cGUpOwotICAgIGlmICghZGVidWdnYWJsZVR5cGUpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGRlYnVnZ2FibGUgdHlwZTogXCIlc1wiIiwgdHlw
ZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2lu
c3BlY3RvckNsaWVudCkKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmluc3BlY3QoY29ubmVj
dGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUudmFsdWUoKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpydW5TY3JpcHQoY29uc3QgU3RyaW5nJiBzY3Jp
cHQpCi17Ci0gICAgbV9wYWdlLnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh7IHNjcmlwdCwgZmFs
c2UsIFdURjo6bnVsbG9wdCwgZmFsc2UgfSwgCi0gICAgICAgIFtdKEFQSTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlKiwgT3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscz4gZXhjZXB0aW9u
RGV0YWlscywgQ2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICAgICAgaWYgKGV4Y2VwdGlv
bkRldGFpbHMpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gcnVubmluZyBz
Y3JpcHQgXCIlc1wiIiwgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZS51dGY4KCkuZGF0YSgpKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdl
dExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYgY2xpZW50KQotewotICAgIFN0cmlu
Z0J1aWxkZXIgaHRtbDsKLSAgICBpZiAoY2xpZW50LnRhcmdldHMoKS5pc0VtcHR5KCkpCi0gICAg
ICAgIGh0bWwuYXBwZW5kKCI8cD5ObyB0YXJnZXRzIGZvdW5kPC9wPiJfcyk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGh0bWwuYXBwZW5kKCI8dGFibGU+Iik7Ci0gICAgICAgIGZvciAoYXV0byYgY29u
bmVjdGlvbklEIDogY2xpZW50LnRhcmdldHMoKS5rZXlzKCkpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgdGFyZ2V0IDogY2xpZW50LnRhcmdldHMoKS5nZXQoY29ubmVjdGlvbklEKSkgewotICAg
ICAgICAgICAgICAgIGh0bWwuYXBwZW5kKG1ha2VTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAg
ICI8dGJvZHk+PHRyPiIKLSAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48
ZGl2IGNsYXNzPVwidGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFz
cz1cInRhcmdldHVybFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48L3RkPiIKLSAgICAgICAgICAg
ICAgICAgICAgIjx0ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1
ZT1cIkluc3BlY3RcIiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5z
cGVjdG9yLnBvc3RNZXNzYWdlKFxcJyIsIGNvbm5lY3Rpb25JRCwgIjoiLCB0YXJnZXQuaWQsICI6
IiwgdGFyZ2V0LnR5cGUsICJcXCcpO1wiPjwvdGQ+IgotICAgICAgICAgICAgICAgICAgICAiPC90
cj48L3Rib2R5PiIKLSAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBodG1sLmFwcGVuZCgiPC90YWJsZT4iKTsKLSAgICB9Ci0gICAgbV90YXJnZXRM
aXN0c0h0bWwgPSBodG1sLnRvU3RyaW5nKCk7Ci0gICAgaWYgKG1fcGFnZUxvYWRlZCkKLSAgICAg
ICAgdXBkYXRlVGFyZ2V0TGlzdCgpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcjo6dXBkYXRlVGFyZ2V0TGlzdCgpCi17Ci0gICAgaWYgKCFtX3RhcmdldExpc3RzSHRt
bC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcnVuU2NyaXB0KG1ha2VTdHJpbmcoInVwZGF0ZVRhcmdl
dHMoYCIsIG1fdGFyZ2V0TGlzdHNIdG1sLCAiYCk7IikpOwotICAgICAgICBtX3RhcmdldExpc3Rz
SHRtbCA9IHsgfTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyOjpwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmIHBhZ2VQcm94eSwgV2ViVVJMU2No
ZW1lVGFzayYgdGFzaykKLXsKLSAgICBhdXRvJiByZXF1ZXN0VVJMID0gdGFzay5yZXF1ZXN0KCku
dXJsKCk7Ci0KLSAgICAvLyBEZXN0cm95IHRoZSBjbGllbnQgYmVmb3JlIGNyZWF0aW5nIGEgbmV3
IGNvbm5lY3Rpb24gc28gaXQgY2FuIGNvbm5lY3QgdG8gdGhlIHNhbWUgcG9ydAotICAgIG1faW5z
cGVjdG9yQ2xpZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RvckNsaWVudCA9IG1ha2VVbmlx
dWU8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PihyZXF1ZXN0VVJMLCAqdGhpcyk7Ci0KLSAgICAvLyBT
ZXR1cCB0YXJnZXQgcG9zdE1lc3NhZ2UgbGlzdGVuZXIKLSAgICBhdXRvIGhhbmRsZXIgPSBXZWJT
Y3JpcHRNZXNzYWdlSGFuZGxlcjo6Y3JlYXRlKG1ha2VVbmlxdWU8U2NyaXB0TWVzc2FnZUNsaWVu
dD4oKnRoaXMpLCAiaW5zcGVjdG9yIiwgQVBJOjpVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3Js
ZCgpKTsKLSAgICBwYWdlUHJveHkucGFnZUdyb3VwKCkudXNlckNvbnRlbnRDb250cm9sbGVyKCku
YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXIuZ2V0KCkpOwotCi0gICAgLy8gU2V0
dXAgbG9hZGVyIGNsaWVudCB0byBnZXQgbm90aWZpZWQgb2YgcGFnZSBsb2FkCi0gICAgbV9wYWdl
LnNldExvYWRlckNsaWVudChtYWtlVW5pcXVlPExvYWRlckNsaWVudD4oW3RoaXNdIHsKLSAgICAg
ICAgbV9wYWdlTG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOwotICAg
IH0pKTsKLSAgICBtX3BhZ2VMb2FkZWQgPSBmYWxzZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgaHRt
bEJ1aWxkZXI7Ci0gICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAiPGh0bWw+PGhlYWQ+
PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKLSAgICAgICAgIjxtZXRhIGh0dHAtZXF1
aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIg
Lz4iCi0gICAgICAgICI8c3R5bGU+IgotICAgICAgICAiICBoMSB7IGNvbG9yOiAjYmFiZGI2OyB0
ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRvbTogMDsgfSIKLSAgICAgICAg
IiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1mb250OyBmb250LXNpemU6IDEx
cHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHggMCAyMHB4OyBiYWNrZ3JvdW5k
LWNvbG9yOiAjZjZmNmY0OyAiCi0gICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAt
d2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9w
KDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsiCi0gICAgICAgICIgICAgICAg
ICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0
OyB9IgotICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6IGNv
bGxhcHNlOyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB9IgotICAgICAgICAiICB0YWJsZSwgdGQgeyBi
b3JkZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0
OiBub25lOyB9IgotICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKLSAgICAg
ICAgIiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9IgotICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6
IDIwMHB4OyB9IgotICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBv
dmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlw
c2lzOyB9IgotICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IGJhY2tncm91
bmQ6ICNlZWU7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29y
ZDsgfSIKLSAgICAgICAgIiAgdGQuaW5wdXQgeyB3aWR0aDogNjRweDsgfSIKLSAgICAgICAgIiAg
aW5wdXQgeyB3aWR0aDogMTAwJTsgcGFkZGluZzogOHB4OyB9IgotICAgICAgICAiPC9zdHlsZT4i
Ci0gICAgICAgICI8L2hlYWQ+PGJvZHk+PGgxPkluc3BlY3RhYmxlIHRhcmdldHM8L2gxPiIKLSAg
ICAgICAgIjxkaXYgaWQ9XCJ0YXJnZXRsaXN0XCI+PHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD48L2Rp
dj48L2JvZHk+IgotICAgICAgICAiPHNjcmlwdD4iCi0gICAgICAgICJmdW5jdGlvbiB1cGRhdGVU
YXJnZXRzKHN0cikgeyIKLSAgICAgICAgICAgICJsZXQgdGFyZ2V0RGl2ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RhcmdldGxpc3QnKTsiCi0gICAgICAgICAgICAidGFyZ2V0RGl2LmlubmVy
SFRNTCA9IHN0cjsiCi0gICAgICAgICJ9IgotICAgICAgICAiPC9zY3JpcHQ+Iik7Ci0gICAgaHRt
bEJ1aWxkZXIuYXBwZW5kKCI8L2h0bWw+Iik7Ci0KLSAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRl
ci50b1N0cmluZygpLnV0ZjgoKTsKLSAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShodG1sLmRhdGEoKSwgaHRtbC5sZW5ndGgoKSk7Ci0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZShyZXF1ZXN0VVJMLCAidGV4dC9odG1sIl9zLCBodG1sLmxlbmd0aCgpLCAiVVRGLTgiX3Mp
OwotICAgIHRhc2suZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICB0YXNrLmRpZFJl
Y2VpdmVEYXRhKFdURk1vdmUoZGF0YSkpOwotICAgIHRhc2suZGlkQ29tcGxldGUoUmVzb3VyY2VF
cnJvcigpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2MDBlZmRlZDQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIlJlbW90
ZUluc3BlY3RvckNsaWVudC5oIgotI2luY2x1ZGUgIldlYlVSTFNjaGVtZUhhbmRsZXIuaCIKLQot
bmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBVUkw7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJVUkxTY2hlbWVUYXNrOwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIsIHB1YmxpYyBXZWJV
UkxTY2hlbWVIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIocGFnZSkpOyB9Ci0KLSAg
ICB2b2lkIGluc3BlY3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklELCBU
YXJnZXRJRCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIoV2ViUGFnZVByb3h5JiBwYWdlKQotICAgICAgICA6IG1fcGFn
ZShwYWdlKSB7IH0KLQotICAgIC8vIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyCi0gICAgdm9pZCB0
YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lk
IGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgZmluYWwgeyB9Ci0KLSAg
ICAvLyBXZWJVUkxTY2hlbWVIYW5kbGVyCi0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQ
YWdlUHJveHkmLCBXZWJVUkxTY2hlbWVUYXNrJikgZmluYWw7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0
b3BUYXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHBsYXRmb3JtVGFza0NvbXBsZXRlZChXZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9Ci0K
LSAgICB2b2lkIHVwZGF0ZVRhcmdldExpc3QoKTsKLQotICAgIHZvaWQgcnVuU2NyaXB0KGNvbnN0
IFN0cmluZyYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvckNsaWVudD4g
bV9pbnNwZWN0b3JDbGllbnQ7Ci0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAgYm9vbCBt
X3BhZ2VMb2FkZWQgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX3RhcmdldExpc3RzSHRtbDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzkwYzJiOTRmMmYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQotCi0jaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBMUENUU1RSIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBv
aW50ZXIiKTsKLWNvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUg
PSBMIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3MiOwotCi1MUkVTVUxUIENBTExCQUNLIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkq
IGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqPig6Okdl
dFByb3AoaHduZCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOwotCi0gICAg
c3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIHJldHVybiBjbGllbnQt
PnNpemVDaGFuZ2UoKTsKLSAgICBjYXNlIFdNX0NMT1NFOgotICAgICAgICByZXR1cm4gY2xpZW50
LT5vbkNsb3NlKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQot
c3RhdGljIEFUT00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2
ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdp
bmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsK
LSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlICAg
ICAgICAgID0gMDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OlduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5j
YlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IDA7Ci0gICAgd2Nl
eC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJz
b3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Y2V4
Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0K
LSAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLSAgICByZXR1cm4gOjpSZWdp
c3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpzaXplQ2hhbmdlKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUs
ICZyZWN0KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygpLCAwLCByZWN0
LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJl
Y3QudG9wLCBTV1BfTk9aT1JERVIpOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpvbkNsb3NlKCkKLXsKLSAgICA6OlNob3dXaW5kb3cobV9mcm9u
dGVuZEhhbmRsZSwgU1dfSElERSk7Ci0gICAgZnJvbnRlbmREaWRDbG9zZSgpOwotICAgIHJldHVy
biAwOwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgUmVmUHRyPFdlYlByZWZlcmVu
Y2VzPiBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJL
aXQyLiIsICJXZWJLaXQyLiIpOwotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NG
cm9tRmlsZVVSTHModHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgcHJl
ZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5j
ZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2Vu
ZGlmCi0KLSAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6
OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7Ci0K
LSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3Jl
YXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQ
cm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpOwotICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKLQotICAgIFdlYkNv
cmU6OkludFJlY3QgcmVjdCg2MCwgMjAwLCAxNTAwLCAxMDAwKTsKLSAgICByZWdpc3RlcldpbmRv
d0NsYXNzKCk7Ci0gICAgbV9mcm9udGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0g
ICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCAw
LCAwLCAwLCAwKTsKLQotICAgIDo6U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxlLCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykp
OwotICAgIFNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7Ci0KLSAgICBSRUNU
IHI7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyKTsKLSAgICBtX3dl
YlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1fZnJvbnRlbmRI
YW5kbGUpOwotICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKLX0KLQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wsIGJvb2wpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9w
ZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpIHsgfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhh
bmRsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dl
Ykluc3BlY3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRl
YWM5NzMxNzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rv
clByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiQVBJTmF2
aWdhdGlvbkFjdGlvbi5oIgotI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCi0jaW5j
bHVkZSAiUGFnZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQ
b29sLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNh
dGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvV2ViQ29yZUJ1bmRsZVdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNl
SGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4K
LSNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3Rm
L2NmL0NGVVJMRXh0cmFzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRp
YyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYkluc3Bl
Y3RvclByb3h5UG9pbnRlciI7Ci1zdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94
eUNsYXNzTmFtZSA9IEwiV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7Ci0KLXN0cnVjdCBJbnNwZWN0
ZWRXaW5kb3dJbmZvIHsKLSAgICBpbnQgbGVmdDsKLSAgICBpbnQgdG9wOwotICAgIGludCB2aWV3
V2lkdGg7Ci0gICAgaW50IHZpZXdIZWlnaHQ7Ci0gICAgaW50IHBhcmVudFdpZHRoOwotICAgIGlu
dCBwYXJlbnRIZWlnaHQ7Ci19OwotCi1zdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJbnNw
ZWN0ZWRXaW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRvdykK
LXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRvdywg
JnJlY3QpOwotICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50V2lu
ZG93LCAoTFBQT0lOVCkmcmVjdCwgMik7Ci0KLSAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgOjpH
ZXRDbGllbnRSZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJlY3QpOwotICAgIHJldHVybiB7IHJl
Y3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0g
cmVjdC50b3AsIHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJlY3Qu
Ym90dG9tIC0gcGFyZW50UmVjdC50b3AgfTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFN
IGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fV0lORE9XUE9TQ0hB
TkdJTkc6IHsKLSAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+
KGxQYXJhbSk7Ci0KLSAgICAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3
bmQpOwotICAgICAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3QocGFy
ZW50LCAmcGFyZW50UmVjdCk7Ci0KLSAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgICAg
ICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3QpOwot
Ci0gICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgICAgICBjYXNlIEF0dGFj
aG1lbnRTaWRlOjpCb3R0b206IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdo
dCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0
YWNoZWRXaW5kb3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRv
cCwgd2luZG93UG9zLT5jeSk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3Rv
ckhlaWdodDsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRv
dywgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQ
b3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAg
ICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDogewotICAgICAgICAgICAgdW5zaWduZWQgaW5z
cGVjdG9yV2lkdGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25z
dHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3Rv
clJlY3QubGVmdCwgd2luZG93UG9zLT5jeCk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09
IGluc3BlY3RvcldpZHRoOwotICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JW
aWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnks
IGluc3BlY3RvcldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJveHk6
OnduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBvaW50
ZXJQcm9wKSk7Ci0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAg
IDo6U2V0V2luZG93UG9zKGNsaWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBM
T1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0K
LWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQotewotICAgIHN0
YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKLQotICAgIGlmICho
YXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBoYXZl
UmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAg
ICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlID0gMDsK
LSAgICB3Y2V4LmxwZm5XbmRQcm9jID0gd25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAw
OwotICAgIHdjZXguY2JXbmRFeHRyYSA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3Jl
OjppbnN0YW5jZUhhbmRsZSgpOwotICAgIHdjZXguaEljb24gPSAwOwotICAgIHdjZXguaEN1cnNv
ciA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgPSAw
OwotICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBX
ZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3Y2V4LmhJY29uU20gPSAwOwotICAgIHJl
dHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFj
dGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlz
dGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAvLyBB
bGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgQVBJOjpGcmFt
ZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VG
cmFtZSgpOwotICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1l
KCkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9y
UHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8p
OwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgp
OwotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAg
ICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVz
dC51cmwoKSkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9t
IGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCi0gICAgdG9JbXBsKGxpc3RlbmVyUmVm
KS0+aWdub3JlKCk7Ci0KLSAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0
ZWQgcGFnZS4KLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVx
dWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENy
YXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJJbnNwZWN0
b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94
eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLSAgICBBU1NFUlQod2ViSW5zcGVj
dG9yUHJveHkpOwotICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0K
LVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQ
YWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKLQotICAgIGF1dG8gcHJlZmVy
ZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2Vi
S2l0Mi4iKTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2ZWxv
cGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0
IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0
ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldEphdmFT
Y3JpcHRSdW50aW1lRmxhZ3MoeyB9KTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91
cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBh
Z2UoKSkpOwotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0
aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmlu
c3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7Ci0KLSAgICBXS1BhZ2VOYXZp
Z2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKLSAgICAgICAgeyAwLCB0aGlzIH0s
Ci0gICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCi0gICAgICAgIG51bGxw
dHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQotICAgICAgICBudWxscHRy
LCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFN0
YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVT
ZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAv
LyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZENv
bW1pdE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgot
ICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAv
LyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQotICAgICAgICBudWxscHRyLCAvLyBk
aWRGaW5pc2hEb2N1bWVudExvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5n
ZQotICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZQotICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCi0gICAgICAgIG51bGxwdHIsIC8vIGNvcHlX
ZWJDcnlwdG9NYXN0ZXJLZXkKLQotICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRp
b25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQot
ICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxs
cHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90Ci0gICAgfTsKLQotICAg
IFJFQ1QgciA9IHsgMCwgMCwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwg
c3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd0hlaWdodCkgfTsKLSAgICBhdXRvIHBhZ2Ug
PSBpbnNwZWN0ZWRQYWdlKCk7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmll
d1dpZGdldCgpOwotICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50
KG1faW5zcGVjdGVkVmlld1dpbmRvdyk7Ci0gICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRl
KHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAg
IG1faW5zcGVjdG9yVmlldyA9ICZ2aWV3LmxlYWtSZWYoKTsKLSAgICBhdXRvIGluc3BlY3RvclBh
Z2UgPSBtX2luc3BlY3RvclZpZXctPnBhZ2UoKTsKLSAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cg
PSBpbnNwZWN0b3JQYWdlLT52aWV3V2lkZ2V0KCk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRp
b25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwot
Ci0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIFdlYkNvcmU6Oldp
bmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2lu
ZG93LCB0aGlzKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgIG1faW5zcGVj
dG9yUGFnZSA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgewotICAg
ICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93KTsKLSAgICAgICAgbV9p
bnNwZWN0b3JWaWV3V2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faW5zcGVjdG9y
RGV0YWNoV2luZG93KSB7Ci0gICAgICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdp
bmRvdywgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCk7Ci0gICAgICAgIDo6RGVzdHJveVdp
bmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNo
V2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVs
bHB0cjsKLSAgICBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOwotfQotCi1T
dHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQotewotI2lmIFVTRShD
RikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxl
Q29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBD
RlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVS
TEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNl
bmRpZgotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJM
KCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0g
YWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwg
Q0ZTVFIoIlRlc3QiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsK
LSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAg
IHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNw
ZWN0b3JCYXNlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBi
YXNlVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJL
aXRCdW5kbGUoKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIiksIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoYmFzZVVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAg
IHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3Rv
clByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKLXsKLSAgICAvLyBGSVhNRSA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0
YS4KLSAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25l
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewot
ICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93
LCAmcmVjdCk7Ci0gICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Ci19Ci0KLXVuc2ln
bmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsK
LSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRv
dywgJnJlY3QpOwotICAgIHJldHVybiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3cgJiYgOjpHZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2lu
c3BlY3RvckRldGFjaFdpbmRvdykgewotICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZp
ZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgICAgIDo6U2hvd1dp
bmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfSElERSk7Ci0gICAgfQotCi0gICAgV2Vi
Q29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZp
ZXdXaW5kb3csIHRoaXMpOwotCi0gICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVu
dFNpZGU6OkJvdHRvbSkgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQg
PSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0
LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6
Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9
Ci0gICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWlu
c3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewotICAgICAgICByZWdpc3RlcldpbmRv
d0NsYXNzKCk7Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5k
b3dFeCgwLCBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRP
VywKLSAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5k
b3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwKLSAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6
Omluc3RhbmNlSGFuZGxlKCksIDApOwotICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRh
Y2hXaW5kb3csIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8
SEFORExFPih0aGlzKSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2Fk
Y2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0g
ICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRv
dywgJnJlY3QpOwotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8o
bV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAg
IDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwg
cmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9S
REVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRv
d0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5k
b3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNX
UF9OT1pPUkRFUik7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIDo6U2hvd1dpbmRv
dyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0
KQotewotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0
V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5k
b3dJbmZvLnBhcmVudEhlaWdodCAtIGhlaWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdp
bmRvd0luZm8ubGVmdCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9z
KG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRv
cCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5w
YXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVk
IHdpZHRoKQotewotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8o
bV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAg
IDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJl
bnRXaWR0aCAtIHdpZHRoLCB3aW5kb3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50
SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQ
b3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8u
dG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZv
LnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlk
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Ccmlu
Z0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJiAvKiB1cmwgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgYm9vbCwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWlsYWJsZSAqLykK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBwbGF0Zm9ybURldGFjaCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDg0YjA5MGZkYzcyLi45NTgyY2NlZTMyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NDIxLDgg
KzQ0MjEsOCBAQAogCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4QjVEMDFGRTFENTVC
MDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNw
ZWN0b3JXS1dlYlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUxOEI1RDEx
RkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV0tJbnNwZWN0b3JXS1dlYlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE1NDI5M0EyMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1
cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDI5M0EzMTk1
QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLm1tOyBwYXRoID0gaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25p
emVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTQyOTNBMjE5NUE0M0M2MDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5z
cGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1NDNFMzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTU0M0UzMDYyMTVBRDEyRTAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NDNF
MzA4MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY2NTQsMTAgKzY2NTQsNiBAQAogCQkJCUY0REI1NEU1MjMxOUU3MzMwMDlFMzE1NSAv
KiBXS0hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLm1tICovLAogCQkJCTkzM0RG
ODJEMUIzQkMwOTAwMEFFQTlFMyAvKiBXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmggKi8s
CiAJCQkJOTMzREY4MkYxQjNCQzBCNDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRy
b2xsZXIubW0gKi8sCi0JCQkJMEYzQzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5oICovLAotCQkJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8sCi0JCQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3
IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8sCi0JCQkJQTU0
MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLm1tICovLAogCQkJCTJERDVFMTI3MjEwQURDN0EwMERCNjAxMiAvKiBXS0tleWJvYXJk
U2Nyb2xsaW5nQW5pbWF0b3IuaCAqLywKIAkJCQkyREQ1RTEyNjIxMEFEQzdBMDBEQjYwMTIgLyog
V0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tICovLAogCQkJCTJEQjk0Mjk3MjM0RTdBN0Yw
MEU3NzZBRCAvKiBXS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKQEAgLTc5ODMsNiArNzk3
OSw5OSBAQAogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJOTFEOTcwRDQyM0RBNkQyNTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJOTFEOTcwRDUyM0RBNkQ1MDAwNTdE
QkMzIC8qIEFnZW50cyAqLywKKwkJCQk5MUQ5NzBENzIzREE2RDVCMDA1N0RCQzMgLyogaW9zICov
LAorCQkJCTkxRDk3MEQ2MjNEQTZENTUwMDU3REJDMyAvKiBtYWMgKi8sCisJCQkJQTVFMzkxRkIy
MTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmNwcCAqLywKKwkJCQlBNUUz
OTFGQzIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCAqLywKKwkJCQlB
NTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwICov
LAorCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oICovLAorCQkJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQkxQzhFMjgzMzEyNzVENzM4MDBCQzdCRDAgLyog
V2ViSW5zcGVjdG9yUHJveHkuY3BwICovLAorCQkJCTFDOEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAv
KiBXZWJJbnNwZWN0b3JQcm94eS5oICovLAorCQkJCTFDNzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAv
KiBXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQlBNTVCQTgyNzFCQTM4RTFF
MDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlBNTVCQTgyODFC
QTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmggKi8sCisJCQkJQTVFQzZB
RDIyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLywKKwkJCQlBNUVD
NkFEMzIxNTFCRDY5MDA2NzdEMTcgLyogV2ViUGFnZURlYnVnZ2FibGUuaCAqLywKKwkJCQlBNTEz
RjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICov
LAorCQkJCUE1MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBJbnNwZWN0b3I7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQk5MUQ5NzBENTIzREE2RDUwMDA1N0RCQzMgLyogQWdlbnRzICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCSk7CisJCQlwYXRo
ID0gQWdlbnRzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRDYy
M0RBNkQ1NTAwNTdEQkMzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQTVEMzUwNEQxRDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5TWFjLm1tICovLAorCQkJCTFDQThCOTM1MTI3Qzc3NEUwMDU3NkMyQiAvKiBXZWJJ
bnNwZWN0b3JQcm94eU1hYy5tbSAqLywKKwkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyog
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovLAorCQkJCTk5NEJBREYyMUY3RDc3RUIwMEI1
NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tICovLAorCQkJCUE1MThCNUQwMUZF
MUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5oICovLAorCQkJCUE1MThCNUQx
MUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5tbSAqLywKKwkJCSk7CisJ
CQlwYXRoID0gbWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcw
RDcyM0RBNkQ1QjAwNTdEQkMzIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMEYzQzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5oICovLAorCQkJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8sCisJCQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3
IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8sCisJCQkJQTU0
MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OworCQk5MUQ5NzBFMDIzREE2RkIxMDA1N0RCQzMgLyogSW5zcGVjdG9yICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5MUQ5NzBFNTIz
REE3MDQ3MDA1N0RCQzMgLyogbWFjICovLAorCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgKi8sCisJCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi8sCisJCQkJQTU1QkE4MTQxQkEyM0UwNTAw
N0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAorCQkJCTFDOEUy
ODFGMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuY3BwICovLAorCQkJCTFDOEUyODFF
MTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCAqLywKKwkJCQkxQzhFMkExQzEyNzc4
MzNGMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluICovLAorCQkJCUJDMTExQTU5
MTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJJbnNwZWN0b3JDbGllbnQuY3BwICovLAorCQkJCUJDMDMy
RDZEMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGllbnQuaCAqLywKKwkJCQlBNTVC
QTgzMjFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVy
LmNwcCAqLywKKwkJCQlBNTVCQTgzMzFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyLmggKi8sCisJCQkJRkVFNDNGRDAxRTY3QUZDNjAwNzdENkQxIC8q
IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwICovLAorCQkJCUZFRTQzRkQxMUU2
N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggKi8sCisJ
CQkJRkVFNDNGRDIxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdl
Ykluc3BlY3RvclVJLmNwcCAqLywKKwkJCQkxQzg5MUQ2MzE5QjEyNEZGMDBCQTc5REQgLyogV2Vi
SW5zcGVjdG9yVUkuaCAqLywKKwkJCQkxQzg5MUQ2NDE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5z
cGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCisJCQkJQTU0M0UzMEEyMTVDOEE4NDAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwICovLAorCQkJCUE1NDNFMzA4MjE1QzhBODMwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggKi8sCisJCQkJQTU0M0UzMDkyMTVDOEE4
MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCAqLywKKwkJ
CQlBNTQzRTMwQjIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuaCAqLywKKwkJCQlBNTQzRTMwNjIxNUFEMTJFMDAyNzlDRDkgLyogV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAgKi8sCisJCQkJQTU0M0UzMDUyMTVBRDEyRDAw
Mjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCAqLywKKwkJ
CSk7CisJCQlwYXRoID0gSW5zcGVjdG9yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJOTFEOTcwRTUyM0RBNzA0NzAwNTdEQkMzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8q
IFdlYkluc3BlY3RvclVJTWFjLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBtYWM7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk5MzkyODhFMDIxNDA0REYwMDBFQkJBMzMgLyog
SW5kZXhlZERCICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTgxOTYsNiArODI4NSw3IEBACiAJCQkJQkMwRTVGQ0IxMkQ2OTZERDAwMTJBNzJBIC8qIEdlb2xv
Y2F0aW9uICovLAogCQkJCTJEN0U0M0JGMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFUgKi8sCiAJCQkJ
QkMyMDRFREYxMUM4M0U3MjAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlICovLAorCQkJCTkxRDk3
MEUwMjNEQTZGQjEwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8sCiAJCQkJMzNEM0EzQkQxMzM5NjA5
ODAwNzA5QkU0IC8qIE1lZGlhQ2FjaGUgKi8sCiAJCQkJNEE0MTBGNDExOUFGN0IyNzAwMkVCQUI1
IC8qIE1lZGlhU3RyZWFtICovLAogCQkJCTUxMDVCMEQyMTYyRjdBNUUwMEUyNzcwOSAvKiBOZXR3
b3JrICovLApAQCAtODI0Niw4ICs4MzM2LDYgQEAKIAkJCQlCQzAzMkQ2QTEwRjQzNzhEMDA1OEMx
NUEgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCAqLywKIAkJCQlCQzFCRTFERjEyRDU0QTQxMDAw
NEEyMjggLyogV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwICovLAogCQkJCUJDMUJFMURFMTJENTRB
NDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5oICovLAotCQkJCUJDMTExQTU5MTEy
RjRGQkIwMDMzN0JBQiAvKiBXZWJJbnNwZWN0b3JDbGllbnQuY3BwICovLAotCQkJCUJDMDMyRDZE
MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQk1MTNGRkI4
RTIwMTQ1OUMyMDAyNTk2RUEgLyogV2ViTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwICov
LAogCQkJCTUxM0ZGQjhGMjAxNDU5QzIwMDI1OTZFQSAvKiBXZWJNZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlci5oICovLAogCQkJCTMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmlj
YXRpb25DbGllbnQuY3BwICovLApAQCAtODI5Niw5ICs4Mzg0LDYgQEAKIAkJCQkxQTkwQzFGMjEy
NjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1
NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAw
OEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKLQkJCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0Qg
LyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwICovLAotCQkJCUE1NUJBODEzMUJBMjNFMDUwMDdD
RDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oICovLAotCQkJCUE1NUJBODE0MUJBMjNFMDUw
MDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLywKIAkJCQkyRDgx
OUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAg
Ki8sCiAJCQkJMkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlD
b2xsZWN0b3IuaCAqLywKIAkJCQkyRDgxOUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1
cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbiAqLywKQEAgLTgzMTgsMTcgKzg0MDMsNiBA
QAogCQkJCTFBNUIxQzUzMTg5ODdFREYwMDRGQ0Y5QiAvKiBXZWJEb2N1bWVudExvYWRlci5oICov
LAogCQkJCUJDMTExQURDMTEyRjVCOTMwMDMzN0JBQiAvKiBXZWJGcmFtZS5jcHAgKi8sCiAJCQkJ
QkMwMzJEODkxMEY0MzdBMDAwNThDMTVBIC8qIFdlYkZyYW1lLmggKi8sCi0JCQkJMUM4RTI4MUYx
Mjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAgKi8sCi0JCQkJMUM4RTI4MUUxMjc1
RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5oICovLAotCQkJCTFDOEUyQTFDMTI3NzgzM0Yw
MEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8sCi0JCQkJQTU1QkE4MzIxQkEz
RTZGQTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgKi8s
Ci0JCQkJQTU1QkE4MzMxQkEzRTZGQTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5oICovLAotCQkJCUZFRTQzRkQwMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcCAqLywKLQkJCQlGRUU0M0ZEMTFFNjdBRkM2MDA3
N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oICovLAotCQkJCUZFRTQz
RkQyMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1l
c3NhZ2VzLmluICovLAotCQkJCTFDODkxRDYyMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0
b3JVSS5jcHAgKi8sCi0JCQkJMUM4OTFENjMxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3Rv
clVJLmggKi8sCi0JCQkJMUM4OTFENjQxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJ
Lm1lc3NhZ2VzLmluICovLAogCQkJCUJDODU3Rjg0MTJCODJEMEIwMEVERUIyRSAvKiBXZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJQkM4NTdGODMxMkI4MkQwQjAwRURFQjJF
IC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggKi8sCiAJCQkJQkM5NjNENkExMTNERDE5
MjAwNTc0QkUyIC8qIFdlYlBhZ2UuY3BwICovLApAQCAtODMzNiwxMiArODQxMCw2IEBACiAJCQkJ
QzBDRTcyNTgxMjQ3RTREQTAwQkMwRUM0IC8qIFdlYlBhZ2UubWVzc2FnZXMuaW4gKi8sCiAJCQkJ
QkM3QjYyMTQxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCAqLywKIAkJ
CQlCQzdCNjIxMzEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCAqLywKLQkJ
CQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAg
Ki8sCi0JCQkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQuaCAqLywKLQkJCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuY3BwICovLAotCQkJCUE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAv
KiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICovLAotCQkJCUE1NDNFMzA2MjE1
QUQxMkUwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNw
cCAqLywKLQkJCQlBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5oICovLAogCQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAv
KiBXZWJQYWdlT3ZlcmxheS5jcHAgKi8sCiAJCQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8q
IFdlYlBhZ2VPdmVybGF5LmggKi8sCiAJCQkJQkNBMEVGN0UxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdl
YlVuZG9TdGVwLmNwcCAqLywKQEAgLTgzNjUsNiArODQzMyw3IEBACiAJCQkJMUFCN0Q0QzcxMjg4
QUE5QTAwQ0ZEMDhDIC8qIERvd25sb2FkcyAqLywKIAkJCQk1MTVCRTE3QjFENTRFRjVBMDBERDdD
NjggLyogR2FtZXBhZCAqLywKIAkJCQkyRDdFNDNCQjIzNzUyQ0M0MDBFQTVDQTAgLyogR1BVICov
LAorCQkJCTkxRDk3MEQ0MjNEQTZEMjUwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8sCiAJCQkJMkRB
OTQ0QTgxODg0RTlBQjAwRUQ4NkRCIC8qIGlvcyAqLywKIAkJCQlCQzExMUIxODExMkY1RkI0MDAz
MzdCQUIgLyogTGF1bmNoZXIgKi8sCiAJCQkJQkNDRjA4NUMxMTNGM0I3NTAwQzY1MEM1IC8qIG1h
YyAqLywKQEAgLTgzOTQsOCArODQ2Myw2IEBACiAJCQkJMkRENUE3MkExRUJGMDlBNzAwOUJBNTk3
IC8qIEhpZGRlblBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50ZXIuaCAqLywKIAkJCQk4
MzlBMkYyRjFFMjA2NzM5MDAzOTA1N0UgLyogSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNh
bXBsZXIuY3BwICovLAogCQkJCTgzOUEyRjMwMUUyMDY3MzkwMDM5MDU3RSAvKiBIaWdoUGVyZm9y
bWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5oICovLAotCQkJCUE1RTM5MUZCMjE4M0MxRTkwMEM4
RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgKi8sCi0JCQkJQTVFMzkxRkMyMTgzQzFF
OTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmggKi8sCiAJCQkJNUNFQUJBMkIyMzMz
MjUxNDAwNzk3Nzk3IC8qIExlZ2FjeUdsb2JhbFNldHRpbmdzLmNwcCAqLywKIAkJCQk1Q0VBQkEy
QTIzMzMyNDc3MDA3OTc3OTcgLyogTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCAqLywKIAkJCQkzMTYw
N0YzODE5NjI3MDAyMDA5Qjg3REEgLyogTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmggKi8sCkBA
IC04NDExLDkgKzg0NzgsNiBAQAogCQkJCTgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgzMiAvKiBQcm9j
ZXNzVGhyb3R0bGVyQ2xpZW50LmggKi8sCiAJCQkJNDY4MzU2OUIyMUU4MUNDNzAwNkUyN0EzIC8q
IFByb3Zpc2lvbmFsUGFnZVByb3h5LmNwcCAqLywKIAkJCQk0NjgzNTY5QTIxRTgxQ0M3MDA2RTI3
QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuaCAqLywKLQkJCQlBNTVCQTgxQjFCQTI1QjFFMDA3
Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwICovLAotCQkJCUE1NUJBODE5MUJB
MjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oICovLAotCQkJCUE1NUJB
ODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5p
biAqLywKIAkJCQlCQzExMUIwODExMkY1RTNDMDAzMzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1l
ci5jcHAgKi8sCiAJCQkJMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNz
VGltZXIuaCAqLywKIAkJCQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5n
V2FybmluZy5oICovLApAQCAtODQ5MywxMSArODU1Nyw2IEBACiAJCQkJQkMxQkUxRjExMkQ1NERC
RDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwICovLAogCQkJCUJDMUJFMUYw
MTJENTREQkQwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggKi8sCiAJCQkJNTFD
OEUxOUIxRjIxNjE3MjAwQkY3MzFCIC8qIFdlYkljb25EYXRhYmFzZS5oICovLAotCQkJCTFDOEUy
ODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJMUM4
RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJMUM3
N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICov
LAotCQkJCUE1NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMu
Y3BwICovLAotCQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGls
aXRpZXMuaCAqLywKIAkJCQlDOThDNDhBMzFCNkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFTZXNz
aW9uRm9jdXNNYW5hZ2VyLmNwcCAqLywKIAkJCQlDOThDNDhBNDFCNkZENEMzMDAxNDUxMDMgLyog
V2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmggKi8sCiAJCQkJQzlDMTgzMzcxQjczRkQ2QTAw
NzAzNkE3IC8qIFdlYk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlckNsaWVudC5jcHAgKi8sCkBAIC04
NTA4LDE2ICs4NTY3LDEyIEBACiAJCQkJN0NDQ0M4RjkxQTVGNTBGRDAwOEZCMERBIC8qIFdlYk5h
dmlnYXRpb25TdGF0ZS5oICovLAogCQkJCUJDMURGRUEzMTJCMzFGODcwMDVERjczMCAvKiBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcCAqLywKIAkJCQlCQzFERkVBMjEyQjMxRjg3
MDA1REY3MzAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oICovLAotCQkJCUE1
RUM2QUQyMjE1MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdlRGVidWdnYWJsZS5jcHAgKi8sCi0JCQkJ
QTVFQzZBRDMyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmggKi8sCiAJCQkJ
ODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5jcHAgKi8sCiAJCQkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oICovLAogCQkJCUJDN0I2MjA1MTI5QTBBNjcwMEQxNzRBNCAvKiBX
ZWJQYWdlR3JvdXAuY3BwICovLAogCQkJCUJDN0I2MjA0MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQ
YWdlR3JvdXAuaCAqLywKIAkJCQkyRDlFQTMxMDFBOTZEOUVCMDAyRDI4MDcgLyogV2ViUGFnZUlu
amVjdGVkQnVuZGxlQ2xpZW50LmNwcCAqLywKIAkJCQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcg
LyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8sCi0JCQkJQTUxM0Y1M0YyMTU0QTVD
RDAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKLQkJCQlBNTEz
RjUzRTIxNTRBNUNDMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywK
IAkJCQlCQzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNwcCAqLywKIAkJ
CQlCQzAzMkRDQjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVByb3h5LmggKi8sCiAJCQkJQkNC
RDM4RkExMjVCQUI5QTAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAqLywKQEAg
LTkxODMsNyArOTIzOCw2IEBACiAJCQkJN0M2RDM3RkExNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VC
YW5uZXJNYWMubW0gKi8sCiAJCQkJMUFBRjI2MzcxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggKi8sCiAJCQkJMUFBRjI2MzYxNDY4N0MzOTAwNEExRThB
IC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tICovLAotCQkJCTFDOEUyREFEMTI3
OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSU1hYy5tbSAqLywKIAkJCQlCQzk2M0Q2RDEx
M0REMUE1MDA1NzRCRTIgLyogV2ViUGFnZU1hYy5tbSAqLywKIAkJCQkyOUNENTVBODEyOEUyOTRG
MDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCAqLywKIAkJCQky
OUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJh
c2UubW0gKi8sCkBAIC05MjYwLDcgKzkzMTQsNiBAQAogCQkJCTFBRkRFNjVCMTk1NEU4RDUwMEM0
OEZGQSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwICovLAogCQkJCTBGQ0I0RTU4MThC
QkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oICovLAogCQkJCTBGQ0I0RTU5MThC
QkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSAqLywKLQkJCQlBNUQzNTA0RDFE
NzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCiAJCQkJ
RTE4RTY5MDkxNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuY3BwICovLAogCQkJ
CUUxOEU2OTBBMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmggKi8sCiAJCQkJ
RTE4RTY5MEQxNjlCNTdERjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkubWVzc2FnZXMuaW4g
Ki8sCkBAIC05MjgxLDcgKzkzMzQsNiBAQAogCQkJCUY2RDYzMkJBMTMzRDE4MUIwMDc0M0Q3NyAv
KiBXZWJDb29raWVNYW5hZ2VyUHJveHlNYWMubW0gKi8sCiAJCQkJRTU2OEI5MjAyMEEzQUM2QTAw
RTNDODU2IC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5oICovLAogCQkJCUU1
NjhCOTIxMjBBM0FDNkEwMEUzQzg1NiAvKiBXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25N
YWMubW0gKi8sCi0JCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclBy
b3h5TWFjLm1tICovLAogCQkJCUJDODU3RTg1MTJCNzFFQkIwMEVERUIyRSAvKiBXZWJQYWdlUHJv
eHlNYWMubW0gKi8sCiAJCQkJQkM1NzUwOTUxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBvcHVwTWVu
dVByb3h5TWFjLmggKi8sCiAJCQkJQkM1NzUwOTYxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBvcHVw
TWVudVByb3h5TWFjLm1tICovLApAQCAtOTI5MiwxMCArOTM0NCw2IEBACiAJCQkJQ0RDQTg1QzYx
MzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi8sCiAJ
CQkJOTMyMUQ1ODUxQTM4RUUzQzAwODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5oICovLAogCQkJCTkzMjFENTg3MUEzOEVFNzQwMDgwNTJCRSAvKiBXS0ltbWVkaWF0ZUFjdGlv
bkNvbnRyb2xsZXIubW0gKi8sCi0JCQkJOTk0QkFERjExRjdENzdFQTAwQjU3MUU3IC8qIFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuaCAqLywKLQkJCQk5OTRCQURGMjFGN0Q3N0VCMDBCNTcxRTcg
LyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbSAqLywKLQkJCQlBNTE4QjVEMDFGRTFENTVC
MDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCAqLywKLQkJCQlBNTE4QjVEMTFGRTFE
NTVCMDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0gKi8sCiAJCQkJMEZDQjRFNUMx
OEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggKi8sCiAJCQkJMEZDQjRFNUQxOEJC
RTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAogCQkJCTUxM0U0NjJCMUFEODM3
NTYwMDE2MjM0QSAvKiBXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUuaCAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJ
bnNwZWN0b3JVSS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU1
OGQ4ZjBjMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9y
VUkuaCIKKworI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKworI2lmICFQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
ewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4g
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclVJKHBhZ2UpKTsKK30KKworUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OlJlbW90ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCisgICAg
OiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCit7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9E
YXRhJiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQor
eworICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBt
X2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1fcGFnZS5j
b3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQodGhpcyk7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOworICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxh
YmxlIl9zLCB0cnVlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShj
b25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRj
aENvbW1hbmQoInNhdmVkVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVz
c2FnZUFzeW5jKG1lc3NhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5k
TWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2lu
ZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBt
X2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOworCisgICAgbV9mcm9udGVuZEhvc3Qg
PSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7
CisgICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRo
cmVhZE5vcm1hbFdvcmxkKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9u
dGVuZExvYWRlZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2Fk
ZWQoKTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0
SXNWaXNpYmxlIl9zLCB0cnVlKTsKKworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3Qo
cmVjdCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpTdGFydFdpbmRvd0RyYWcoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQor
eworICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCku
d2luZG93UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3Jl
UGFnZSgpLT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK1dlYkNvcmU6
OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuY29y
ZVBhZ2UoKS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKK3sKKyAgICBtX3Bh
Z2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KG51bGxwdHIpOworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OkZyb250ZW5kRGlkQ2xvc2UoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlJlb3BlbigpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCit7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcm
IHVybCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3
VGFiKHVybCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRF
bmNvZGVkLCBmb3JjZVNhdmVBcyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJOjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKK3sKKyAgICAvLyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2Fu
IGtub3cgaWYgdGhlIG1haW4gcmVzb3VyY2UgY2hhbmdlZC4KK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlm
aWNhdGVJbmZvKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93
Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisK
K0luc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2Fi
bGVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxl
VHlwZTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5h
bWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3Jt
TmFtZTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVy
c2lvbjsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVy
c2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVj
dFZlcnNpb247Cit9CisKK2Jvb2wgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxh
dG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVs
YXRvcjsKK30KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9vbCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0dXJu
IG1fcGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgp
OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29u
c3QgU3RyaW5nJiBldmVudE5hbWUsICBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFs
dWVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlv
bmFyeShldmVudE5hbWUsICJSZW1vdGUgV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGlj
cyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxl
KQoreworICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxk
IG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgor
ICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7Cisg
ICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKKworICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOworfQorI2VuZGlmCisK
KyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQor
U3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQor
I2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShX
SU4pCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNGFlMWMxZGFhMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9y
VUkuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIEZsb2F0UmVjdDsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFJlbW90
ZVdlYkluc3BlY3RvclVJIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5zcGVj
dG9yVUk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJ
bnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdl
bmVyYXRlZCBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOworCisgICAgLy8gQ2FsbGVkIGJ5IFJlbW90ZVdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCisg
ICAgdm9pZCBpbml0aWFsaXplKERlYnVnZ2FibGVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIGJh
Y2tlbmRDb21tYW5kc1VSTCk7CisgICAgdm9pZCBkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKTsK
KyAgICB2b2lkIGRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwor
I2VuZGlmCisKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudAorICAgIHZv
aWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgZnJvbnRlbmRMb2Fk
ZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5nZVNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRl
OworICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOworCisg
ICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBTdHJp
bmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBiYWNr
ZW5kQ29tbWFuZHNVUkwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VS
TDsgfQorICAgIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAg
IFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
dGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OlVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBicmluZ1RvRnJvbnQoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNsb3NlV2luZG93KCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW9wZW4oKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlc2V0U3RhdGUoKSBvdmVycmlkZTsKKworICAgIHZvaWQgb3BlbkluTmV3VGFi
KGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENo
YW5nZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93Q2VydGlmaWNhdGUo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5k
TWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygp
IG92ZXJyaWRlOworICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlk
ZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9CisgICAgdm9pZCBsb2dE
aWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFdlYkNvcmU6OkRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmKSBvdmVycmlkZTsKKyNlbmRp
ZgorCisgICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJv
b2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVk
IGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDE7IH0KKyAgICB2b2lk
IHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjaGFu
Z2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBj
aGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBSZW1vdGVXZWJJbnNwZWN0b3JVSShXZWJQYWdlJik7CisKKyAgICBX
ZWJQYWdlJiBtX3BhZ2U7CisgICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OworICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVn
Z2FibGVJbmZvOworICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNw
ZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
UmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjJiZjdlNGM4NzhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5p
bgpAQCAtMCwwICsxLDM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yVUkgeworICAgIEluaXRpYWxp
emUoc3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBTdHJp
bmcgYmFja2VuZENvbW1hbmRzVVJMKQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkp
CisgICAgU2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCisjZW5k
aWYKKworICAgIERpZFNhdmUoU3RyaW5nIHVybCkKKyAgICBEaWRBcHBlbmQoU3RyaW5nIHVybCkK
KworICAgIFNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmcgbWVzc2FnZSkKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzMyMjVkMTNkZDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ci5jcHAKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKKworI2luY2x1ZGUgIldlYkZy
YW1lLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVx
dWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvclBhZ2VBZ2VudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdh
dGlvbkFjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CisKK3N0YXRpYyBjb25zdCBm
bG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmlt
dW1BdHRhY2hlZFdpZHRoID0gNTAwOworCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitSZWY8V2ViSW5zcGVjdG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShX
ZWJQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3Rvcihw
YWdlKSk7Cit9CisKK1dlYkluc3BlY3Rvcjo6V2ViSW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCisg
ICAgOiBtX3BhZ2UocGFnZSkKK3sKK30KKworV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkK
K3sKKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uLT5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6T3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCks
IHVuZGVyVGVzdCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3I6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rp
b25JZGVudGlmaWVyKQoreworICAgIC8vIFdlIG1pZ2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRl
cyBpZiB0aGlzIHdlYiBwcm9jZXNzIGdvdCBzd2FwcGVkIGludG8gYSBXZWJQYWdlUHJveHkKKyAg
ICAvLyBzaG9ydGx5IGFmdGVyIGFub3RoZXIgcHJvY2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVj
dGlvbi4KKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24g
PSBudWxscHRyOworICAgIH0KKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29u
bmVjdGlvbklkZW50aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkpOworI2VsaWYgT1MoREFS
V0lOKQorICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmll
cihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsKKyNlbGlmIE9TKFdJTkRPV1Mp
CisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVu
Y29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5oYW5kbGUoKSk7CisjZWxzZQorICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoIUlQQzo6Q29ubmVjdGlv
bjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRl
Q2xpZW50Q29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOworICAgIG1fZnJv
bnRlbmRDb25uZWN0aW9uLT5vcGVuKCk7CisKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9m
cm9udGVuZENvbm5lY3Rpb25BY3Rpb25zKQorICAgICAgICBjYWxsYmFjaygpOworICAgIG1fZnJv
bnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVhcigpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6
Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICAvLyBJZiB3ZSB0
cmllZCB0byBjbG9zZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5v
IGNvbm5lY3Rpb24gZXhpc3RzIHlldC4KKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsK
KyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9m
cm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKworICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uQWN0aW9ucy5jbGVhcigpOworCisgICAgbV9hdHRhY2hlZCA9IGZhbHNlOworICAgIG1f
cHJldmlvdXNDYW5BdHRhY2ggPSBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5n
VG9Gcm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9u
dCgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjp3aGVu
RnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNr
KQoreworICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBjYWxsYmFjaygp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rp
b25zLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKKy8vIENhbGxlZCBieSBXZWJJbnNw
ZWN0b3IgbWVzc2FnZXMKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93KCkKK3sKKyAgICBpZiAoIW1f
cGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFn
ZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
cjo6Y2xvc2UoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBDbG9zZSBjb3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5n
IHRlYXJkb3duLgorICAgIGlmICghbV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGNsb3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CisKKyAg
ICBQYWdlKiBpbnNwZWN0ZWRQYWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpOworICAgIGlmICghaW5z
cGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUmIGluc3BlY3RlZE1haW5G
cmFtZSA9IGluc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOworICAgIEZyYW1lTG9hZFJlcXVlc3Qg
ZnJhbWVMb2FkUmVxdWVzdCB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVj
dGVkTWFpbkZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVz
dCB7IHVybFN0cmluZyB9LCAiX2JsYW5rIl9zLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9y
d2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlk
VVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFs
VVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3csIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3du
IH07CisKKyAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUu
ZG9jdW1lbnQoKSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2Fk
UmVxdWVzdC5pbml0aWF0ZWRCeU1haW5GcmFtZSgpLCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNr
ZWQgfTsKKyAgICBQYWdlKiBuZXdQYWdlID0gaW5zcGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRl
V2luZG93KGluc3BlY3RlZE1haW5GcmFtZSwgZnJhbWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24p
OworICAgIGlmICghbmV3UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbmV3UGFnZS0+bWFp
bkZyYW1lKCkubG9hZGVyKCkubG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3I6OmV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNj
cmlwdCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZChzY3JpcHQpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0Nv
bnNvbGUoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7
CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93
Q29uc29sZSgpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNv
dXJjZXMoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7
CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93
UmVzb3VyY2VzKCksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01h
aW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZp
ZXIpCit7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
RnJhbWUoZnJhbWVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAg
U3RyaW5nIGluc3BlY3RvckZyYW1lSWRlbnRpZmllciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmVuc3VyZVBhZ2VBZ2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVG
cmFtZSgpKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewor
ICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OlNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShpbnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAw
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygp
Cit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAg
IHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250
ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVBy
b2ZpbGluZygpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdl
UHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hv
dygpOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAg
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U3RvcFBhZ2VQcm9maWxpbmcoKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
OjpzdGFydEVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNo
ZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yOjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFt
X3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoZW5Gcm9udGVuZENv
bm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDAp
OworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5n
ZWQoYm9vbCBhY3RpdmUpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkK
K3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFu
Z2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3I6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBl
bmFibGVkKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsK
K30KKworYm9vbCBXZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCit7CisgICAgaWYgKCFt
X3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERvbid0
IGFsbG93IGF0dGFjaGluZyB0byBhbm90aGVyIGluc3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBp
biBvbmUgd2luZG93IGlzIHRvbyBtdWNoIQorICAgIGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFn
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBh
dHRhY2hlZCwgYWxsb3cgYXR0YWNoaW5nIGFnYWluIHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4K
KyAgICBpZiAobV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBEb24n
dCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFj
Y29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3RvciBzaXplLgorICAgIHVuc2lnbmVkIGluc3Bl
Y3RlZFBhZ2VIZWlnaHQgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+
dmlzaWJsZUhlaWdodCgpOworICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlV2lkdGgoKTsKKyAgICB1
bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87CisgICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdo
dCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5z
cGVjdGVkUGFnZVdpZHRoOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2
YWlsYWJpbGl0eSgpCit7CisgICAgaWYgKG1fYXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGJvb2wgY2FuQXR0YWNoV2luZG93ID0gdGhpcy0+Y2FuQXR0YWNoV2luZG93KCk7CisgICAg
aWYgKG1fcHJldmlvdXNDYW5BdHRhY2ggPT0gY2FuQXR0YWNoV2luZG93KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ByZXZpb3VzQ2FuQXR0YWNoID0gY2FuQXR0YWNoV2luZG93OworCisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2Fu
QXR0YWNoV2luZG93KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNmI4OWU1
MjI3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUGFnZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yIDogcHVibGljIEFQSTo6T2JqZWN0SW1w
bDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlSW5zcGVjdG9yPiwgcHJpdmF0ZSBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3I+IGNy
ZWF0ZShXZWJQYWdlKik7CisKKyAgICBXZWJQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9w
YWdlOyB9CisKKyAgICB2b2lkIHVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKKworICAgIC8v
IEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3Bw
CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKKworICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9p
ZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KKyAgICB2
b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQor
CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgdm9pZCBvcGVuSW5O
ZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOworCisgICAgdm9pZCBjYW5BdHRhY2hXaW5k
b3coYm9vbCYgcmVzdWx0KTsKKworICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNo
b3dSZXNvdXJjZXMoKTsKKworICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllcik7CisKKyAgICB2b2lkIHNldEF0dGFjaGVkKGJvb2wgYXR0YWNo
ZWQpIHsgbV9hdHRhY2hlZCA9IGF0dGFjaGVkOyB9CisKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0
Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCk7CisKKyAgICB2b2lkIHN0YXJ0UGFnZVByb2Zp
bGluZygpOworICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKKworICAgIHZvaWQgc3RhcnRF
bGVtZW50U2VsZWN0aW9uKCk7CisgICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOworICAg
IHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJl
Y29yZGluZ0NoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOworCisgICAgdm9pZCBzZXRGcm9udGVuZENvbm5l
Y3Rpb24oSVBDOjpBdHRhY2htZW50KTsKKworICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkg
eyBjbG9zZSgpOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdlYkluc3BlY3RvckNs
aWVudDsKKworICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvcihXZWJQYWdlKik7CisgICAgdmlydHVh
bCB+V2ViSW5zcGVjdG9yKCk7CisKKyAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpOworCisgICAg
Ly8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50CisgICAgdm9pZCBvcGVuTG9jYWxJbnNw
ZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5kQ29u
bmVjdGlvbigpOworCisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKworICAgIHZvaWQgd2hlbkZy
b250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICBX
ZWJQYWdlKiBtX3BhZ2U7CisKKyAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Zyb250ZW5k
Q29ubmVjdGlvbjsKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV9mcm9udGVuZENvbm5l
Y3Rpb25BY3Rpb25zOworCisgICAgYm9vbCBtX2F0dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fcHJldmlvdXNDYW5BdHRhY2ggeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3Rvci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5kYWY3NGI1ZTZiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDMg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2Fn
ZXMgLT4gV2ViSW5zcGVjdG9yIHsKKyAgICBTaG93KCkKKyAgICBDbG9zZSgpCisKKyAgICBTZXRB
dHRhY2hlZChib29sIGF0dGFjaGVkKQorCisgICAgU2hvd0NvbnNvbGUoKQorICAgIFNob3dSZXNv
dXJjZXMoKQorCisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRl
bnRpZmllciBmcmFtZUlkZW50aWZpZXIpCisKKyAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkK
KworICAgIFN0YXJ0UGFnZVByb2ZpbGluZygpCisgICAgU3RvcFBhZ2VQcm9maWxpbmcoKQorCisg
ICAgU3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKKyAgICBTdG9wRWxlbWVudFNlbGVjdGlvbigpCisK
KyAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVu
dGlmaWVyKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4wYjA2ODAxOWVmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JDbGllbnQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCisj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNs
dWRlIDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBSZXBhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmVwYWludEluZGljYXRvckxheWVy
Q2xpZW50KFdlYkluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICA6IG1f
aW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1
YWwgflJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCgpIHsgfQorcHJpdmF0ZToKKyAgICB2b2lk
IG5vdGlmeUFuaW1hdGlvbkVuZGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBT
dHJpbmcmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuYW5pbWF0
aW9uRW5kZWRGb3JMYXllcihsYXllcik7CisgICAgfQorICAgIAorICAgIFdlYkluc3BlY3RvckNs
aWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7Cit9OworCitXZWJJbnNwZWN0b3JDbGllbnQ6OldlYklu
c3BlY3RvckNsaWVudChXZWJQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBt
X2hpZ2hsaWdodE92ZXJsYXkobnVsbHB0cikKK3sKK30KKworV2ViSW5zcGVjdG9yQ2xpZW50Ojp+
V2ViSW5zcGVjdG9yQ2xpZW50KCkKK3sKKyAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9wYWludFJl
Y3RMYXllcnMpCisgICAgICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgCisgICAg
bV9wYWludFJlY3RMYXllcnMuY2xlYXIoKTsKKworICAgIGlmIChtX3BhaW50UmVjdE92ZXJsYXkg
JiYgbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX3BhaW50UmVjdE92ZXJs
YXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKK3sKKyAgICBpZiAoV2ViSW5zcGVjdG9y
KiBpbnNwZWN0b3IgPSBtX3BhZ2UtPmluc3BlY3RvcihXZWJQYWdlOjpMYXp5Q3JlYXRpb25Qb2xp
Y3k6OlVzZUV4aXN0aW5nT25seSkpCisgICAgICAgIGluc3BlY3Rvci0+Y2xvc2UoKTsKKworICAg
IGRlbGV0ZSB0aGlzOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZnJvbnRlbmRDb3Vu
dENoYW5nZWQodW5zaWduZWQgY291bnQpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3JGcm9udGVu
ZENvdW50Q2hhbmdlZChjb3VudCk7Cit9CisKK0luc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBX
ZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5Mb2NhbEZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+b3BlbkxvY2FsSW5zcGVj
dG9yRnJvbnRlbmQoY29udHJvbGxlci0+aXNVbmRlclRlc3QoKSk7CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmJyaW5nRnJvbnRlbmRUb0Zyb250
KCkKK3sKKyAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKKyAgICAgICAgbV9wYWdlLT5pbnNw
ZWN0b3IoKS0+YnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpk
aWRSZXNpemVNYWluRnJhbWUoRnJhbWUqKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3Rvcigp
KQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT51cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQoreworICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIGlmICghbV9oaWdobGlnaHRPdmVybGF5KSB7CisgICAgICAgIGF1dG8gaGlnaGxpZ2h0T3Zl
cmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX2hpZ2hsaWdodE92
ZXJsYXkgPSBoaWdobGlnaHRPdmVybGF5LnB0cigpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdl
KCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShXVEZNb3ZlKGhp
Z2hsaWdodE92ZXJsYXkpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBt
X2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAg
bV9oaWdobGlnaHRPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB9CisjZWxzZQorICAg
IEhpZ2hsaWdodCBoaWdobGlnaHQ7CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZ2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29v
cmRpbmF0ZVN5c3RlbTo6RG9jdW1lbnQpOworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckhpZ2hs
aWdodChoaWdobGlnaHQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpo
aWRlSGlnaGxpZ2h0KCkKK3sKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAobV9o
aWdobGlnaHRPdmVybGF5KQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX2hpZ2hsaWdodE92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisjZWxzZQorICAgIG1fcGFnZS0+aGlkZUluc3Bl
Y3RvckhpZ2hsaWdodCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpz
aG93UGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGFpbnRSZWN0T3ZlcmxheSkgeworICAgICAg
ICBtX3BhaW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3Zl
cmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KKworICAg
IGlmICghbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KQorICAgICAgICBtX3BhaW50SW5kaWNh
dG9yTGF5ZXJDbGllbnQgPSBtYWtlVW5pcXVlPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4o
KnRoaXMpOworCisgICAgYXV0byBwYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1f
cGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKm1fcGFpbnRJbmRp
Y2F0b3JMYXllckNsaWVudCk7CisgICAgCisgICAgcGFpbnRMYXllci0+c2V0TmFtZSgicGFpbnQg
cmVjdCIpOworICAgIHBhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsK
KyAgICBwYWludExheWVyLT5zZXRQb3NpdGlvbihyZWN0LmxvY2F0aW9uKCkpOworICAgIHBhaW50
TGF5ZXItPnNldFNpemUocmVjdC5zaXplKCkpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91
bmRDb2xvcihDb2xvcigxLjBmLCAwLjBmLCAwLjBmLCAwLjJmKSk7CisKKyAgICBLZXlmcmFtZVZh
bHVlTGlzdCBmYWRlS2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKKyAgICBmYWRl
S2V5ZnJhbWVzLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAsIDEpKTsK
KworICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1
ZT4oMC4yNSwgMCkpOworICAgIAorICAgIGF1dG8gb3BhY2l0eUFuaW1hdGlvbiA9IEFuaW1hdGlv
bjo6Y3JlYXRlKCk7CisgICAgb3BhY2l0eUFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMC4yNSk7CisK
KyAgICBwYWludExheWVyLT5hZGRBbmltYXRpb24oZmFkZUtleWZyYW1lcywgRmxvYXRTaXplKCks
IG9wYWNpdHlBbmltYXRpb24ucHRyKCksICJvcGFjaXR5Il9zLCAwKTsKKyAgICAKKyAgICBHcmFw
aGljc0xheWVyJiByYXdMYXllciA9IHBhaW50TGF5ZXIuZ2V0KCk7CisgICAgbV9wYWludFJlY3RM
YXllcnMuYWRkKFdURk1vdmUocGFpbnRMYXllcikpOworCisgICAgR3JhcGhpY3NMYXllciYgb3Zl
cmxheVJvb3RMYXllciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKKyAgICBvdmVybGF5
Um9vdExheWVyLmFkZENoaWxkKHJhd0xheWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCit7
CisgICAgR3JhcGhpY3NMYXllciogbm9uQ29uc3RMYXllciA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NM
YXllcio+KGxheWVyKTsKKyAgICBub25Db25zdExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Cisg
ICAgbV9wYWludFJlY3RMYXllcnMucmVtb3ZlKCpub25Db25zdExheWVyKTsKK30KKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd0luc3BlY3Rv
ckluZGljYXRpb24oKQoreworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckluZGljYXRpb24oKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCkK
K3sKKyAgICBtX3BhZ2UtPmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgbV9wYWdlLT5lbmFibGVJbnNwZWN0b3JOb2RlU2Vh
cmNoKCk7CisgICAgZWxzZQorICAgICAgICBtX3BhZ2UtPmRpc2FibGVJbnNwZWN0b3JOb2RlU2Vh
cmNoKCk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmVsZW1lbnRTZWxl
Y3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3Rvcigp
KQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChh
Y3RpdmUpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dGltZWxpbmVSZWNvcmRpbmdD
aGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAg
ICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT50aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZl
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworICAgIGlmIChtX3BhZ2Ut
Pmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5zZXRNb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7CisgICAg
aWYgKHBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMg
bW92aW5nIGF3YXkgZnJvbSB0aGUgd2ViIHBhZ2UsIHJlc2V0IGl0LgorICAgIEFTU0VSVChtX2hp
Z2hsaWdodE92ZXJsYXkpOworICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFn
ZSopCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgLypkaXJ0eVJlY3QqLykKK3sKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworfQorCitib29sIFdlYkluc3Bl
Y3RvckNsaWVudDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yN2Mz
ZWUxNDJlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xh
c3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBQYWdlT3ZlcmxheTsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBSZXBhaW50SW5k
aWNhdG9yTGF5ZXJDbGllbnQ7CisKK2NsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBX
ZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNs
aWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitmcmllbmQgY2xhc3MgUmVwYWlu
dEluZGljYXRvckxheWVyQ2xpZW50OworcHVibGljOgorICAgIFdlYkluc3BlY3RvckNsaWVudChX
ZWJQYWdlKik7CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yQ2xpZW50KCk7CisKK3ByaXZhdGU6
CisgICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50CisgICAgdm9pZCBpbnNwZWN0ZWRQYWdl
RGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVuZENvdW50Q2hhbmdlZCh1bnNp
Z25lZCkgb3ZlcnJpZGU7CisKKyAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogb3Blbkxv
Y2FsRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopIG92ZXJyaWRlOworICAg
IHZvaWQgYnJpbmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlc2l6
ZU1haW5GcmFtZShXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOworCisgICAgdm9pZCBoaWdobGln
aHQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKSBvdmVycmlkZTsKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCBzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigp
IG92ZXJyaWRlOworICAgIHZvaWQgaGlkZUluc3BlY3RvckluZGljYXRpb24oKSBvdmVycmlkZTsK
KworICAgIHZvaWQgZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShib29sKSBvdmVycmlkZTsKKyNlbmRp
ZgorCisgICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKworICAgIGJv
b2wgb3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOworCisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUo
T3B0aW9uYWw8Ym9vbD4pIGZpbmFsOworCisgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAorICAg
IHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdl
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5
JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVy
bGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworCisgICAgV2ViUGFnZSogbV9wYWdlOworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBt
X2hpZ2hsaWdodE92ZXJsYXk7CisgICAgCisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5
PiBtX3BhaW50UmVjdE92ZXJsYXk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0
b3JMYXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OworICAgIEhhc2hTZXQ8
UmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX3BhaW50UmVjdExheWVyczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTg5ZTk4
MjVhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcApAQCAtMCwwICsxLDExOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250
cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRTdGF0ZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdl
KQoreworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6cmVzZXQo
KQoreworICAgIG1fZnJvbnRlbmRMb2FkZWQgPSBmYWxzZTsKKyAgICBtX3N1c3BlbmRlZCA9IGZh
bHNlOworICAgIG1fcXVldWUuY2xlYXIoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXI6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBtX2Zyb250ZW5kTG9hZGVk
ID0gdHJ1ZTsKKworICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OnN1c3BlbmQoKQoreworICAgIEFTU0VS
VChtX2Zyb250ZW5kTG9hZGVkKTsKKyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKKyAgICBBU1NF
UlQobV9xdWV1ZS5pc0VtcHR5KCkpOworCisgICAgbV9zdXNwZW5kZWQgPSB0cnVlOworfQorCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6dW5zdXNwZW5kKCkKK3sKKyAg
ICBBU1NFUlQobV9zdXNwZW5kZWQpOworCisgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKKworICAg
IGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9u
dGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQp
Cit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JG
cm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCJdKSIpKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBT
dHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgZXZhbHVhdGVP
clF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRj
aChbXCIiLCBjb21tYW5kLCAiXCIsIFwiIiwgYXJndW1lbnQsICJcIl0pIikpOworfQorCit2b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZCwgYm9vbCBhcmd1bWVudCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVF
eHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIs
IGNvbW1hbmQsICJcIiwgIiwgYXJndW1lbnQgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiXSkiKSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaE1lc3Nh
Z2VBc3luYyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhw
cmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaE1lc3NhZ2VB
c3luYygiLCBtZXNzYWdlLCAiKSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXI6OmV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uKQoreworICAgIGlmICghbV9mcm9udGVuZExvYWRlZCB8fCBtX3N1c3BlbmRlZCkgewor
ICAgICAgICBtX3F1ZXVlLmFwcGVuZChleHByZXNzaW9uKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX3BhZ2Uu
Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7CisgICAgbV9wYWdl
LmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHRJZ25vcmluZ0V4
Y2VwdGlvbihleHByZXNzaW9uKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURp
c3BhdGNoZXI6OmV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKQoreworICAgIGlmIChtX3F1ZXVl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24gOiBtX3F1ZXVlKSB7CisgICAgICAgIEFTU0VSVCghbV9wYWdlLmNvcmVQYWdlKCkt
Pm1haW5GcmFtZSgpLnNjcmlwdCgpLmlzUGF1c2VkKCkpOworICAgICAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9u
KGV4cHJlc3Npb24pOworICAgIH0KKworICAgIG1fcXVldWUuY2xlYXIoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjVjNDI0ZTJkODcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViUGFnZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOwor
CisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHZv
aWQgc3VzcGVuZCgpOworICAgIHZvaWQgdW5zdXNwZW5kKCk7CisKKyAgICB2b2lkIGRpc3BhdGNo
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpOworICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdm9p
ZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsK
KyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOworCisgICAgV2ViUGFn
ZSYgbV9wYWdlOworICAgIERlcXVlPFN0cmluZz4gbV9xdWV1ZTsKKyAgICBib29sIG1fZnJvbnRl
bmRMb2FkZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzAxNzg1
MWY2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5oIgorCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXI+IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcik7Cit9CisK
K1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6OldlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIoKQorICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldl
YktpdC5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIikpCit7Cit9CisKK1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXI6On5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
KCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjppbml0aWFs
aXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7CisgICAgY29ubmVj
dGlvbi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcXVldWUuZ2V0KCks
IHRoaXMpOworfQorCit2b2lkIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om5vdGlm
eU5lZWREZWJ1Z2dlckJyZWFrKCkKK3sKKyAgICAvLyBJZiB0aGUgd2ViIHByb2Nlc3MgaGFzIG5v
dCBiZWVuIGZ1bGx5IGluaXRpYWxpemVkIHlldCwgdGhlbiB0aGVyZQorICAgIC8vIGlzIG5vIFZN
IHRvIGJlIG5vdGlmaWVkIGFuZCB0aHVzIG5vIGluZmluaXRlIGxvb3AgdG8gYnJlYWsuIEJhaWwg
b3V0LgorICAgIGlmICghV2ViQ29yZTo6Y29tbW9uVk1Pck51bGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNDOjpWTSYgdm0gPSBXZWJDb3JlOjpjb21tb25WTSgpOworICAgIHZtLm5vdGlm
eU5lZWREZWJ1Z2dlckJyZWFrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uZDhmNmJkMDIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIu
aApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVl
TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXI+IGNyZWF0ZSgpOworICAgIH5XZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24qKTsKKyAgICAKK3ByaXZhdGU6CisgICAgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlcigpOworICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2Vp
dmVyLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBub3RpZnlOZWVkRGVidWdnZXJCcmVh
aygpOworICAgIAorICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTg3
MGU1MmI3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KQEAgLTAs
MCArMSwyNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNz
YWdlcyAtPiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIHsKKyAgICBOb3RpZnlOZWVk
RGVidWdnZXJCcmVhaygpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4xZmFhNmY2ZWRlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCkBAIC0wLDAgKzEsNDExIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yVUkuaCIKKworI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3Rvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Nocm9tZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitSZWY8V2ViSW5zcGVjdG9yVUk+IFdlYkluc3BlY3RvclVJOjpjcmVhdGUoV2ViUGFnZSYgcGFn
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JVSShwYWdlKSk7Cit9
CisKK1dlYkluc3BlY3RvclVJOjpXZWJJbnNwZWN0b3JVSShXZWJQYWdlJiBwYWdlKQorICAgIDog
bV9wYWdlKHBhZ2UpCisgICAgLCBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcihwYWdlKQorICAgICwg
bV9kZWJ1Z2dhYmxlSW5mbyhEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpCit7CisgICAgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJbnNwZWN0b3JBZGRpdGlv
bnNFbmFibGVkKHRydWUpOworICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkuc2V0SW1hZ2VCaXRtYXBFbmFibGVkKHRydWUpOworI2lmIEVOQUJMRShXRUJHTDIpCisg
ICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJHTDJFbmFi
bGVkKHRydWUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmVzdGFibGlzaENv
bm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwg
Y29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiBkZWJ1Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3Qs
IHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyID0gaW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IGRl
YnVnZ2FibGVJbmZvOworICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OworICAgIG1faW5zcGVj
dGlvbkxldmVsID0gaW5zcGVjdGlvbkxldmVsOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIucmVzZXQoKTsKKworICAgIG1fZnJvbnRlbmRDb250cm9sbGVyID0gJm1fcGFnZS5jb3JlUGFn
ZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNl
dEluc3BlY3RvckZyb250ZW5kQ2xpZW50KHRoaXMpOworCisgICAgdXBkYXRlQ29ubmVjdGlvbigp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjp1cGRhdGVDb25uZWN0aW9uKCkKK3sKKyAgICBp
ZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5p
bnZhbGlkYXRlKCk7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAg
IH0KKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlvbjo6
U29ja2V0UGFpciBzb2NrZXRQYWlyID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVQbGF0Zm9ybUNv
bm5lY3Rpb24oKTsKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklk
ZW50aWZpZXIoc29ja2V0UGFpci5zZXJ2ZXIpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0
aW9uQ2xpZW50UG9ydChzb2NrZXRQYWlyLmNsaWVudCk7CisjZWxpZiBPUyhEQVJXSU4pCisgICAg
bWFjaF9wb3J0X3QgbGlzdGVuaW5nUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworICAgIGlmIChtYWNo
X3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUs
ICZsaXN0ZW5pbmdQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIENSQVNIKCk7CisKKyAg
ICBpZiAobWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQ
b3J0LCBsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkgIT0gS0VSTl9TVUND
RVNTKQorICAgICAgICBDUkFTSCgpOworCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
IGNvbm5lY3Rpb25JZGVudGlmaWVyKGxpc3RlbmluZ1BvcnQpOworICAgIElQQzo6QXR0YWNobWVu
dCBjb25uZWN0aW9uQ2xpZW50UG9ydChsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01PVkVf
U0VORCk7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlm
aWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25uQ2xpZW50OworICAgIElQQzo6Q29ubmVjdGlv
bjo6Y3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoY29ubmVjdGlvbklkZW50aWZpZXIs
IGNvbm5DbGllbnQpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChj
b25uQ2xpZW50KTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47Cisj
ZW5kaWYKKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhEQVJXSU4pIHx8IFBM
QVRGT1JNKFdJTikKKyAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpj
cmVhdGVTZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7CisgICAg
bV9iYWNrZW5kQ29ubmVjdGlvbi0+b3BlbigpOworI2VuZGlmCisKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25DbGllbnRQb3J0
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6
OndpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAgICAg
ICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKworICAgIG1fZnJvbnRlbmRI
b3N0ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUodGhpcywgbV9wYWdlLmNvcmVQYWdl
KCkpOworICAgIG1fZnJvbnRlbmRIb3N0LT5hZGRTZWxmVG9HbG9iYWxPYmplY3RJbldvcmxkKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZnJvbnRl
bmRMb2FkZWQoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmZyb250ZW5kTG9hZGVk
KCk7CisKKyAgICAvLyBUZWxsIHRoZSBuZXcgZnJvbnRlbmQgYWJvdXQgdGhlIGN1cnJlbnQgZG9j
ayBzdGF0ZS4gSWYgdGhlIHdpbmRvdyBvYmplY3QKKyAgICAvLyBjbGVhcmVkIGR1ZSB0byBhIHJl
bG9hZCwgdGhlIGRvY2sgc3RhdGUgd29uJ3QgYmUgcmVzZW50IGZyb20gVUlQcm9jZXNzLgorICAg
IHNldERvY2tpbmdVbmF2YWlsYWJsZShtX2RvY2tpbmdVbmF2YWlsYWJsZSk7CisgICAgc2V0RG9j
a1NpZGUobV9kb2NrU2lkZSk7CisgICAgc2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKTsKKworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpGcm9udGVuZExvYWRlZCgpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKKworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJOjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpTdGFydFdpbmRvd0RyYWcoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQor
eworICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCku
d2luZG93UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3Jl
UGFnZSgpLT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQoreworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKwor
ICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKG1fZnJvbnRlbmRDb250cm9sbGVyKSB7CisgICAgICAgIG1fZnJv
bnRlbmRDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChudWxscHRyKTsKKyAg
ICAgICAgbV9mcm9udGVuZENvbnRyb2xsZXIgPSBudWxscHRyOworICAgIH0KKworICAgIGlmICht
X2Zyb250ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQo
KTsKKworICAgIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIgPSB7IH07CisgICAgbV91bmRlclRl
c3QgPSBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKK3sKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKK3sKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKK30KKworV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBX
ZWJJbnNwZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lk
ZSBzaWRlKQoreworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KTsKKyAgICBzd2l0Y2ggKHNpZGUpIHsKKyAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKKyAg
ICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKKyAgICAgICAgd2Vi
UHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6QXR0YWNoUmlnaHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6CisgICAgICAgIHdlYlByb2Nl
c3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OkF0dGFjaExlZnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKKyAgICAgICAgd2ViUHJvY2Vzcy5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6QXR0YWNoQm90dG9tKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tTaWRlKERvY2tT
aWRlIHNpZGUpCit7CisgICAgQVNDSUlMaXRlcmFsIHNpZGVTdHJpbmcgeyBBU0NJSUxpdGVyYWw6
Om51bGwoKSB9OworCisgICAgc3dpdGNoIChzaWRlKSB7CisgICAgY2FzZSBEb2NrU2lkZTo6VW5k
b2NrZWQ6CisgICAgICAgIHNpZGVTdHJpbmcgPSAidW5kb2NrZWQiX3M7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6CisgICAgICAgIHNpZGVTdHJpbmcgPSAicmln
aHQiX3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKKyAgICAg
ICAgc2lkZVN0cmluZyA9ICJsZWZ0Il9zOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRG9j
a1NpZGU6OkJvdHRvbToKKyAgICAgICAgc2lkZVN0cmluZyA9ICJib3R0b20iX3M7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIG1fZG9ja1NpZGUgPSBzaWRlOworCisgICAgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NrU2lkZSJfcywgU3RyaW5nKHNp
ZGVTdHJpbmcpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja2luZ1VuYXZhaWxh
YmxlKGJvb2wgdW5hdmFpbGFibGUpCit7CisgICAgbV9kb2NraW5nVW5hdmFpbGFibGUgPSB1bmF2
YWlsYWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgi
c2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB1bmF2YWlsYWJsZSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUk6OnNldElzVmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9pc1Zpc2libGUg
PSB2aXNpYmxlOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJzZXRJc1Zpc2libGUiX3MsIHZpc2libGUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpj
aGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFu
Z2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2JhY2tlbmRDb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6Ok9wZW5Jbk5ld1RhYih1cmwpLCAw
KTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nSW5zcGVjdGVkUGFn
ZVRvRnJvbnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lk
IFdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
V1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVB
cykKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29u
dGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKGNvbnN0IFdURjo6U3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpJbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFn
ZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUo
Y29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1F
VFJZKQorYm9vbCBXZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCit7
CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dn
aW5nRW5hYmxlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZl
bnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50
OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCit7CisgICAgbV9wYWdlLmNvcmVQYWdlKCkt
PmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVE
aWN0aW9uYXJ5KGV2ZW50TmFtZSwgIldlYiBJbnNwZWN0b3IgRnJvbnRlbmQgRGlhZ25vc3RpY3Mi
X3MsIGRpY3Rpb25hcnksIFNob3VsZFNhbXBsZTo6Tm8pOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJOjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyAg
ICAvLyBJbnNwZWN0b3IncyBkaWFnbm9zdGljIGxvZ2dpbmcgY2xpZW50IHNob3VsZCBuZXZlciBi
ZSB1c2VkIHVubGVzcyB0aGUgcGFnZSBzZXR0aW5nIGlzIGFsc28gZW5hYmxlZC4KKyAgICBBU1NF
UlQoIWF2YWlsYWJsZSB8fCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkpOworICAgIG1fZGlh
Z25vc3RpY0xvZ2dpbmdBdmFpbGFibGUgPSBhdmFpbGFibGU7CisKKyAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
Il9zLCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKTsKK30KKyNlbmRpZgorCit2b2lkIFdl
Ykluc3BlY3RvclVJOjpzaG93Q29uc29sZSgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93Q29uc29sZSJfcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUk6OnNob3dSZXNvdXJjZXMoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2hvd1Jlc291cmNlcyJfcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmll
cikKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZSJfcywgZnJhbWVJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywg
dHJ1ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BQYWdlUHJvZmlsaW5nKCkKK3sK
KyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5l
UHJvZmlsaW5nRW5hYmxlZCJfcywgZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpz
dGFydEVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVuYWJsZWQiX3MsIHRydWUpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJOjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9u
RW5hYmxlZCJfcywgZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNv
bnN0IFN0cmluZyYgdXJsKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNo
Q29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmRp
ZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hl
ci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVz
c2FnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VQYXVzZWQoKQoreworICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLnN1c3BlbmQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6cGFnZVVucGF1c2VkKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci51bnN1c3Bl
bmQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpT
ZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7
Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQbGF0Zm9ybU5hbWU7Cit9CisK
K1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRCdWlsZFZlcnNpb247Cit9CisKK1N0cmlu
ZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0UHJvZHVjdFZlcnNpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFByb2R1Y3RWZXJzaW9uOworfQorCisjaWYgIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKK2Jvb2wgV2Vi
SW5zcGVjdG9yVUk6OmNhblNhdmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NV
UkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKFdJTikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYzOWYyMWM5YjYyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5oCkBA
IC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHlJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dh
YmxlVHlwZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kSG9zdC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgQ2VydGlmaWNhdGVJ
bmZvOworY2xhc3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViUGFnZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yVUkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJJ
bnNwZWN0b3JVST4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQsIHB1YmxpYyBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxX
ZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKKworICAgIC8vIEltcGxlbWVudGVkIGlu
IGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OworCisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGRpZENsb3NlKElQ
Qzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlIHsgLyogRG8gbm90aGluZywgdGhlIGluc3BlY3RlZCBw
YWdlIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZCBhbmQgbWF5IGJlIGdldHRpbmcgcmVwbGFjZWQu
ICovIH0KKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsg
Y2xvc2VXaW5kb3coKTsgfQorCisgICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclVJIG1lc3Nh
Z2VzCisgICAgdm9pZCBlc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYsIGJvb2wg
dW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOworICAgIHZvaWQgdXBkYXRlQ29u
bmVjdGlvbigpOworCisgICAgdm9pZCBzaG93Q29uc29sZSgpOworICAgIHZvaWQgc2hvd1Jlc291
cmNlcygpOworCisgICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5n
JiBmcmFtZUlkZW50aWZpZXIpOworCisgICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKKyAg
ICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7CisKKyAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpOworICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIHZvaWQgYXR0
YWNoZWRCb3R0b20oKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpCb3R0b20pOyB9CisgICAgdm9p
ZCBhdHRhY2hlZFJpZ2h0KCkgeyBzZXREb2NrU2lkZShEb2NrU2lkZTo6UmlnaHQpOyB9CisgICAg
dm9pZCBhdHRhY2hlZExlZnQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpMZWZ0KTsgfQorICAg
IHZvaWQgZGV0YWNoZWQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpVbmRvY2tlZCk7IH0KKwor
ICAgIHZvaWQgc2V0RG9ja1NpZGUoRG9ja1NpZGUpOworICAgIHZvaWQgc2V0RG9ja2luZ1VuYXZh
aWxhYmxlKGJvb2wpOworCisgICAgdm9pZCBzZXRJc1Zpc2libGUoYm9vbCk7CisKKyAgICB2b2lk
IGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgZGlkQXBwZW5kKGNvbnN0IFN0
cmluZyYgdXJsKTsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmlu
ZyYpOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgdm9pZCBzZXREaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWxpYWJsZSk7CisjZW5kaWYKKworICAgIC8v
IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50CisgICAgdm9pZCB3aW5kb3dPYmplY3RD
bGVhcmVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdmVXaW5k
b3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNSZW1vdGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxl
VHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6RGVi
dWdnYWJsZVR5cGU6OldlYlBhZ2U7IH0KKyAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92
ZXJyaWRlOworICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faW5zcGVjdGlvbkxldmVsOyB9CisKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpIG92ZXJy
aWRlOworICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlb3Blbigp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJyaWRlOworCisgICAgV2ViQ29y
ZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2Nr
U2lkZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2ln
bmVkKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2hhbmdlU2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3Ry
aW5nJiB1cmwpIG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOworICAg
IHZvaWQgYXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBj
b250ZW50KSBvdmVycmlkZTsKKworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8mKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVM
RU1FVFJZKQorICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOwor
ICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBt
X2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljRXZl
bnQoY29uc3QgV1RGOjpTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgV2ViQ29yZTo6RGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBwYWdlUGF1c2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWdlVW5wYXVzZWQoKSBv
dmVycmlkZTsKKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBtX3Vu
ZGVyVGVzdDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclVJKFdlYlBh
Z2UmKTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7CisgICAgUmVmUHRyPElQQzo6
Q29ubmVjdGlvbj4gbV9iYWNrZW5kQ29ubmVjdGlvbjsKKworICAgIC8vIEtlZXAgYSBwb2ludGVy
IHRvIHRoZSBmcm9udGVuZCdzIGluc3BlY3RvciBjb250cm9sbGVyIHJhdGhlciB0aGFuIGdvaW5n
IHRocm91Z2gKKyAgICAvLyBjb3JlUGFnZSgpLCBzaW5jZSB3ZSBtYXkgbmVlZCBpdCBhZnRlciB0
aGUgZnJvbnRlbmQncyBwYWdlIGhhcyBzdGFydGVkIGRlc3RydWN0aW9uLgorICAgIFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXIqIG1fZnJvbnRlbmRDb250cm9sbGVyIHsgbnVsbHB0ciB9Owor
CisgICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyOwor
ICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OworICAgIERlYnVnZ2FibGVJbmZvRGF0YSBt
X2RlYnVnZ2FibGVJbmZvOworICAgIGJvb2wgbV9kb2NraW5nVW5hdmFpbGFibGUgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
VEVMRU1FVFJZKQorICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNl
IH07CisjZW5kaWYKKworICAgIERvY2tTaWRlIG1fZG9ja1NpZGUgeyBEb2NrU2lkZTo6VW5kb2Nr
ZWQgfTsKKyAgICB1bnNpZ25lZCBtX2luc3BlY3Rpb25MZXZlbCB7IDEgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0ZjEzODVkNDg5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdl
cy5pbgpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJIHsKKyAgICBFc3RhYmxpc2hD
b25uZWN0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRl
bnRpZmllciwgc3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZv
LCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQorICAgIFVwZGF0ZUNv
bm5lY3Rpb24oKQorCisgICAgQXR0YWNoZWRCb3R0b20oKQorICAgIEF0dGFjaGVkUmlnaHQoKQor
ICAgIEF0dGFjaGVkTGVmdCgpCisgICAgRGV0YWNoZWQoKQorICAgIFNldERvY2tpbmdVbmF2YWls
YWJsZShib29sIHVuYXZhaWxhYmxlKQorICAgIFNldElzVmlzaWJsZShib29sIHZpc2libGUpCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9nZ2lu
Z0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisgICAgU2hvd0NvbnNvbGUoKQor
ICAgIFNob3dSZXNvdXJjZXMoKQorCisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmlu
ZyBmcmFtZUlkZW50aWZpZXIpCisKKyAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQorICAgIFN0b3BQ
YWdlUHJvZmlsaW5nKCkKKworICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCisgICAgU3RvcEVs
ZW1lbnRTZWxlY3Rpb24oKQorCisgICAgRGlkU2F2ZShTdHJpbmcgdXJsKQorICAgIERpZEFwcGVu
ZChTdHJpbmcgdXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdl
KQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmE3MGY2ZmQ1MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApAQCAtMCww
ICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIK
KworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKK3sK
K30KKworU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIoKSBjb25zdAor
eworICAgIHJldHVybiB0b1RhcmdldElEKG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQoreworICAgIGlmIChtX2NoYW5uZWwp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NoYW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0
aW9uVHlwZSk7CisgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29y
ZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVs
KTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KCkKK3sKKyAg
ICBpZiAoIW1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3BhZ2UuY29yZVBh
Z2UoKSkKKyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5k
aXNjb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7CisgICAgbV9jaGFubmVsLnJlc2V0KCk7Cit9
CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tl
bmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkK
KyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRj
aE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Cit9CisKK1N0cmluZyBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Ojp0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKK3sK
KyAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9CisK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42Y2JkN2ZhZDVmZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlBhZ2U7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOwor
CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKKyAgICB+V2ViUGFnZUlu
c3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKKworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlOjpQYWdlOyB9CisKKyAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0
aW9uVHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
KworICAgIHN0YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7
CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBtX2NoYW5uZWw7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY5MDE3YzRl
ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdl
YlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fcGFnZVRhcmdldChwYWdl
KQoreworICAgIC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRhcmdldCB0byB0aGUgVUlQcm9jZXNz
LCB0aGUgV2ViUGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlzIGZvciB1cy4KKyAgICBtX3Rhcmdl
dHMuc2V0KG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZtX3BhZ2VUYXJnZXQpOworfQorCitX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyKCkKK3sKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
cjo6YWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCit7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyKCksICZ0YXJn
ZXQpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNwZWN0
b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0LnR5cGUoKSkpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRh
cmdldC5pZGVudGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgIlNob3VsZCBu
ZXZlciByZW1vdmUgdGhlIG1haW4gdGFyZ2V0LiIpOworCisgICAgbV9wYWdlLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmll
cigpKSk7CisKKyAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOworfQor
Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9y
KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25u
ZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0
cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAg
ICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOworfQorCit2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQpCit7CisgICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsK
KyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGFyZ2V0LT5kaXNjb25u
ZWN0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRN
ZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQp
OworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPnNlbmRN
ZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2M5MzFkYWQxYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmKTsKKyAgICB+V2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRkVGFyZ2V0KEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0Jik7CisgICAgdm9pZCByZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXQmKTsKKworICAgIHZvaWQgY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwor
ICAgIHZvaWQgZGlzY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZSYgbV9wYWdl
OworICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9wYWdlVGFyZ2V0OworICAgIEhhc2hNYXA8
U3RyaW5nLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCo+IG1fdGFyZ2V0czsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmUxYjVmNzEzNzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKworI2luY2x1ZGUgIldl
YlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUg
Y29ubmVjdGlvblR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fdGFyZ2V0SWQodGFy
Z2V0SWQpCisgICAgLCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKQoreworfQorCit2
b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKG1fdGFyZ2V0
SWQsIG1lc3NhZ2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi44MTg0YWM1YmRhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
KTsKK3B1YmxpYzoKKyAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdl
YlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bDo6Q29ubmVjdGlvblR5cGUpOworICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWwoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgQ29ubmVjdGlvblR5
cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25U
eXBlOyB9CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKSBvdmVycmlkZTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBTdHJpbmcgbV90YXJn
ZXRJZDsKKyAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9j
b25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZTo6UmVtb3RlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJ
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI0Zjk3ZmU4
ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JVSS5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJLmgiCisKKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVj
dG9yVUk6OmNhblNhdmUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgV2ViSW5z
cGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiBTdHJp
bmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHBy
b2ovbG9jYWxpemVkU3RyaW5ncy5qcyIpOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoInJl
c291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9j
YWxpemVkU3RyaW5ncy5qcyIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJ
TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVj
dG9yVUlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjllNTVm
M2Q1OGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSS5oIgor
I2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQorewor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgU3RyaW5nIHdlYkluc3BlY3RvclVJTG9jYWxp
emVkU3RyaW5nc1VSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5k
bGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOworICAgIGlmICgh
YnVuZGxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBOU1N0cmluZyAqcGF0aCA9
IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMi
XTsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAKKyAgICBy
ZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0
ZVN0cmluZzsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJM
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJM
KCk7Cit9CisKK1N0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VS
TCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VS
TCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDBiMDY4MDE5ZWY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgotCi0jaW5jbHVkZSAiRHJhd2lu
Z0FyZWEuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheS5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZXBhaW50SW5k
aWNhdG9yTGF5ZXJDbGllbnQoV2ViSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQpCi0g
ICAgICAgIDogbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQotICAgIHsKLSAgICB9
Ci0gICAgdmlydHVhbCB+UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KCkgeyB9Ci1wcml2YXRl
OgotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uRW5kZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5
ZXIsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2luc3BlY3RvckNs
aWVudC5hbmltYXRpb25FbmRlZEZvckxheWVyKGxheWVyKTsKLSAgICB9Ci0gICAgCi0gICAgV2Vi
SW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLX07Ci0KLVdlYkluc3BlY3RvckNs
aWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFn
ZSkKLSAgICAsIG1faGlnaGxpZ2h0T3ZlcmxheShudWxscHRyKQotewotfQotCi1XZWJJbnNwZWN0
b3JDbGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGZvciAoYXV0byYgbGF5ZXIg
OiBtX3BhaW50UmVjdExheWVycykKLSAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
LSAgICAKLSAgICBtX3BhaW50UmVjdExheWVycy5jbGVhcigpOwotCi0gICAgaWYgKG1fcGFpbnRS
ZWN0T3ZlcmxheSAmJiBtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFp
bnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQotewotICAgIGlmIChX
ZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IG1fcGFnZS0+aW5zcGVjdG9yKFdlYlBhZ2U6OkxhenlD
cmVhdGlvblBvbGljeTo6VXNlRXhpc3RpbmdPbmx5KSkKLSAgICAgICAgaW5zcGVjdG9yLT5jbG9z
ZSgpOwotCi0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpm
cm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCBjb3VudCkKLXsKLSAgICBtX3BhZ2UtPmluc3Bl
Y3RvckZyb250ZW5kQ291bnRDaGFuZ2VkKGNvdW50KTsKLX0KLQotSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwqIFdlYkluc3BlY3RvckNsaWVudDo6b3BlbkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9y
Q29udHJvbGxlciogY29udHJvbGxlcikKLXsKLSAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5vcGVu
TG9jYWxJbnNwZWN0b3JGcm9udGVuZChjb250cm9sbGVyLT5pc1VuZGVyVGVzdCgpKTsKLQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YnJpbmdGcm9u
dGVuZFRvRnJvbnQoKQotewotICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICBt
X3BhZ2UtPmluc3BlY3RvcigpLT5icmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmRpZFJlc2l6ZU1haW5GcmFtZShGcmFtZSopCi17Ci0gICAgaWYgKG1fcGFnZS0+
aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnVwZGF0ZURvY2tpbmdB
dmFpbGFiaWxpdHkoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgp
Ci17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAgYXV0byBo
aWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgICAgIG1f
aGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJsYXkucHRyKCk7Ci0gICAgICAgIG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5
KFdURk1vdmUoaGlnaGxpZ2h0T3ZlcmxheSksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7
Ci0gICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigp
OwotICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwotICAgIH0K
LSNlbHNlCi0gICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0LCBJbnNwZWN0b3JP
dmVybGF5OjpDb29yZGluYXRlU3lzdGVtOjpEb2N1bWVudCk7Ci0gICAgbV9wYWdlLT5zaG93SW5z
cGVjdG9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1faGlnaGxpZ2h0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLSNlbHNlCi0gICAgbV9wYWdl
LT5oaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5
KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRo
aXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAgICAgICBtX3BhZ2Ut
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgq
bV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCi0gICAgICAgIG1f
cGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCA9IG1ha2VVbmlxdWU8UmVwYWludEluZGljYXRvckxh
eWVyQ2xpZW50PigqdGhpcyk7Ci0KLSAgICBhdXRvIHBhaW50TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAq
bV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KTsKLSAgICAKLSAgICBwYWludExheWVyLT5zZXRO
YW1lKCJwYWludCByZWN0Iik7Ci0gICAgcGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDNEKCkpOwotICAgIHBhaW50TGF5ZXItPnNldFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7
Ci0gICAgcGFpbnRMYXllci0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgcGFpbnRMYXllci0+
c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKLQotICAg
IEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
OwotICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1
ZT4oMCwgMSkpOwotCi0gICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFu
aW1hdGlvblZhbHVlPigwLjI1LCAwKSk7Ci0gICAgCi0gICAgYXV0byBvcGFjaXR5QW5pbWF0aW9u
ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBvcGFjaXR5QW5pbWF0aW9uLT5zZXREdXJhdGlv
bigwLjI1KTsKLQotICAgIHBhaW50TGF5ZXItPmFkZEFuaW1hdGlvbihmYWRlS2V5ZnJhbWVzLCBG
bG9hdFNpemUoKSwgb3BhY2l0eUFuaW1hdGlvbi5wdHIoKSwgIm9wYWNpdHkiX3MsIDApOwotICAg
IAotICAgIEdyYXBoaWNzTGF5ZXImIHJhd0xheWVyID0gcGFpbnRMYXllci5nZXQoKTsKLSAgICBt
X3BhaW50UmVjdExheWVycy5hZGQoV1RGTW92ZShwYWludExheWVyKSk7Ci0KLSAgICBHcmFwaGlj
c0xheWVyJiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5sYXllcigpOwot
ICAgIG92ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocmF3TGF5ZXIpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6YW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVy
KiBsYXllcikKLXsKLSAgICBHcmFwaGljc0xheWVyKiBub25Db25zdExheWVyID0gY29uc3RfY2Fz
dDxHcmFwaGljc0xheWVyKj4obGF5ZXIpOwotICAgIG5vbkNvbnN0TGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICBtX3BhaW50UmVjdExheWVycy5yZW1vdmUoKm5vbkNvbnN0TGF5ZXIpOwot
fQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpz
aG93SW5zcGVjdG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySW5k
aWNhdGlvbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUluc3BlY3Rvcklu
ZGljYXRpb24oKQotewotICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkKQotewotICAgIGlmIChlbmFibGVkKQotICAgICAgICBtX3BhZ2UtPmVuYWJsZUluc3Bl
Y3Rvck5vZGVTZWFyY2goKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFnZS0+ZGlzYWJsZUluc3Bl
Y3Rvck5vZGVTZWFyY2goKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+
aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2VkKGFjdGl2ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGlu
ZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVj
dG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnRpbWVsaW5lUmVjb3JkaW5nQ2hh
bmdlZChhY3RpdmUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnNl
dE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFn
ZSkKLXsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIHBhZ2Ug
b3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCi0gICAg
QVNTRVJUKG1faGlnaGxpZ2h0T3ZlcmxheSk7Ci0gICAgbV9oaWdobGlnaHRPdmVybGF5ID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92
ZXJsYXkmLCBQYWdlKikKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0
KFBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQotewotICAgIG1fcGFnZS0+Y29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7Ci19Ci0KLWJv
b2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyN2MzZWUxNDJlMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwK
QEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VP
dmVybGF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NMYXllcjsKLWNsYXNzIElu
dFJlY3Q7Ci1jbGFzcyBQYWdlT3ZlcmxheTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFdlYlBhZ2U7Ci1jbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0KLWNsYXNz
IFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHBy
aXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1mcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwotcHVi
bGljOgotICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+V2Vi
SW5zcGVjdG9yQ2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9y
Q2xpZW50Ci0gICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBmcm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0KLSAgICBJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogb3BlbkxvY2FsRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlciopIG92ZXJyaWRlOwotICAgIHZvaWQgYnJpbmdGcm9udGVuZFRvRnJvbnQo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlc2l6ZU1haW5GcmFtZShXZWJDb3JlOjpGcmFtZSop
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBoaWdobGlnaHQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhp
ZGVIaWdobGlnaHQoKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
dm9pZCBzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUlu
c3BlY3RvckluZGljYXRpb24oKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkU2V0U2VhcmNoaW5n
Rm9yTm9kZShib29sKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBlbGVtZW50U2VsZWN0
aW9uQ2hhbmdlZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hh
bmdlZChib29sKSBvdmVycmlkZTsKLQotICAgIGJvb2wgb3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzaG93UGFpbnRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pIGZpbmFsOwotCi0g
ICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAotICAgIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRN
b3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZv
cm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFuaW1hdGlvbkVuZGVkRm9yTGF5
ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotCi0gICAgV2ViUGFnZSogbV9wYWdl
OwotICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7Ci0gICAgCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWludEluZGlj
YXRvckxheWVyQ2xpZW50OwotICAgIEhhc2hTZXQ8UmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
PiBtX3BhaW50UmVjdExheWVyczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9y
VUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NThkOGYwYzI0Ni4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2Vi
SW5zcGVjdG9yVUkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUku
aCIKLQotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvQ2hyb21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotI2lmICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclVJKHBhZ2UpKTsKLX0KLQotUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OlJlbW90ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBt
X3BhZ2UocGFnZSkKLSAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCi17Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRh
JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQotewot
ICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKLSAgICBtX2Jh
Y2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKLQotICAgIG1fcGFnZS5jb3Jl
UGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
dGhpcyk7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOwotICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxl
Il9zLCB0cnVlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25z
dCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNhdmVkVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
OjpkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2Fn
ZUFzeW5jKG1lc3NhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVz
c2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3Bh
Z2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2luZG93
T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zy
b250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOwotCi0gICAgbV9mcm9udGVuZEhvc3QgPSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7Ci0g
ICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVh
ZE5vcm1hbFdvcmxkKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9udGVu
ZExvYWRlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQo
KTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNW
aXNpYmxlIl9zLCB0cnVlKTsKLQotICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVj
dCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
OjpzdGFydFdpbmRvd0RyYWcoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpTdGFydFdpbmRvd0RyYWcoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQotewot
ICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2lu
ZG93UmVjdCgpOwotICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS5jb3JlUGFn
ZSgpLT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KLVdlYkNvcmU6OlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBh
Z2UoKS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKLXsKLSAgICBtX3BhZ2Uu
Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KG51bGxwdHIpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkZy
b250ZW5kRGlkQ2xvc2UoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlJlb3BlbigpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVy
bCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3VGFi
KHVybCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Ym9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotewotICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNv
ZGVkLCBmb3JjZVNhdmVBcyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpB
cHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKLXsKLSAgICAvLyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2FuIGtu
b3cgaWYgdGhlIG1haW4gcmVzb3VyY2UgY2hhbmdlZC4KLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2Vy
dGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLUlu
c3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2FibGVU
eXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxlVHlw
ZTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUo
KSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFt
ZTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24o
KSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lv
bjsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZl
cnNpb247Ci19Ci0KLWJvb2wgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxhdG9y
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVsYXRv
cjsKLX0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotYm9vbCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCi17Ci0gICAgcmV0dXJuIG1f
cGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOwot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUsICBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVE
aWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFy
eShldmVudE5hbWUsICJSZW1vdGUgV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJf
cywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQot
ewotICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5l
dmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgotICAg
IEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7Ci0gICAg
bV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLQotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOwotfQotI2VuZGlmCi0KLSNp
ZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotU3Ry
aW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotI2Vu
ZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4p
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGI0YWUxYzFkYWExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBSZW1vdGVXZWJJ
bnNwZWN0b3JVSSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclVJ
PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVj
dG9yVUk+IGNyZWF0ZShXZWJQYWdlJik7Ci0KLSAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0
ZWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
LQotICAgIC8vIENhbGxlZCBieSBSZW1vdGVXZWJJbnNwZWN0b3JVSSBtZXNzYWdlcwotICAgIHZv
aWQgaW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5k
Q29tbWFuZHNVUkwpOwotICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAg
dm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVU
UlkpCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKLSNlbmRp
ZgotCi0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKLSAgICB2b2lkIHdp
bmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQotICAgIGJv
b2wgaXNSZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgU3RyaW5nIGxv
Y2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYmFja2VuZENv
bW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0K
LSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFN0cmluZyB0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJp
bmcgdGFyZ2V0UHJvZHVjdFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHRhcmdl
dElzU2ltdWxhdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bG9zZVdpbmRvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZXNldFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25z
dCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVBcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgY29udGVudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX1RFTEVNRVRSWSkKLSAgICBib29sIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSBvdmVy
cmlkZTsKLSAgICBib29sIGRpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZTsgfQotICAgIHZvaWQgbG9nRGlhZ25v
c3RpY0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQot
ICAgIGJvb2wgY2FuU2F2ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlz
VW5kZXJUZXN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB1bnNpZ25lZCBpbnNw
ZWN0aW9uTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAxOyB9Ci0gICAgdm9pZCByZXF1
ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdlQXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdl
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0KLXByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgUmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFn
ZSYgbV9wYWdlOwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250
ZW5kQVBJRGlzcGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRI
b3N0PiBtX2Zyb250ZW5kSG9zdDsKLSAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgbV9kZWJ1Z2dhYmxl
SW5mbzsKLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX1RFTEVNRVRSWSkKLSAgICBib29sIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUg
eyBmYWxzZSB9OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJ
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2Vi
SW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJi
ZjdlNGM4NzhkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0x
LDM0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0j
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1tZXNzYWdlcyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JVSSB7Ci0gICAgSW5pdGlhbGl6ZShzdHJ1
Y3QgV2ViS2l0OjpEZWJ1Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIFN0cmluZyBiYWNr
ZW5kQ29tbWFuZHNVUkwpCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBT
ZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLSNlbmRpZgotCi0g
ICAgRGlkU2F2ZShTdHJpbmcgdXJsKQotICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQotCi0gICAg
U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDMzMjI1ZDEzZGQzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKLQotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0j
aW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0luc3BlY3RvclBhZ2VBZ2VudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlv
bi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFj
aGVkSGVpZ2h0UmF0aW8gPSAwLjc1Owotc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hl
ZFdpZHRoID0gNTAwOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1SZWY8V2ViSW5zcGVjdG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBw
YWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Ci19
Ci0KLVdlYkluc3BlY3Rvcjo6V2ViSW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3Bh
Z2UocGFnZSkKLXsKLX0KLQotV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkKLXsKLSAgICBp
ZiAobV9mcm9udGVuZENvbm5lY3Rpb24pCi0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5p
bnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChib29sIHVuZGVyVGVzdCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6T3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVz
dCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNldEZy
b250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlm
aWVyKQotewotICAgIC8vIFdlIG1pZ2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlz
IHdlYiBwcm9jZXNzIGdvdCBzd2FwcGVkIGludG8gYSBXZWJQYWdlUHJveHkKLSAgICAvLyBzaG9y
dGx5IGFmdGVyIGFub3RoZXIgcHJvY2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVjdGlvbi4KLSAg
ICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRy
OwotICAgIH0KLQotI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQotICAgIElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkpOwotI2VsaWYgT1MoREFSV0lOKQotICAg
IElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVk
Q29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgSVBD
OjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25u
ZWN0aW9uSWRlbnRpZmllci5oYW5kbGUoKSk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRp
ZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29u
bmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uLT5vcGVuKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENv
bm5lY3Rpb25BY3Rpb25zKQotICAgICAgICBjYWxsYmFjaygpOwotICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uQWN0aW9ucy5jbGVhcigpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9u
dGVuZENvbm5lY3Rpb24oKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRD
bG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci0KLSAgICAvLyBJZiB3ZSB0cmllZCB0byBj
bG9zZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rp
b24gZXhpc3RzIHlldC4KLSAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKLSAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9mcm9udGVuZENv
bm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0KLQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0
aW9ucy5jbGVhcigpOwotCi0gICAgbV9hdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fcHJldmlvdXND
YW5BdHRhY2ggPSBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgp
Ci17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3Bh
Z2UtPmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRD
b25uZWN0aW9uRXN0YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAg
IGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVu
ZChXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLS8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVz
c2FnZXMKLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29y
ZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2Uo
KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBDbG9zZSBjb3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3du
LgotICAgIGlmICghbV9mcm9udGVuZENvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNsb3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpvcGVu
SW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07Ci0KLSAgICBQYWdlKiBp
bnNwZWN0ZWRQYWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpOwotICAgIGlmICghaW5zcGVjdGVkUGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGlu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOwotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2Fk
UmVxdWVzdCB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZy
YW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0
cmluZyB9LCAiX2JsYW5rIl9zLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6
Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMs
IE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eTo6U2hvdWxkTm90QWxsb3csIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07Ci0KLSAg
ICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQo
KSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5p
bml0aWF0ZWRCeU1haW5GcmFtZSgpLCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKLSAg
ICBQYWdlKiBuZXdQYWdlID0gaW5zcGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGlu
c3BlY3RlZE1haW5GcmFtZSwgZnJhbWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24pOwotICAgIGlm
ICghbmV3UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbmV3UGFnZS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkubG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3I6OmV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsK
LSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
YWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChzY3JpcHQpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQot
ewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3
aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93Q29uc29sZSgp
LCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQot
ewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3
aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93UmVzb3VyY2Vz
KCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJj
ZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCi17Ci0g
ICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJh
bWVJZGVudGlmaWVyKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5j
b3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgU3RyaW5nIGlu
c3BlY3RvckZyYW1lSWRlbnRpZmllciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLmVuc3VyZVBhZ2VBZ2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsK
LQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShpbnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAwKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygpCi17Ci0gICAg
aWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+
Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9u
dGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygp
LCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5n
KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0g
ICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJv
bnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQ
cm9maWxpbmcoKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVs
ZW1lbnRTZWxlY3Rpb24oKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsK
LSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yOjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDApOwotICAgIH0p
OwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBh
Y3RpdmUpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2
ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNldE1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkT3ZlcnJpZGUoZW5hYmxlZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotYm9v
bCBXZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0IGFsbG93IGF0
dGFjaGluZyB0byBhbm90aGVyIGluc3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2lu
ZG93IGlzIHRvbyBtdWNoIQotICAgIGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFnZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwg
YWxsb3cgYXR0YWNoaW5nIGFnYWluIHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4KLSAgICBpZiAo
bV9hdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyB0
aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRl
IHRoZSBtaW5pbXVtIGluc3BlY3RvciBzaXplLgotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VI
ZWlnaHQgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhl
aWdodCgpOwotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlV2lkdGgoKTsKLSAgICB1bnNpZ25lZCBt
YXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFj
aGVkSGVpZ2h0UmF0aW87Ci0gICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhp
bXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFn
ZVdpZHRoOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0
eSgpCi17Ci0gICAgaWYgKG1fYXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
Y2FuQXR0YWNoV2luZG93ID0gdGhpcy0+Y2FuQXR0YWNoV2luZG93KCk7Ci0gICAgaWYgKG1fcHJl
dmlvdXNDYW5BdHRhY2ggPT0gY2FuQXR0YWNoV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3ByZXZpb3VzQ2FuQXR0YWNoID0gY2FuQXR0YWNoV2luZG93OwotCi0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2lu
ZG93KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Yjg5ZTUyMjc3Li4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUlk
ZW50aWZpZXIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7
Ci0KLWNsYXNzIFdlYkluc3BlY3RvciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OkJ1bmRsZUluc3BlY3Rvcj4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGll
bnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yPiBjcmVhdGUoV2ViUGFn
ZSopOwotCi0gICAgV2ViUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQotCi0g
ICAgdm9pZCB1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7Ci0KLSAgICAvLyBJbXBsZW1lbnRl
ZCBpbiBnZW5lcmF0ZWQgV2ViSW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2Uo
SVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyBjbG9zZSgpOyB9Ci0gICAgdm9pZCBkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2Us
IElQQzo6U3RyaW5nUmVmZXJlbmNlKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KLQotICAgIHZvaWQg
c2hvdygpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKTsKLQotICAgIHZvaWQgY2FuQXR0YWNoV2luZG93KGJvb2wmIHJl
c3VsdCk7Ci0KLSAgICB2b2lkIHNob3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2Vz
KCk7Ci0KLSAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZUlk
ZW50aWZpZXIpOwotCi0gICAgdm9pZCBzZXRBdHRhY2hlZChib29sIGF0dGFjaGVkKSB7IG1fYXR0
YWNoZWQgPSBhdHRhY2hlZDsgfQotCi0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEZvclRlc3QoY29u
c3QgU3RyaW5nJiBzY3JpcHQpOwotCi0gICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKLSAg
ICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpOwotICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKLSAgICB2b2lkIGVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFu
Z2VkKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRl
KE9wdGlvbmFsPGJvb2w+KTsKLQotICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6
QXR0YWNobWVudCk7Ci0KLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgY2xvc2UoKTsg
fQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7Ci0KLSAg
ICBleHBsaWNpdCBXZWJJbnNwZWN0b3IoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfldlYkluc3Bl
Y3RvcigpOwotCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKLQotICAgIC8vIENhbGxlZCBm
cm9tIFdlYkluc3BlY3RvckNsaWVudAotICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRl
bmQoYm9vbCB1bmRlclRlc3QpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsK
LQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0KLSAgICB2b2lkIHdoZW5Gcm9udGVuZENvbm5l
Y3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0gICAgV2ViUGFnZSogbV9w
YWdlOwotCi0gICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9mcm9udGVuZENvbm5lY3Rpb247
Ci0gICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9u
czsKLQotICAgIGJvb2wgbV9hdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3ByZXZpb3Vz
Q2FuQXR0YWNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1l
c3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWY3NGI1ZTZiMC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0j
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNw
ZWN0b3IgewotICAgIFNob3coKQotICAgIENsb3NlKCkKLQotICAgIFNldEF0dGFjaGVkKGJvb2wg
YXR0YWNoZWQpCi0KLSAgICBTaG93Q29uc29sZSgpCi0gICAgU2hvd1Jlc291cmNlcygpCi0KLSAg
ICBTaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1l
SWRlbnRpZmllcikKLQotICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQotCi0gICAgU3RhcnRQ
YWdlUHJvZmlsaW5nKCkKLSAgICBTdG9wUGFnZVByb2ZpbGluZygpCi0KLSAgICBTdGFydEVsZW1l
bnRTZWxlY3Rpb24oKQotICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLQotICAgIFNldEZyb250
ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JG
cm9udGVuZEFQSURpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzE4OWU5ODI1YWQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TY3JpcHRTdGF0ZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViSW5zcGVjdG9y
RnJvbnRlbmRBUElEaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIo
V2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotewotfQotCi12b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6cmVzZXQoKQotewotICAgIG1fZnJvbnRlbmRMb2Fk
ZWQgPSBmYWxzZTsKLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotICAgIG1fcXVldWUuY2xlYXIo
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmZyb250ZW5k
TG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5kTG9hZGVkID0gdHJ1ZTsKLQotICAgIGV2YWx1YXRl
UXVldWVkRXhwcmVzc2lvbnMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURp
c3BhdGNoZXI6OnN1c3BlbmQoKQotewotICAgIEFTU0VSVChtX2Zyb250ZW5kTG9hZGVkKTsKLSAg
ICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKLSAgICBBU1NFUlQobV9xdWV1ZS5pc0VtcHR5KCkpOwot
Ci0gICAgbV9zdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcjo6dW5zdXNwZW5kKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kZWQpOwot
Ci0gICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKLQotICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lv
bnMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3Bh
dGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpCi17Ci0gICAgZXZhbHVhdGVPclF1ZXVl
RXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIi
LCBjb21tYW5kLCAiXCJdKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURp
c3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0
cmluZyYgYXJndW1lbnQpCi17Ci0gICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3Ry
aW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCIsIFwi
IiwgYXJndW1lbnQsICJcIl0pIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBh
cmd1bWVudCkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIklu
c3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgIiwgYXJndW1l
bnQgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiXSkiKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNw
ZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaE1lc3NhZ2VBc3luYygiLCBtZXNzYWdlLCAiKSIpKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlT3JR
dWV1ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQotewotICAgIGlmICghbV9m
cm9udGVuZExvYWRlZCB8fCBtX3N1c3BlbmRlZCkgewotICAgICAgICBtX3F1ZXVlLmFwcGVuZChl
eHByZXNzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX3F1ZXVl
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCku
c2NyaXB0KCkuaXNQYXVzZWQoKSk7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgp
LnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihleHByZXNzaW9uKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlUXVldWVk
RXhwcmVzc2lvbnMoKQotewotICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24gOiBtX3F1ZXVlKSB7Ci0g
ICAgICAgIEFTU0VSVCghbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmlz
UGF1c2VkKCkpOwotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0
KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOwotICAgIH0KLQot
ICAgIG1fcXVldWUuY2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmNWM0MjRlMmQ4Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyKFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2
b2lkIGZyb250ZW5kTG9hZGVkKCk7Ci0KLSAgICB2b2lkIHN1c3BlbmQoKTsKLSAgICB2b2lkIHVu
c3VzcGVuZCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21t
YW5kKTsKLSAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNv
bnN0IFN0cmluZyYgYXJndW1lbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0
cmluZyYgY29tbWFuZCwgYm9vbCBhcmd1bWVudCk7Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VB
c3luYyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIHZvaWQgZXZhbHVh
dGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGV2YWx1YXRlUXVl
dWVkRXhwcmVzc2lvbnMoKTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBEZXF1ZTxTdHJp
bmc+IG1fcXVldWU7Ci0gICAgYm9vbCBtX2Zyb250ZW5kTG9hZGVkIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzAxNzg1MWY2ODcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgiCi0KLSNp
bmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4K
LSNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZWY8
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlcjo6Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyKTsKLX0KLQotV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlcjo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCi0gICAgOiBtX3F1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIiKSkKLXsKLX0KLQotV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6fldl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKQotewotfQotCi12b2lkIFdlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlv
biogY29ubmVjdGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9xdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQotewotICAg
IC8vIElmIHRoZSB3ZWIgcHJvY2VzcyBoYXMgbm90IGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgeWV0
LCB0aGVuIHRoZXJlCi0gICAgLy8gaXMgbm8gVk0gdG8gYmUgbm90aWZpZWQgYW5kIHRodXMgbm8g
aW5maW5pdGUgbG9vcCB0byBicmVhay4gQmFpbCBvdXQuCi0gICAgaWYgKCFXZWJDb3JlOjpjb21t
b25WTU9yTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6OlZNJiB2bSA9IFdlYkNv
cmU6OmNvbW1vblZNKCk7Ci0gICAgdm0ubm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZjZiZDAyMGEyLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIDogcHVibGlj
IElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IGNyZWF0ZSgpOwot
ICAgIH5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7Ci0gICAgCi0gICAgdm9pZCBp
bml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKLSAgICAKLXByaXZhdGU6Ci0g
ICAgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpOwotICAgIC8vIElQQzo6Q29ubmVj
dGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAg
dm9pZCBub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpOwotICAgIAotICAgIFJlZjxXb3JrUXVldWU+
IG1fcXVldWU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5ODcwZTUyYjczYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdl
cy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlciB7Ci0gICAgTm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmFhNmY2ZWRlNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgot
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5m
by5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01X
cmFwcGVyV29ybGQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0b3JVST4gV2ViSW5zcGVjdG9y
VUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
Ykluc3BlY3RvclVJKHBhZ2UpKTsKLX0KLQotV2ViSW5zcGVjdG9yVUk6OldlYkluc3BlY3RvclVJ
KFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZnJvbnRlbmRBUElE
aXNwYXRjaGVyKHBhZ2UpCi0gICAgLCBtX2RlYnVnZ2FibGVJbmZvKERlYnVnZ2FibGVJbmZvRGF0
YTo6ZW1wdHkoKSkKLXsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQodHJ1ZSk7Ci0gICAgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJbWFnZUJpdG1hcEVuYWJsZWQodHJ1ZSk7
Ci0jaWYgRU5BQkxFKFdFQkdMMikKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLnNldFdlYkdMMkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6ZXN0YWJsaXNoQ29ubmVjdGlvbihXZWJQYWdlUHJveHlJZGVudGlmaWVyIGlu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyLCBjb25zdCBEZWJ1Z2dhYmxlSW5mb0RhdGEmIGRlYnVnZ2Fi
bGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAg
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIgPSBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllcjsKLSAg
ICBtX2RlYnVnZ2FibGVJbmZvID0gZGVidWdnYWJsZUluZm87Ci0gICAgbV91bmRlclRlc3QgPSB1
bmRlclRlc3Q7Ci0gICAgbV9pbnNwZWN0aW9uTGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWw7Ci0KLSAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOwotCi0gICAgbV9mcm9udGVuZENvbnRy
b2xsZXIgPSAmbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBt
X2Zyb250ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7Ci0K
LSAgICB1cGRhdGVDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnVwZGF0
ZUNvbm5lY3Rpb24oKQotewotICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAg
IG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9iYWNrZW5kQ29u
bmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMp
Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNvbm5l
Y3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigpOwotICAgIElQQzo6Q29ubmVjdGlvbjo6
SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihzb2NrZXRQYWlyLnNlcnZlcik7Ci0gICAg
SVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KHNvY2tldFBhaXIuY2xpZW50KTsK
LSNlbGlmIE9TKERBUldJTikKLSAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFDSF9Q
T1JUX05VTEw7Ci0gICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBN
QUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpICE9IEtFUk5fU1VDQ0VTUykK
LSAgICAgICAgQ1JBU0goKTsKLQotICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hf
dGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVf
TUFLRV9TRU5EKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIobGlzdGVuaW5nUG9y
dCk7Ci0gICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGxpc3RlbmluZ1Bv
cnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICBJ
UEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGll
bnQ7Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVy
cyhjb25uZWN0aW9uSWRlbnRpZmllciwgY29ubkNsaWVudCk7Ci0gICAgSVBDOjpBdHRhY2htZW50
IGNvbm5lY3Rpb25DbGllbnRQb3J0KGNvbm5DbGllbnQpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybjsKLSNlbmRpZgotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpIHx8IE9TKERBUldJTikgfHwgUExBVEZPUk0oV0lOKQotICAgIG1fYmFja2VuZENvbm5lY3Rp
b24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbklk
ZW50aWZpZXIsICp0aGlzKTsKLSAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5vcGVuKCk7Ci0jZW5k
aWYKLQotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRGcm9udGVuZENvbm5lY3Rp
b24oY29ubmVjdGlvbkNsaWVudFBvcnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgaWYg
KG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVu
dCgpOwotCi0gICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0
ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7Ci0gICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZU
b0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKLQotICAgIC8vIFRlbGwgdGhlIG5ldyBmcm9udGVu
ZCBhYm91dCB0aGUgY3VycmVudCBkb2NrIHN0YXRlLiBJZiB0aGUgd2luZG93IG9iamVjdAotICAg
IC8vIGNsZWFyZWQgZHVlIHRvIGEgcmVsb2FkLCB0aGUgZG9jayBzdGF0ZSB3b24ndCBiZSByZXNl
bnQgZnJvbSBVSVByb2Nlc3MuCi0gICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKG1fZG9ja2luZ1Vu
YXZhaWxhYmxlKTsKLSAgICBzZXREb2NrU2lkZShtX2RvY2tTaWRlKTsKLSAgICBzZXRJc1Zpc2li
bGUobV9pc1Zpc2libGUpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkZyb250
ZW5kTG9hZGVkKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotCi0gICAgYnJpbmdUb0Zy
b250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFn
ZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUo
eCwgeSk7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJh
bWVSZWN0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKLXsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRvdygp
Ci17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwotCi0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAg
ICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2JhY2tl
bmRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9mcm9udGVuZENvbnRy
b2xsZXIpIHsKLSAgICAgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250
ZW5kQ2xpZW50KG51bGxwdHIpOwotICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9IG51bGxw
dHI7Ci0gICAgfQotCi0gICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5k
SG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
ciA9IHsgfTsKLSAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpyZW9wZW4oKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZW9wZW4o
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6
OnJlc2V0U3RhdGUoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZXNldFN0
YXRlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi1XZWJDb3JlOjpVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIFdlYkluc3BlY3RvclVJOjp1c2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVx
dWVzdFNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCi17Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwotICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2Ug
RG9ja1NpZGU6OlVuZG9ja2VkOgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEZXRhY2goKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9ja1Np
ZGU6OlJpZ2h0OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6
TGVmdDoKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9t
OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hCb3R0b20oKSwgbV9pbnNwZWN0ZWRQYWdl
SWRlbnRpZmllcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JVSTo6c2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKLXsKLSAgICBBU0NJSUxpdGVyYWwgc2lk
ZVN0cmluZyB7IEFTQ0lJTGl0ZXJhbDo6bnVsbCgpIH07Ci0KLSAgICBzd2l0Y2ggKHNpZGUpIHsK
LSAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKLSAgICAgICAgc2lkZVN0cmluZyA9ICJ1bmRv
Y2tlZCJfczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKLSAg
ICAgICAgc2lkZVN0cmluZyA9ICJyaWdodCJfczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IERvY2tTaWRlOjpMZWZ0OgotICAgICAgICBzaWRlU3RyaW5nID0gImxlZnQiX3M7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgotICAgICAgICBzaWRlU3RyaW5n
ID0gImJvdHRvbSJfczsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9kb2NrU2lkZSA9
IHNpZGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNl
dERvY2tTaWRlIl9zLCBTdHJpbmcoc2lkZVN0cmluZykpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKLXsKLSAgICBtX2Rv
Y2tpbmdVbmF2YWlsYWJsZSA9IHVuYXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHVuYXZhaWxh
YmxlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0SXNWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKLXsKLSAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldElzVmlzaWJsZSJfcywgdmlzaWJsZSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lk
dGgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93
V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6Y2hhbmdlU2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3
VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7
Ci0gICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6T3BlbkluTmV3VGFiKHVybCksIDApOwotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgV1RGOjpT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjph
cHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29u
dGVudCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1l
LCBjb250ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQodXJs
U3RyaW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yVUk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmljYXRl
KGNlcnRpZmljYXRlSW5mbyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi1ib29sIFdlYkluc3BlY3RvclVJOjpzdXBwb3J0
c0RpYWdub3N0aWNMb2dnaW5nKCkKLXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNl
dHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3Qg
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKLXsK
LSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFn
bm9zdGljTWVzc2FnZVdpdGhWYWx1ZURpY3Rpb25hcnkoZXZlbnROYW1lLCAiV2ViIEluc3BlY3Rv
ciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
KGJvb2wgYXZhaWxhYmxlKQotewotICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2lu
ZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMg
YWxzbyBlbmFibGVkLgotICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3Rp
Y0xvZ2dpbmcoKSk7Ci0gICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJs
ZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlh
Z25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUp
OwotfQotI2VuZGlmCi0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDb25zb2xlKCkKLXsKLSAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dDb25zb2xlIl9z
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd1Jlc291cmNlcygpCi17Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93UmVzb3VyY2VzIl9zKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGNvbnN0
IFN0cmluZyYgZnJhbWVJZGVudGlmaWVyKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LmRpc3BhdGNoQ29tbWFuZCgic2hvd01haW5SZXNvdXJjZUZvckZyYW1lIl9zLCBmcmFtZUlkZW50
aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFBhZ2VQcm9maWxpbmcoKQot
ewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGltZWxp
bmVQcm9maWxpbmdFbmFibGVkIl9zLCB0cnVlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
c3RvcFBhZ2VQcm9maWxpbmcoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3Bh
dGNoQ29tbWFuZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCBmYWxzZSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9u
RW5hYmxlZCJfcywgdHJ1ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BFbGVtZW50
U2VsZWN0aW9uKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1h
bmQoInNldEVsZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OmRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzYXZlZFVSTCJfcywgdXJsKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAg
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgiYXBwZW5kZWRUb1VSTCJf
cywgdXJsKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5k
aXNwYXRjaE1lc3NhZ2VBc3luYyhtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
cGFnZVBhdXNlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuc3VzcGVuZCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpwYWdlVW5wYXVzZWQoKQotewotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLnVuc3VzcGVuZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpz
ZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJn
ZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRh
cmdldFBsYXRmb3JtTmFtZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWls
ZFZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1
aWxkVmVyc2lvbjsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVy
c2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVj
dFZlcnNpb247Ci19Ci0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAh
UExBVEZPUk0oV0lOKQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0
b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFD
KSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvclVJLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JVSS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzlmMjFjOWI2Mi4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJEZWJ1Z2dh
YmxlSW5mb0RhdGEuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNo
ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5k
SG9zdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVy
OwotY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotY2xhc3MgRmxvYXRSZWN0OwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yVUkgOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJJbnNwZWN0b3JVST4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKLQot
ICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNl
aXZlci5jcHAKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQK
LSAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlIHsgLyogRG8gbm90
aGluZywgdGhlIGluc3BlY3RlZCBwYWdlIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZCBhbmQgbWF5
IGJlIGdldHRpbmcgcmVwbGFjZWQuICovIH0KLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2VXaW5kb3coKTsgfQotCi0gICAgLy8gQ2FsbGVkIGJ5
IFdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCi0gICAgdm9pZCBlc3RhYmxpc2hDb25uZWN0aW9uKFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVn
Z2FibGVJbmZvRGF0YSYsIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwp
OwotICAgIHZvaWQgdXBkYXRlQ29ubmVjdGlvbigpOwotCi0gICAgdm9pZCBzaG93Q29uc29sZSgp
OwotICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOwotCi0gICAgdm9pZCBzaG93TWFpblJlc291cmNl
Rm9yRnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpOwotCi0gICAgdm9pZCBzdGFy
dFBhZ2VQcm9maWxpbmcoKTsKLSAgICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICB2
b2lkIHN0YXJ0RWxlbWVudFNlbGVjdGlvbigpOwotICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rp
b24oKTsKLQotICAgIHZvaWQgYXR0YWNoZWRCb3R0b20oKSB7IHNldERvY2tTaWRlKERvY2tTaWRl
OjpCb3R0b20pOyB9Ci0gICAgdm9pZCBhdHRhY2hlZFJpZ2h0KCkgeyBzZXREb2NrU2lkZShEb2Nr
U2lkZTo6UmlnaHQpOyB9Ci0gICAgdm9pZCBhdHRhY2hlZExlZnQoKSB7IHNldERvY2tTaWRlKERv
Y2tTaWRlOjpMZWZ0KTsgfQotICAgIHZvaWQgZGV0YWNoZWQoKSB7IHNldERvY2tTaWRlKERvY2tT
aWRlOjpVbmRvY2tlZCk7IH0KLQotICAgIHZvaWQgc2V0RG9ja1NpZGUoRG9ja1NpZGUpOwotICAg
IHZvaWQgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wpOwotCi0gICAgdm9pZCBzZXRJc1Zpc2li
bGUoYm9vbCk7Ci0KLSAgICB2b2lkIGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZv
aWQgZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVU
UlkpCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWxpYWJs
ZSk7Ci0jZW5kaWYKLQotICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Ci0g
ICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9udGVu
ZExvYWRlZCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQot
ICAgIGJvb2wgaXNSZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIFN0
cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGJh
Y2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAg
SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7IH0KLSAgICBTdHJpbmcg
dGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1
aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVy
c2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5zcGVjdGlvbkxldmVsOyB9Ci0KLSAgICB2b2lk
IGJyaW5nVG9Gcm9udCgpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlb3BlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92
ZXJyaWRlOwotCi0gICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJl
cXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VBdHRh
Y2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2hhbmdlU2hl
ZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBv
cGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjYW5T
YXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNv
bnN0IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VT
YXZlQXMpIG92ZXJyaWRlOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiB1cmws
IGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dDZXJ0
aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSBvdmVycmlkZTsKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGlj
TG9nZ2luZygpIG92ZXJyaWRlOwotICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUo
KSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9Ci0gICAg
dm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgV1RGOjpTdHJpbmcmIGV2ZW50TmFtZSwgY29u
c3QgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92
ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBwYWdlUGF1c2VkKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBwYWdlVW5wYXVzZWQoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBv
dmVycmlkZSB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0
IFdlYkluc3BlY3RvclVJKFdlYlBhZ2UmKTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBX
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhv
c3Q7Ci0gICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9iYWNrZW5kQ29ubmVjdGlvbjsKLQot
ICAgIC8vIEtlZXAgYSBwb2ludGVyIHRvIHRoZSBmcm9udGVuZCdzIGluc3BlY3RvciBjb250cm9s
bGVyIHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2gKLSAgICAvLyBjb3JlUGFnZSgpLCBzaW5jZSB3
ZSBtYXkgbmVlZCBpdCBhZnRlciB0aGUgZnJvbnRlbmQncyBwYWdlIGhhcyBzdGFydGVkIGRlc3Ry
dWN0aW9uLgotICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIG1fZnJvbnRlbmRDb250
cm9sbGVyIHsgbnVsbHB0ciB9OwotCi0gICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyOwotICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAg
IERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOwotICAgIGJvb2wgbV9kb2NraW5n
VW5hdmFpbGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9Owot
I2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgbV9kaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLQotICAgIERvY2tTaWRlIG1fZG9ja1Np
ZGUgeyBEb2NrU2lkZTo6VW5kb2NrZWQgfTsKLSAgICB1bnNpZ25lZCBtX2luc3BlY3Rpb25MZXZl
bCB7IDEgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5p
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmMTM4NWQ0ODkuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1l
c3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JV
SSB7Ci0gICAgRXN0YWJsaXNoQ29ubmVjdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJbmZv
RGF0YSBkZWJ1Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25M
ZXZlbCkKLSAgICBVcGRhdGVDb25uZWN0aW9uKCkKLQotICAgIEF0dGFjaGVkQm90dG9tKCkKLSAg
ICBBdHRhY2hlZFJpZ2h0KCkKLSAgICBBdHRhY2hlZExlZnQoKQotICAgIERldGFjaGVkKCkKLSAg
ICBTZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKLSAgICBTZXRJc1Zpc2li
bGUoYm9vbCB2aXNpYmxlKQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAg
U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi0jZW5kaWYKLQot
ICAgIFNob3dDb25zb2xlKCkKLSAgICBTaG93UmVzb3VyY2VzKCkKLQotICAgIFNob3dNYWluUmVz
b3VyY2VGb3JGcmFtZShTdHJpbmcgZnJhbWVJZGVudGlmaWVyKQotCi0gICAgU3RhcnRQYWdlUHJv
ZmlsaW5nKCkKLSAgICBTdG9wUGFnZVByb2ZpbGluZygpCi0KLSAgICBTdGFydEVsZW1lbnRTZWxl
Y3Rpb24oKQotICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLQotICAgIERpZFNhdmUoU3RyaW5n
IHVybCkKLSAgICBEaWRBcHBlbmQoU3RyaW5nIHVybCkKLQotICAgIFNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChTdHJpbmcgbWVzc2FnZSkKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE3MGY2ZmQ1MjA5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLVdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYgcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotewotfQotCi1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRl
bnRpZmllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRvVGFyZ2V0SUQobV9wYWdlLmlkZW50aWZp
ZXIoKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6Y29ubmVjdChJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0g
ICAgaWYgKG1fY2hhbm5lbCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2hhbm5lbCA9IG1ha2VV
bmlxdWU8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4obV9wYWdlLCBpZGVu
dGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKTsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0g
ICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZy
b250ZW5kKCptX2NoYW5uZWwpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmRp
c2Nvbm5lY3QoKQotewotICAgIGlmICghbV9jaGFubmVsKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKG1fcGFnZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKLSAgICBtX2No
YW5uZWwucmVzZXQoKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5kTWVz
c2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1f
cGFnZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQotU3Ry
aW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQoV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgcGFnZUlEKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJwYWdlLSIsIHBhZ2VJRC50
b1VJbnQ2NCgpKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNiZDdmYWQ1ZmYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlk
ZW50aWZpZXIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsK
LSAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKLQotICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9Ci0KLSAgICBTdHJpbmcgaWRlbnRpZmll
cigpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjb25uZWN0KCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKLQotICAgIHN0YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllcik7Ci0KLXByaXZhdGU6Ci0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBtX2No
YW5uZWw7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwMTdj
NGVkYWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX3Bh
Z2VUYXJnZXQocGFnZSkKLXsKLSAgICAvLyBEbyBub3Qgc2VuZCB0aGUgcGFnZSB0YXJnZXQgdG8g
dGhlIFVJUHJvY2VzcywgdGhlIFdlYlBhZ2VQcm94eSB3aWxsIG1hbmFnZXIgdGhpcyBmb3IgdXMu
Ci0gICAgbV90YXJnZXRzLnNldChtX3BhZ2VUYXJnZXQuaWRlbnRpZmllcigpLCAmbV9wYWdlVGFy
Z2V0KTsKLX0KLQotV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6On5XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcigpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXI6OmFkZFRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYgdGFy
Z2V0KQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90YXJnZXRzLnNldCh0YXJnZXQuaWRlbnRp
ZmllcigpLCAmdGFyZ2V0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOwotCi0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Q3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHRhcmdldC5pZGVudGlmaWVyKCksIHRhcmdldC50eXBlKCkp
KTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFy
Z2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSh0YXJnZXQuaWRlbnRpZmllcigpICE9IG1fcGFnZVRhcmdldC5pZGVudGlmaWVy
KCksICJTaG91bGQgbmV2ZXIgcmVtb3ZlIHRoZSBtYWluIHRhcmdldC4iKTsKLQotICAgIG1fcGFn
ZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQodGFy
Z2V0LmlkZW50aWZpZXIoKSkpOwotCi0gICAgbV90YXJnZXRzLnJlbW92ZSh0YXJnZXQuaWRlbnRp
ZmllcigpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6Y29u
bmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgYXV0byB0YXJn
ZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgdGFyZ2V0LT5jb25uZWN0KGNvbm5lY3Rpb25UeXBlKTsKLX0KLQotdm9p
ZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6ZGlzY29ubmVjdEluc3BlY3Rvcihj
b25zdCBTdHJpbmcmIHRhcmdldElkKQotewotICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdl
dCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRh
cmdldC0+ZGlzY29ubmVjdCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyOjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElk
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMu
Z2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChtZXNzYWdlKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5MzFkYWQxYzkuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci1jbGFzcyBJbnNwZWN0b3JUYXJnZXQ7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoV2ViUGFnZSYpOwotICAgIH5X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcigpOwotCi0gICAgdm9pZCBhZGRUYXJnZXQo
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKLSAgICB2b2lkIHJlbW92ZVRhcmdldChJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldCYpOwotCi0gICAgdm9pZCBjb25uZWN0SW5zcGVjdG9yKGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0
aW9uVHlwZSk7Ci0gICAgdm9pZCBkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQ
YWdlJiBtX3BhZ2U7Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldCBtX3BhZ2VUYXJnZXQ7Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Kj4gbV90YXJnZXRz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
MWI1ZjcxMzczMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLQotI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdlLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fdGFy
Z2V0SWQodGFyZ2V0SWQpCi0gICAgLCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKQot
ewotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5k
KG1fdGFyZ2V0SWQsIG1lc3NhZ2UpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDgxODRhYzViZGEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xh
c3MgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbCk7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKLSAgICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsKCkgPSBkZWZhdWx0OwotCi1wcml2YXRlOgotICAgIENvbm5l
Y3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb25u
ZWN0aW9uVHlwZTsgfQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgU3RyaW5n
IG1fdGFyZ2V0SWQ7Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25U
eXBlIG1fY29ubmVjdGlvblR5cGUgeyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGU6OlJlbW90ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlH
dGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3Rv
clVJR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI0Zjk3ZmU4ZDAuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJ
bnNwZWN0b3JVSUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYkluc3BlY3RvclVJLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQot
I2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJ
bnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBX
ZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9l
bi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Ci19Ci0KLVN0cmluZyBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmlu
ZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3Rv
clVJTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3Bl
Y3RvclVJTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTU1ZjNkNThhMS4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
Ykluc3BlY3RvclVJTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JVSS5o
IgotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQot
ewotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgU3RyaW5nIHdlYkluc3BlY3RvclVJTG9j
YWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBi
dW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlm
ICghYnVuZGxlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcGF0
aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAi
anMiXTsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAg
ICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNv
bHV0ZVN0cmluZzsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdz
VVJMKCk7Ci19Ci0KLVN0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5n
c1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5n
c1VSTCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388640</attachid>
            <date>2020-01-23 18:54:38 -0800</date>
            <delta_ts>2020-01-23 19:03:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>754151</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLjRmMDczYTM3M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg2IEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JU
YXJnZXRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yVGFyZ2V0UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3Rv
clRhcmdldFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3RvclRhcmdldFByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAg
ICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
aC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3Bl
Y3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2ds
aWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJ
bnNwZWN0b3JXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAuCisgICAgICAgICogVUlQ
cm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZp
ZXcubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFj
Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5TWFjLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmguCisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbTogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVy
Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJW
aWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0
b3JXS1dlYlZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3Bl
Y3RvcldLV2ViVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XS0luc3BlY3RvcldLV2ViVmlldy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90
ZUluc3BlY3RvckNsaWVudC5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgu
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eVdpbi5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dl
Ykluc3BlY3RvclByb3h5V2luLmNwcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9y
L1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4u
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYklu
c3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5z
cGVjdG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMu
aW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yVUkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYklu
c3BlY3RvclVJR3RrLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2Vi
SW5zcGVjdG9yVUlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSUF0dGFjaG1lbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld1Rlc3RpbmcubW06CisgICAgICAgIEFkZCBzb21lIG1pc3NpbmcgaW5jbHVkZXMuCisKIDIw
MjAtMDEtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
W2lPU10gUmVtb3ZlIHRoZSBJT0hJREV2ZW50U2VydmljZUZhc3RQYXRoVXNlckNsaWVudCBJT0tp
dCBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAuLjYwMjM0NDc0NjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2FkcyIKICAgICAi
JHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvR2FtZXBhZCIKICAgICAiJHtXRUJLSVRfRElSfS9VSVBy
b2Nlc3MvR1BVIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3IiCiAgICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgogICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9OZXR3b3JrIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9OZXR3b3JrL0N1
c3RvbVByb3RvY29scyIKQEAgLTE0OCwxMiArMTQ5LDEwIEBAIHNldChXZWJLaXRfTUVTU0FHRVNf
SU5fRklMRVMKICAgICBTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNz
YWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSAg
ICBVSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJDb29r
aWVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgotICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNz
YWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLm1lc3NhZ2VzLmluCkBAIC0xNjMsNiArMTYyLDkgQEAgc2V0KFdlYktpdF9NRVNT
QUdFU19JTl9GSUxFUwogCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1l
c3NhZ2VzLmluCiAKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluCisgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94
eS5tZXNzYWdlcy5pbgorCiAgICAgVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5
Lm1lc3NhZ2VzLmluCkBAIC0xNzksNiArMTgxLDExIEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5f
RklMRVMKIAogICAgIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2Vy
Lm1lc3NhZ2VzLmluCiAKKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0
b3JVSS5tZXNzYWdlcy5pbgorICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5t
ZXNzYWdlcy5pbgorICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIubWVzc2FnZXMuaW4KKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JVSS5tZXNzYWdlcy5pbgorCiAgICAgV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9XZWJN
RE5TUmVnaXN0ZXIubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL1dl
YlJUQ01vbml0b3IubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL1dl
YlJUQ1Jlc29sdmVyLm1lc3NhZ2VzLmluCkBAIC0yMDIsMTEgKzIwOSw3IEBAIHNldChXZWJLaXRf
TUVTU0FHRVNfSU5fRklMRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5t
ZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubWVzc2Fn
ZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2Fn
ZXMuaW4KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIu
bWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2Vz
LmluCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIubWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVz
c2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgogCiAg
ICAgV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLm1lc3NhZ2VzLmluCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggOTgwODFh
YTZiMmMuLjZkY2JiMjM3NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1p
bnB1dC54Y2ZpbGVsaXN0CkBAIC03OSwxMSArNzksMTIgQEAgJChQUk9KRUNUX0RJUikvVUlQcm9j
ZXNzL0NvY29hL1ZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvVUlQcm9jZXNzL0dQVS9HUFVQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKyQo
UFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1
c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c1Byb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSQoUFJPSkVD
VF9ESVIpL1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVmlld0dlc3R1cmVD
b250cm9sbGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVmlzaXRlZExp
bmtTdG9yZS5tZXNzYWdlcy5pbgpAQCAtOTEsNyArOTIsNiBAQCAkKFBST0pFQ1RfRElSKS9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHku
bWVzcwogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkluc3Bl
Y3RvclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
bWVzc2FnZXMuaW4KQEAgLTExMiw2ICsxMTIsMTAgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9X
ZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiskKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KKyQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLm1lc3NhZ2VzLmluCkBA
IC0xMzMsMTMgKzEzNyw5IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCi0kKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGMzNGFmNWNkM2ExLi44MTBlMGUxODMzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNTQsNiArNTQsNyBAQCBWUEFUSCA9IFwK
ICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKICAgICAkKFdlYktpdDIpL1dl
YlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRh
YmFzZSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0luc3BlY3RvciBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL01lZGlhQ2FjaGUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9N
ZWRpYVN0cmVhbSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL05ldHdvcmsgXApAQCAtNzks
NiArODAsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9EYXRhYmFzZXMg
XAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0Rvd25sb2FkcyBcCiAgICAgJChXZWJLaXQyKS9V
SVByb2Nlc3MvR1BVIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IgXAogICAg
ICQoV2ViS2l0MikvVUlQcm9jZXNzL01lZGlhU3RyZWFtIFwKICAgICAkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9OZXR3b3JrIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVBy
b3RvY29scyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCA3NjdkNmM5MjA3My4uZjVhZGNh
NmVmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtNDgsNiArNDgsOCBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKKyAgICBVSVByb2Nlc3Mv
SW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKwogICAgIFVJUHJvY2Vzcy9M
YXVuY2hlci93aW4vUHJvY2Vzc0xhdW5jaGVyV2luLmNwcAogCiAgICAgVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL2N1cmwvV2Vic2l0ZURhdGFTdG9yZUN1cmwuY3BwCkBAIC01Niw3ICs1OCw2IEBAIGxp
c3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJ
bXBsLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdpbi5jcHAKLSAg
ICBVSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93
aW4vV2ViUGFnZVByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJv
eHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKQEAgLTY0
LDYgKzY1LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvd2luL0luamVjdGVkQnVuZGxlV2luLmNwcAogCisgICAgV2ViUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJV2luLmNwcAorCiAgICAgV2ViUHJvY2Vzcy9N
ZWRpYUNhY2hlL1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Ob25lLmNwcApAQCAtNzgsNyArODEsNiBA
QCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAog
Ci0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCiAKICAgICBXZWJQcm9jZXNzL3dp
bi9XZWJQcm9jZXNzTWFpbldpbi5jcHAKQEAgLTE4MSwxMCArMTgzLDEwIEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9MSUJSQVJJRVMKIAogaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQogICAgIGxp
c3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vzcy9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcAotICAgICAgICBVSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlci5jcHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCiAKLSAgICAgICAgVUlQ
cm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKyAgICAgICAgVUlQcm9j
ZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCiAgICAgKQog
CiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IDBiMzdmNDcwYjM3Li40MWUzZmMxNTVmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCkBAIC00OCw2ICs0OCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAK
ICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRp
bmF0ZWRHcmFwaGljcy5jcHAKIAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3Bl
Y3RvclByb3h5V2luLmNwcAorCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1
bmNoZXJXaW4uY3BwCiAKICAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0
YVN0b3JlQ3VybC5jcHAKQEAgLTU2LDcgKzU4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJD
RVMKIAogICAgIFVJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNz
L3dpbi9XZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViSW5z
cGVjdG9yUHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3Bw
CiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nl
c3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcApAQCAtNjQsNiArNjUsOCBAQCBsaXN0KEFQUEVO
RCBXZWJLaXRfU09VUkNFUwogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5q
ZWN0ZWRCdW5kbGVXaW4uY3BwCiAKKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5z
cGVjdG9yVUlXaW4uY3BwCisKICAgICBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlT
dG9yYWdlTWFuYWdlci5jcHAKIAogICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRz
Y2FwZVBsdWdpbk5vbmUuY3BwCkBAIC03Nyw3ICs4MCw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9T
T1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBh
Z2Uvd2luL1dlYkluc3BlY3RvclVJV2luLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4v
V2ViUGFnZVdpbi5jcHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNw
cApAQCAtMTgxLDEwICsxODMsMTAgQEAgZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9SRU1PVEVfSU5T
UEVDVE9SKQogICAgIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vz
cy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAotICAgICAgICBVSVByb2Nlc3Mvc29j
a2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKKyAgICAgICAgVUlQcm9jZXNz
L0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorICAgICAgICBVSVBy
b2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3Bw
CiAKLSAgICAgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAK
KyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJ
RVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CmluZGV4IDNkYTI4MDBjOWM1Li5kN2JkMTdhZmI3YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC0yNjcsMTMgKzI2NywxMSBAQCBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKIFVJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RQcm94eS5jcHAKLVVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKIFVJ
UHJvY2Vzcy9MZWdhY3lHbG9iYWxTZXR0aW5ncy5jcHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRl
LmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3MvUHJvY2Vzc1Ro
cm90dGxlci5jcHAKIFVJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKLVVJUHJvY2Vz
cy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1Rp
bWVyLmNwcAogVUlQcm9jZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAogVUlQcm9jZXNzL1N1c3Bl
bmRlZFBhZ2VQcm94eS5jcHAKQEAgLTMwNiwxNSArMzA0LDExIEBAIFVJUHJvY2Vzcy9XZWJGcmFt
ZVByb3h5LmNwcAogVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuY3BwCiBVSVBy
b2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViR2VvbG9j
YXRpb25Qcm92aWRlci5jcHAKLVVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKLVVJUHJv
Y2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCiBVSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0
YXRlLmNwcAogVUlQcm9jZXNzL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwCi1V
SVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKIFVJUHJvY2Vz
cy9XZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwCi1VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAogVUlQcm9jZXNz
L1dlYlBhc3RlYm9hcmRQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQcmVmZXJlbmNlcy5jcHAKQEAg
LTQyNiw2ICs0MjAsMTMgQEAgVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKIAogVUlQcm9jZXNzL0dQVS9HUFVQcm9jZXNzUHJveHkuY3BwCiAKK1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQ
cm94eS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAor
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKK1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisKIFVJUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogVUlQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uLmNwcAogVUlQcm9jZXNzL05vdGlm
aWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcApAQCAtNTE3LDYgKzUxOCwx
NiBAQCBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZUNTU1N0eWxl
RGVjbGFyYXRpb25IYW5kbGUuY3BwCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9Jbmpl
Y3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgQG5vLXVuaWZ5CiAKK1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAorV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
Q2xpZW50LmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcAor
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKK1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAK
KwogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9NZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNw
cAogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXIuY3BwCiAKQEAgLTU5Myw3ICs2MDQsNiBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
CiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcAotV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNwcAogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5jcHAKQEAgLTYxMCwy
MyArNjIwLDE1IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKLVdlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9W
aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNr
Rm9yd2FyZExpc3RQcm94eS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5j
cHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb29raWVKYXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRG9jdW1lbnRMb2FkZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
Ci1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvclVJLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIEBuby11bmlmeQog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAotV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlT3ZlcmxheS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVy
UHJveHkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDZhOGUyZTY5MDVjLi5jNDE3NDRhMzI4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dApAQCAtMjI5LDcgKzIyOSw2IEBAIFVJUHJvY2Vzcy9XZWJNZWRpYVNl
c3Npb25Gb2N1c01hbmFnZXIuY3BwCiBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5h
Z2VyQ2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKIFVJ
UHJvY2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tCi1VSVByb2Nlc3MvV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3Lm1tCiAKIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFSZWNv
cmQuY3BwCiAKQEAgLTQwMiw2ICs0MDEsMTQgQEAgVUlQcm9jZXNzL0dhbWVwYWQvY29jb2EvVUlH
YW1lcGFkUHJvdmlkZXJDb2NvYS5tbQogVUlQcm9jZXNzL0dhbWVwYWQvaW9zL1VJR2FtZXBhZFBy
b3ZpZGVySU9TLm1tCiBVSVByb2Nlc3MvR2FtZXBhZC9tYWMvVUlHYW1lcGFkUHJvdmlkZXJNYWMu
bW0KIAorVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1t
CitVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5tbQorCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbQorVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMu
bW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0K
K1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCisKIFVJUHJv
Y2Vzcy9pb3MvZm9ybXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9y
bXMvV0tEYXRlUGlja2VyVmlld0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tG
aWxlVXBsb2FkUGFuZWwubW0KQEAgLTQ1MSw3ICs0NTgsNiBAQCBVSVByb2Nlc3MvaW9zL1dLRHJh
d2luZ1ZpZXcubW0KIFVJUHJvY2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCiBV
SVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5t
bQogVUlQcm9jZXNzL2lvcy9XS0hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLm1t
Ci1VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1t
CiBVSVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQogVUlQcm9jZXNz
L2lvcy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIubW0KIFVJUHJvY2Vzcy9pb3MvV0tQYXNzd29y
ZFZpZXcubW0KQEAgLTQ3MSw3ICs0NzcsNiBAQCBVSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNw
cAogVUlQcm9jZXNzL21hYy9IaWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcAogVUlQcm9jZXNz
L21hYy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLm1tCi1VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1t
CiBVSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3BwCiBVSVByb2Nlc3MvbWFjL1NlcnZp
Y2VzQ29udHJvbGxlci5tbQogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtNDgy
LDE1ICs0ODcsMTIgQEAgVUlQcm9jZXNzL21hYy9XZWJDb2xvclBpY2tlck1hYy5tbQogVUlQcm9j
ZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25z
RHJvcGRvd25NYWMubW0KLVVJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KIFVJ
UHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVu
dVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94eU1hYy5tbQogVUlQcm9j
ZXNzL21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tCiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyLm1tCi1VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0K
LVVJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tQ
cmludGluZ1ZpZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVn
YXRlLm1tCiBVSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQpAQCAtNTc3LDYgKzU3
OSw4IEBAIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVn
SW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0KIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dl
Ykluc3BlY3RvclVJTWFjLm1tCisKIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0
b3JhZ2VNYW5hZ2VyLmNwcAogCiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNj
YXBlUGx1Z2luTWFjLm1tCkBAIC02MTgsNyArNjIyLDYgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVhTWFjLmNw
cAogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QYWdlQmFubmVyTWFjLm1tCiBXZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCi1XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFn
ZU9iamVjdEJhc2UubW0KIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdE1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4
dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggMWVmNzNiYzIxNGMuLjg1YWIw
YTNlMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTIxNSw2ICsyMTUsMTIgQEAgVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCiAKIFVJUHJvY2Vzcy9nZW9jbHVlL0dlb2NsdWVHZW9sb2NhdGlvblByb3ZpZGVyLmNwcAog
CitVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorCitV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKK1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorVUlQcm9jZXNz
L0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcAorCiBVSVByb2Nlc3MvTGF1
bmNoZXIvZ2xpYi9Qcm9jZXNzTGF1bmNoZXJHTGliLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9M
YXVuY2hlci9nbGliL0J1YmJsZXdyYXBMYXVuY2hlci5jcHAgQG5vLXVuaWZ5CiAKQEAgLTIzMCw3
ICsyMzYsNiBAQCBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvdW5peC9XZWJzaXRlRGF0YVN0b3JlVW5p
eC5jcHAKIAogVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcCBAbm8tdW5pZnkK
IAotVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAogVUlQcm9jZXNzL2ds
aWIvV2ViUHJvY2Vzc1Bvb2xHTGliLmNwcAogVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5
R0xpYi5jcHAKIFVJUHJvY2Vzcy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcCBAbm8tdW5p
ZnkKQEAgLTI0OCw3ICsyNTMsNiBAQCBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9y
LmNwcAogVUlQcm9jZXNzL2d0ay9Qb2ludGVyTG9ja01hbmFnZXIuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL2d0ay9Qb2ludGVyTG9ja01hbmFnZXJXYXlsYW5kLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyWDExLmNwcCBAbm8tdW5pZnkKLVVJUHJvY2Vzcy9n
dGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1RleHRDaGVj
a2VyR3RrLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVy
R3RrLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvVmlld1NuYXBzaG90U3RvcmVHdGsuY3Bw
CkBAIC0yNTYsOCArMjYwLDYgQEAgVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAg
QG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1dlYkNvbG9yUGlja2VyR3RrLmNwcAogVUlQcm9jZXNz
L2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcAogVUlQcm9jZXNzL2d0ay9XZWJEYXRhTGlz
dFN1Z2dlc3Rpb25zRHJvcGRvd25HdGsuY3BwCi1VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcAotVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCiBVSVBy
b2Nlc3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1dl
YlBhc3RlYm9hcmRQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlH
dGsuY3BwCkBAIC0zOTIsNiArMzk0LDggQEAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9nbGliL0luamVjdGVkQnVuZGxlR2xpYi5jcHAKIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcAorCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVk
aWFLZXlTdG9yYWdlTWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3Vu
aXgvTmV0c2NhcGVQbHVnaW5Vbml4LmNwcCBAbm8tdW5pZnkKQEAgLTQyMyw3ICs0MjcsNiBAQCBX
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL0FjY2VsZXJhdGVkU3VyZmFjZVdheWxhbmQuY3BwCiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL0FjY2VsZXJhdGVkU3VyZmFjZVgxMS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0
ay5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCmluZGV4IDQzYTQ3
ZGQ3ZDBhLi4yZTA2NDlhOGRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUF0dGFjaG1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
QXR0YWNobWVudC5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIE9CSkNfQ0xBU1MgTlNGaWxlV3JhcHBlcjsKK09CSkNfQ0xBU1MgTlNTdHJpbmc7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KaW5k
ZXggZmM0ZDg1NmYwMmUuLmVkNTk4ODFjNWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQpAQCAtMzUsNiArMzUsNyBA
QAogI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3Jl
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9u
QnViYmxlLmg+CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjY5MjhjYTJmYmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcApAQCAtMCww
ICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgor
CisjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgIldl
YlBhZ2VNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlByb2Nlc3NQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNw
ZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0UHJveHk+KHBhZ2UsIHRhcmdldElkLCB0
eXBlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0
b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBh
Z2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSB0eXBlKQoreworICAgIGF1dG8gdGFyZ2V0ID0gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0
ZShwcm92aXNpb25hbFBhZ2UucGFnZSgpLCB0YXJnZXRJZCwgdHlwZSk7CisgICAgdGFyZ2V0LT5t
X3Byb3Zpc2lvbmFsUGFnZSA9IG1ha2VXZWFrUHRyKHByb3Zpc2lvbmFsUGFnZSk7CisgICAgcmV0
dXJuIHRhcmdldDsKK30KKworSW5zcGVjdG9yVGFyZ2V0UHJveHk6Okluc3BlY3RvclRhcmdldFBy
b3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1f
aWRlbnRpZmllcih0YXJnZXRJZCkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCit2b2lkIElu
c3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBpZiAobV9wcm92aXNpb25hbFBh
Z2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQor
ICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3Rvcihp
ZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0
UHJveHk6OmRpc2Nvbm5lY3QoKQoreworICAgIGlmIChpc1BhdXNlZCgpKQorICAgICAgICByZXN1
bWUoKTsKKworICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lv
bmFsUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVu
dGlmaWVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFz
UnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
VGFyZ2V0UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNp
b25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigp
LCBtZXNzYWdlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFBy
b3Zpc2lvbmFsVGFyZ2V0KCkKK3sKKyAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwoKSBjb25zdAorewor
ICAgIHJldHVybiAhIW1fcHJvdmlzaW9uYWxQYWdlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0
b3JUYXJnZXRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3Bl
Y3RvclRhcmdldFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmEyMjM5Y2VjOGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFByb3Zpc2lvbmFsUGFnZVByb3h5OworY2xhc3MgV2ViUGFnZVByb3h5
OworCisvLyBOT1RFOiBUaGlzIFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0
IGNhcmUgYWJvdXQgdGhlIGZyb250ZW5kIGNoYW5uZWwsIHNpbmNlCisvLyBhbnkgdGFyZ2V0IC0+
IGZyb250ZW5kIG1lc3NhZ2VzIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0
aCBhIHRhcmdldElkLgorCitjbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNy
ZWF0ZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
VGFyZ2V0UHJveHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgSW5zcGVjdG9y
VGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9
IGRlZmF1bHQ7CisKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKKyAgICB2b2lkIGRpZENvbW1pdFBy
b3Zpc2lvbmFsVGFyZ2V0KCk7CisgICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX2lk
ZW50aWZpZXI7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlwZTsKKyAg
ICBXZWFrUHRyPFByb3Zpc2lvbmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxOTJjMjlmNDE4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVkZSAi
QVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVk
ZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdl
Ykluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgor
I2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHko
KQorICAgIDogbV9kZWJ1Z2dhYmxlSW5mbyhBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVi
dWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKSkKK3sKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6On5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3Rv
clBhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkK
K3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWls
YWJsZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3Rv
clBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53
ZWJQYWdlSUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlm
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmxvYWQoUmVmPEFQSTo6RGVidWdn
YWJsZUluZm8+JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRz
VVJMKQoreworICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgbV9kZWJ1
Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENvbW1h
bmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6ZShtX2RlYnVnZ2FibGVJ
bmZvLT5kZWJ1Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1hbmRzVVJMKSk7CisgICAgbV9p
bnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JQYWdlVVJMKCkpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9tQmFja2VuZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
K30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQ3Jhc2goKQorewor
ICAgIC8vIEJlaGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQganVzdCBjbG9zZWQsIHNvIGNsaWVudHMg
YXJlIGluZm9ybWVkIHRoZSBmcm9udGVuZCBpcyBnb25lLgorICAgIGZyb250ZW5kRGlkQ2xvc2Uo
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCit7CisgICAgYnJp
bmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKG1lc3NhZ2UpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJv
bnRlbmREaWRDbG9zZSgpCit7CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBwcm90
ZWN0KCp0aGlzKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmNsb3Nl
RnJvbUZyb250ZW5kKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIEFTU0VSVCgh
bV9iYWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7CisgICAgbG9hZChtX2RlYnVnZ2FibGVJbmZvLmNvcHlSZWYoKSwgbV9iYWNr
ZW5kQ29tbWFuZHNVUkwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZXNl
dFN0YXRlKCkKK3sKKyAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5nVG9G
cm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3Rl
ZFVSTCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlRGlhbG9nKTsKK30KKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
VVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoc3VnZ2Vz
dGVkVVJMLCBjb250ZW50KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0
U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0
UmVjdChyZWN0KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5k
b3dEcmFnKCkKK3sKKyAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7
CisgICAgcGxhdGZvcm1PcGVuSW5OZXdUYWIodXJsKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlm
aWNhdGVJbmZvKQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5m
byk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNr
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAg
ICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3Rv
clBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgdHJh
Y2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbnVsbHB0cik7CisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+
d2ViUGFnZUlEKCksICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hc3N1
bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JCYXNlVVJMKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAg
ICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9pbnNwZWN0
b3JQYWdlID0gbnVsbHB0cjsKKworICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKTsKK30KKworI2lmICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShN
QUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQorV2ViUGFnZVByb3h5KiBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKSB7IH0KKyNlbmRpZiAvLyAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8
ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYWI1OGY4Y2UwNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMpCitPQkpDX0NMQVNTIE5T
VVJMOworT0JKQ19DTEFTUyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlcjsKK09CSkNfQ0xBU1MgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
OworT0JKQ19DTEFTUyBXS1dlYlZpZXc7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgQ2VydGlmaWNhdGVJbmZvOworfQorCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIERlYnVn
Z2FibGVJbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5
OworY2xhc3MgV2ViVmlldzsKKworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgflJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0gMDsK
K307CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eSgpKTsKKyAgICB9CisKKyAgICB+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAg
IHZvaWQgc2V0Q2xpZW50KFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBjbGllbnQpIHsg
bV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShi
b29sKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBsb2FkKFJlZjxBUEk6
OkRlYnVnZ2FibGVJbmZvPiYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7Cisg
ICAgdm9pZCBjbG9zZUZyb21CYWNrZW5kKCk7CisgICAgdm9pZCBzaG93KCk7CisKKyAgICB2b2lk
IHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRv
dy5nZXQoKTsgfQorICAgIFdLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OworCisgICAgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVj
dDsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgdm9pZCB1cGRhdGVXaW5kb3dU
aXRsZShjb25zdCBDU3RyaW5nJik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykK
KyAgICBMUkVTVUxUIHNpemVDaGFuZ2UoKTsKKyAgICBMUkVTVUxUIG9uQ2xvc2UoKTsKKworICAg
IHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFS
QU0pOworI2VuZGlmCisKKyAgICB2b2lkIGNsb3NlRnJvbUNyYXNoKCk7CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IG1lc3Nh
Z2VzLgorICAgIHZvaWQgZnJvbnRlbmREaWRDbG9zZSgpOworICAgIHZvaWQgcmVvcGVuKCk7Cisg
ICAgdm9pZCByZXNldFN0YXRlKCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lk
IHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29s
IGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CisgICAgdm9pZCBzZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBzdGFydFdpbmRv
d0RyYWcoKTsKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7CisgICAg
dm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Cisg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisg
ICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICAvLyBQbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMu
CisgICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OworICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZv
aWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgp
OworICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0
cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAg
ICB2b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAg
dm9pZCBwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsK
KworICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIg
fTsKKyAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKworICAg
IFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBtX2RlYnVnZ2FibGVJbmZvOworICAgIFN0cmluZyBt
X2JhY2tlbmRDb21tYW5kc1VSTDsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3OworICAgIFJldGFpblB0
cjxOU1dpbmRvdz4gbV93aW5kb3c7CisgICAgUmV0YWluUHRyPFdLUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0
YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgbV9zaGVldFJlY3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgR3Rr
V2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7
IG51bGxwdHIgfTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBIV05EIG1f
ZnJvbnRlbmRIYW5kbGU7CisgICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlMDkx
Yjc4ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDAgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkgeworICAgIEZyb250ZW5kRGlkQ2xvc2UoKQorICAgIFJlb3Bl
bigpCisgICAgUmVzZXRTdGF0ZSgpCisgICAgQnJpbmdUb0Zyb250KCkKKworICAgIFNhdmUoU3Ry
aW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKQorICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQor
CisgICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCisgICAgU3RhcnRX
aW5kb3dEcmFnKCkKKworICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQorICAgIFNob3dDZXJ0
aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQorCisgICAg
U2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjNkNzA1ZTgzZTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
UHJveHkuY3BwCkBAIC0wLDAgKzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKKworI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgorI2luY2x1ZGUg
IldlYkF1dG9tYXRpb25TZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3Rvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclBy
b3h5OjptaW5pbXVtV2luZG93V2lkdGggPSA1MDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0
b3JQcm94eTo6bWluaW11bVdpbmRvd0hlaWdodCA9IDQwMDsKKworY29uc3QgdW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCA9IDEwMDA7Citjb25zdCB1bnNpZ25l
ZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCA9IDY1MDsKKworV2ViSW5z
cGVjdG9yUHJveHk6OldlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFn
ZSkKKyNpZiBQTEFURk9STShNQUMpCisgICAgOiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VG
cm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQpCisjZW5kaWYKK3sKKyAgICBpZiAoaW5z
cGVjdGVkUGFnZSAmJiBpbnNwZWN0ZWRQYWdlLT5oYXNSdW5uaW5nUHJvY2VzcygpKSB7CisgICAg
ICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisgICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQo
KSwgKnRoaXMpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yUHJveHk6On5XZWJJbnNwZWN0b3JQ
cm94eSgpCit7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0aW9uTGV2
ZWwoKSBjb25zdAoreworICAgIHJldHVybiBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVk
UGFnZSgpKTsKK30KKworV2ViUHJlZmVyZW5jZXMmIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2Up
OworICAgIHJldHVybiBtX2luc3BlY3RvclBhZ2UtPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIGlmICht
X2luc3BlY3RlZFBhZ2UpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICBjbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworCisgICAg
bV9pbnNwZWN0ZWRQYWdlID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1l
c3NhZ2UpKTsKK30KKworLy8gUHVibGljIEFQSXMKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6Omlz
RnJvbnQoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Jc0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmNvbm5lY3QoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9zaG93TWVzc2FnZVNlbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gdHJ1ZTsKKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdU
b0Zyb250ID0gdHJ1ZTsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
OjpOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpLCAwKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvdygpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgICAgIGJyaW5nVG9Gcm9udCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29ubmVjdCgpOworCisgICAgLy8gRG9u
J3QgaWdub3JlIHRoZSBmaXJzdCBicmluZ1RvRnJvbnQgc28gaXQgb3BlbnMgdGhlIEluc3BlY3Rv
ci4KKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmhpZGUoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgcGxhdGZvcm1I
aWRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlKCkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OkNsb3NlKCkpOworCisgICAgY2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VG
b3JDcmFzaCgpCit7CisgICAgY2xvc2UoKTsKKworICAgIHBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFz
aCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjbG9zZSgpOworICAgIHNo
b3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCit7CisgICAg
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQo
KTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2hl
ZFdpZHRoKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9y
QXR0YWNobWVudFNpZGUoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJ
bnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygp
LmRlbGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7CisKKyAgICBwbGF0Zm9ybVJlc2V0U3RhdGUo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXQoKQoreworICAgIGlmIChtX2lu
c3BlY3RlZFBhZ2UpIHsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNw
ZWN0ZWRQYWdlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKK3sK
KyAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7CisgICAgQVNTRVJUKGluc3BlY3RlZFBhZ2Up
OworCisgICAgbV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKKyAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlE
KCksICp0aGlzKTsKKworICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24o
KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJ
UEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbklk
ZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUoKQor
eworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVh
dGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yOjpTaG93Q29uc29sZSgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6c2hvd1Jlc291cmNlcygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dSZXNvdXJjZXMoKSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFt
ZVByb3h5KiBmcmFtZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGZy
YW1lLT5mcmFtZUlEKCkpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoQm90
dG9tKCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaFJpZ2h0KCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVu
dFNpZGU6OlJpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoTGVmdCgp
Cit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpMZWZ0KTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRlIHNpZGUpCit7CisgICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UgfHwgIWNhbkF0dGFjaCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lz
QXR0YWNoZWQgPSB0cnVlOworICAgIG1fYXR0YWNobWVudFNpZGUgPSBzaWRlOworCisgICAgaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNobWVudFNpZGUoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHNpZGUpKTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAg
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1
ZSk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U2V0QXR0YWNoZWQodHJ1ZSkpOworCisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7Cisg
ICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICBtX2luc3BlY3RvclBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdo
dCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0Ogor
ICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpB
dHRhY2hlZExlZnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHBsYXRmb3JtQXR0
YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmRldGFjaCgpCit7CisgICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBdHRhY2hlZCA9
IGZhbHNlOworCisgICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAgICBpbnNwZWN0b3JQYWdlUHJl
ZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CisKKyAgICBtX2lu
c3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFs
c2UpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpEZXRhY2hlZCgpKTsKKworICAgIHBsYXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sK
KyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dChoZWlnaHQpOworICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNp
Z25lZCB3aWR0aCkKK3sKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0
b3JBdHRhY2hlZFdpZHRoKHdpZHRoKTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lk
dGgod2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRTaGVldFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHBsYXRmb3JtU2V0U2hlZXRSZWN0KHJlY3QpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIHBs
YXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRv
Z2dsZVBhZ2VQcm9maWxpbmcoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9pc1Byb2ZpbGluZ1BhZ2UpCisgICAgICAgIG1faW5zcGVj
dGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygp
KTsKKyAgICBlbHNlCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTdGFydFBhZ2VQcm9maWxpbmcoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9lbGVtZW50U2VsZWN0aW9uQWN0aXZl
KSB7CisgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IHRydWU7CisgICAg
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wRWxl
bWVudFNlbGVjdGlvbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25uZWN0KCk7CisgICAg
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdGFydEVs
ZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfQorfQorCitib29sIFdlYkluc3BlY3RvclByb3h5Ojpp
c01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYgdXJsKQoreworICAgIC8vIFVzZSBV
Ukwgc28gd2UgY2FuIGNvbXBhcmUgdGhlIHBhdGhzIGFuZCBwcm90b2NvbHMuCisgICAgVVJMIG1h
aW5QYWdlVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKTsK
KyAgICBpZiAodXJsLnByb3RvY29sKCkgPT0gbWFpblBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKG1haW5QYWdlVVJMLnBhdGgoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
V2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0IFVSTCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KKyAgICBT
dHJpbmcgdGVzdFBhZ2VVUkxTdHJpbmcgPSBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVz
dFBhZ2VVUkwoKTsKKyAgICBpZiAodGVzdFBhZ2VVUkxTdHJpbmcuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFVSTCB0ZXN0UGFnZVVSTChVUkwoKSwgdGVzdFBhZ2VVUkxT
dHJpbmcpOworICAgIHJldHVybiB1cmwucHJvdG9jb2woKSA9PSB0ZXN0UGFnZVVSTC5wcm90b2Nv
bCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXModGVzdFBhZ2VVUkwucGF0aCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZSgpOworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICgh
bV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFja0luc3BlY3RvclBh
Z2UobV9pbnNwZWN0b3JQYWdlLCBtX2luc3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQ
YWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIo
KSwgKnRoaXMpOworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFzc3VtZVJlYWRBY2Nl
c3NUb0Jhc2VVUkwoKm1faW5zcGVjdG9yUGFnZSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
ckJhc2VVUkwoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2NhbEluc3Bl
Y3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdGVk
UGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKSkgeworICAgICAg
ICBzaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3VuZGVyVGVzdCA9IHVu
ZGVyVGVzdDsKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIEFTU0VSVChtX2luc3Bl
Y3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFc3Rh
Ymxpc2hDb25uZWN0aW9uKG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBpbmZvRm9yTG9j
YWxEZWJ1Z2dhYmxlKCksIG1fdW5kZXJUZXN0LCBpbnNwZWN0aW9uTGV2ZWwoKSkpOworCisgICAg
QVNTRVJUKCFtX2lzQWN0aXZlRnJvbnRlbmQpOworICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IHRy
dWU7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZy
b250ZW5kKCp0aGlzKTsKKworICAgIGlmICghbV91bmRlclRlc3QpIHsKKyAgICAgICAgbV9jYW5B
dHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2gpOworICAgICAgICBtX2lzQXR0YWNo
ZWQgPSBzaG91bGRPcGVuQXR0YWNoZWQoKTsKKyAgICAgICAgbV9hdHRhY2htZW50U2lkZSA9IHN0
YXRpY19jYXN0PEF0dGFjaG1lbnRTaWRlPihpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNw
ZWN0b3JBdHRhY2htZW50U2lkZSgpKTsKKworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSk7CisKKyAg
ICAgICAgaWYgKG1faXNBdHRhY2hlZCkgeworICAgICAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1l
bnRTaWRlKSB7CisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206CisgICAg
ICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6QXR0YWNoZWRCb3R0b20oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OkxlZnQ6CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOworCisgICAg
ICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERv
Y2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKyAgICB9CisKKyAgICAvLyBOb3RpZnkg
V2ViS2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVjdG9yIGF0dGFjaGVzIHNvIHRoYXQgaXQg
bWF5IGluc3RhbGwgZGVsZWdhdGVzIHByaW9yIHRvIHRoZSBfV0tJbnNwZWN0b3IgbG9hZGluZyBp
dHMgZnJvbnRlbmQuCisgICAgbV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgpLmRpZEF0dGFjaElu
c3BlY3RvcigqbV9pbnNwZWN0ZWRQYWdlLCAqdGhpcyk7CisKKyAgICAvLyBCYWlsIG91dCBpZiB0
aGUgY2xpZW50IGNsb3NlZCB0aGUgaW5zcGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1ldGhvZC4K
KyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNw
ZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkgOiBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW4oKQor
eworICAgIGlmIChtX3VuZGVyVGVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lu
c3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFNldEZvclNjb3BlPGJvb2w+IGlz
T3BlbmluZyhtX2lzT3BlbmluZywgdHJ1ZSk7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlz
aWJsZShtX2lzVmlzaWJsZSkpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAgICAgcGxh
dGZvcm1BdHRhY2goKTsKKyAgICBlbHNlCisgICAgICAgIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRX
aW5kb3coKTsKKworICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmRpZENsb3NlKCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBmYWxzZTsK
KyAgICBtX3Nob3dNZXNzYWdlU2VudCA9IGZhbHNlOworICAgIG1faWdub3JlRmlyc3RCcmluZ1Rv
RnJvbnQgPSBmYWxzZTsKKworICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFn
ZSk7CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nl
c3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpKTsKKwor
ICAgIGlmIChtX2lzQWN0aXZlRnJvbnRlbmQpIHsKKyAgICAgICAgbV9pc0FjdGl2ZUZyb250ZW5k
ID0gZmFsc2U7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmRpc2Nvbm5lY3RGcm9udGVuZCgqdGhpcyk7CisgICAgfQorCisgICAgaWYgKG1faXNBdHRhY2hl
ZCkKKyAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKKworICAgIC8vIE51bGwgb3V0IG1faW5zcGVj
dG9yUGFnZSBhZnRlciBwbGF0Zm9ybURldGFjaCgpLCBzbyB0aGUgdmlld3MgY2FuIGJlIGNsZWFu
ZWQgdXAgY29ycmVjdGx5LgorICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisKKyAgICBt
X2lzQXR0YWNoZWQgPSBmYWxzZTsKKyAgICBtX2NhbkF0dGFjaCA9IGZhbHNlOworICAgIG1fdW5k
ZXJUZXN0ID0gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1f
aW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24o
KSkKKyAgICAgICAgYXV0b21hdGlvblNlc3Npb24tPmluc3BlY3RvckZyb250ZW5kTG9hZGVkKCpt
X2luc3BlY3RlZFBhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpicmluZ1RvRnJv
bnQoKQoreworICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgdGVs
bHMgdXMgdG8gZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50IHRvCisgICAgLy8gaWdub3JlIGl0IG9u
Y2UgaWYgd2Ugb25seSB3YW50ZWQgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgdGhlIEluc3BlY3Rv
ciB0byBsYXRlcgorICAgIC8vIHJlcXVlc3QgdG8gYmUgYnJvdWdodCB0byB0aGUgZnJvbnQgd2hl
biBhIGJyZWFrcG9pbnQgaXMgaGl0IG9yIHNvbWUgb3RoZXIgYWN0aW9uLgorICAgIGlmIChtX2ln
bm9yZUZpcnN0QnJpbmdUb0Zyb250KSB7CisgICAgICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJv
bnQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzVmlzaWJs
ZSkKKyAgICAgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlCisgICAgICAgIG9w
ZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpCit7CisgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBh
dmFpbGFibGUpCit7CisgICAgYm9vbCBwcmV2aW91c0NhbkF0dGFjaCA9IG1fY2FuQXR0YWNoOwor
CisgICAgbV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChhdmFpbGFibGUpOworCisgICAg
aWYgKHByZXZpb3VzQ2FuQXR0YWNoID09IG1fY2FuQXR0YWNoKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9pbnNwZWN0b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKKyAgICAgICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZh
aWxhYmxlKCFtX2NhbkF0dGFjaCkpOworCisgICAgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKG1fY2FuQXR0YWNoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBwbGF0Zm9ybUlu
c3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0
aXZlKQoreworICAgIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSA9IGFjdGl2ZTsKKworICAgIGlm
IChtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UpIHsKKyAgICAgICAgbV9pZ25vcmVFbGVt
ZW50U2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7CisgICAgICAgIGlmICghbV9pc1Zpc2libGUpCisg
ICAgICAgICAgICBjbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFj
dGl2ZSkKKyAgICAgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAg
ZWxzZSBpZiAoaXNDb25uZWN0ZWQoKSkKKyAgICAgICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2
ZSkKK3sKKyAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGFjdGl2ZTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFs
PGJvb2w+IGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5z
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCit7CisgICAgcGxh
dGZvcm1TYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoZmlsZW5h
bWUsIGNvbnRlbnQpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpzaG91bGRPcGVuQXR0
YWNoZWQoKQoreworICAgIHJldHVybiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0
b3JTdGFydHNBdHRhY2hlZCgpICYmIGNhbkF0dGFjaCgpOworfQorCisvLyBVbnN1cHBvcnRlZCBj
b25maWd1cmF0aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBwcm92aWRlZCBoZXJlLgorCisjaWYgIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworV2ViUGFn
ZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1Jc0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJ
bmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0
YWNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNl
VVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30K
KworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1
Z2dhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEZWJ1Z2dhYmxl
SW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0
eUNoYW5nZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjZW5kaWYgLy8g
IVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yYjFmZGZjYTFkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oCkBAIC0wLDAgKzEsMzAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJBdHRhY2htZW50LmgiCisj
aW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1B
QykKKyNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1Mg
TlNWaWV3OworT0JKQ19DTEFTUyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JQ
cm94eU9iakNBZGFwdGVyOworT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOwor
I2VsaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlD
bGllbnQ7CitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJQcmVmZXJlbmNlczsKKworZW51
bSBjbGFzcyBBdHRhY2htZW50U2lkZSB7CisgICAgQm90dG9tLAorICAgIFJpZ2h0LAorICAgIExl
ZnQsCit9OworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eQorICAgIDogcHVibGljIEFQSTo6T2Jq
ZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SW5zcGVjdG9yPgorICAgICwgcHVibGljIElQQzo6
TWVzc2FnZVJlY2VpdmVyCisgICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwK
KyNpZiBQTEFURk9STShXSU4pCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxp
c3RlbmVyCisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclBy
b3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yUHJveHkoaW5zcGVjdGVkUGFnZSkpOwor
ICAgIH0KKworICAgIH5XZWJJbnNwZWN0b3JQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRl
KCk7CisKKyAgICAvLyBQdWJsaWMgQVBJcworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQorICAgIFdlYlBhZ2VQcm94eSog
aW5zcGVjdG9yUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsgfQorCisgICAg
Ym9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQYWdlOyB9Cisg
ICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQorICAgIGJv
b2wgaXNGcm9udCgpOworCisgICAgdm9pZCBjb25uZWN0KCk7CisKKyAgICB2b2lkIHNob3coKTsK
KyAgICB2b2lkIGhpZGUoKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZUZvckNy
YXNoKCk7CisgICAgdm9pZCByZW9wZW4oKTsKKyAgICB2b2lkIHJlc2V0U3RhdGUoKTsKKworICAg
IHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQ
cm94eSopOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGVudW0gY2xhc3MgSW5zcGVjdGlvblRh
cmdldFR5cGUgeyBMb2NhbCwgUmVtb3RlIH07CisgICAgc3RhdGljIFJldGFpblB0cjxOU1dpbmRv
dz4gY3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rp
b25UYXJnZXRUeXBlKTsKKworICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBj
b25zdDsKKyAgICB2b2lkIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0ID0gMCk7
CisgICAgdm9pZCB3aW5kb3dGcmFtZURpZENoYW5nZSgpOworICAgIHZvaWQgd2luZG93RnVsbFNj
cmVlbkRpZENoYW5nZSgpOworICAgIE5TV2luZG93KiBpbnNwZWN0b3JXaW5kb3coKSBjb25zdCB7
IHJldHVybiBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsgfQorCisgICAgdm9pZCBjbG9zZUZyb250
ZW5kUGFnZSgpOworICAgIHZvaWQgY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmly
ZWQoKTsKKworICAgIHZvaWQgYXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3
LCBOU1ZpZXcgKm5ld1ZpZXcpOworICAgIHZvaWQgYXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRv
dyhOU1dpbmRvdyAqb2xkV2luZG93KTsKKyAgICB2b2lkIGF0dGFjaG1lbnREaWRNb3ZlVG9XaW5k
b3coTlNXaW5kb3cgKm5ld1dpbmRvdyk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX2luc3BlY3RvclZpZXc7IH07CisgICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmKTsKKyNlbmRpZgorCisgICAgdm9pZCBzaG93
Q29uc29sZSgpOworICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOworICAgIHZvaWQgc2hvd01haW5S
ZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqKTsKKworICAgIEF0dGFjaG1lbnRTaWRlIGF0
dGFjaG1lbnRTaWRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2lkZTsgfQorICAgIGJv
b2wgaXNBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRhY2hlZDsgfQorICAgIHZvaWQg
YXR0YWNoUmlnaHQoKTsKKyAgICB2b2lkIGF0dGFjaExlZnQoKTsKKyAgICB2b2lkIGF0dGFjaEJv
dHRvbSgpOworICAgIHZvaWQgYXR0YWNoKEF0dGFjaG1lbnRTaWRlID0gQXR0YWNobWVudFNpZGU6
OkJvdHRvbSk7CisgICAgdm9pZCBkZXRhY2goKTsKKworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQpOworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNp
Z25lZCk7CisKKyAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKKworICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7CisKKyAgICBib29sIGlzUHJvZmlsaW5n
UGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQcm9maWxpbmdQYWdlOyB9CisgICAgdm9pZCB0b2dn
bGVQYWdlUHJvZmlsaW5nKCk7CisKKyAgICBib29sIGlzRWxlbWVudFNlbGVjdGlvbkFjdGl2ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZTsgfQorICAgIHZvaWQgdG9n
Z2xlRWxlbWVudFNlbGVjdGlvbigpOworCisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5kZXJUZXN0OyB9CisKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlKGJvb2wpOworCisgICAgLy8gUHJvdmlkZWQgYnkgcGxhdGZvcm0gV2ViSW5zcGVjdG9y
UHJveHkgaW1wbGVtZW50YXRpb25zLgorICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVS
TCgpOworICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGluc3BlY3RvckJhc2VVUkwoKTsKKyAgICBzdGF0aWMgYm9vbCBpc01haW5PclRl
c3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYpOworICAgIHN0YXRpYyBEZWJ1Z2dhYmxlSW5mb0Rh
dGEgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1pbmltdW1XaW5kb3dXaWR0aDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdp
bmRvd0hlaWdodDsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93V2lk
dGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWlnaHQ7CisKK3By
aXZhdGU6CisgICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5Kik7CisK
KyAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAgIHZvaWQgY2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKKworICAgIC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBDb25u
ZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbm5l
Y3Rpb25UeXBlOjpMb2NhbDsgfQorCisgICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZy
b250ZW5kUGFnZSgpOworICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwor
ICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgdm9p
ZCBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKKyAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0
ZSgpOworICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUJy
aW5nVG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCk7CisgICAgdm9pZCBwbGF0Zm9ybUhpZGUoKTsKKyAgICBib29sIHBsYXRmb3JtSXNGcm9udCgp
OworICAgIHZvaWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOworICAg
IHZvaWQgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
Jik7CisgICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKTsKKyAgICB1
bnNpZ25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7CisgICAgdm9pZCBwbGF0Zm9y
bUF0dGFjaCgpOworICAgIHZvaWQgcGxhdGZvcm1EZXRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3Jt
U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgcGxhdGZvcm1TdGFydFdp
bmRvd0RyYWcoKTsKKyAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVBcyk7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgcGxh
dGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKKyNlbHNlCisgICAgYm9v
bCBwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsgcmV0dXJuIHdl
YlByb2Nlc3NDYW5BdHRhY2g7IH0KKyNlbmRpZgorCisgICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3Bl
Y3RvclByb3h5IG1lc3NhZ2VzCisgICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChi
b29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpOworICAgIHZvaWQgc2V0RnJvbnRlbmRDb25u
ZWN0aW9uKElQQzo6QXR0YWNobWVudCk7CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5k
KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICB2b2lkIGRp
ZENsb3NlKCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGJyaW5nSW5zcGVj
dGVkUGFnZVRvRnJvbnQoKTsKKyAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9v
bCk7CisgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAg
IHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJl
Y29yZGluZ0NoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOworCisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworCisgICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7
IHJldHVybiBtX2NhbkF0dGFjaDsgfQorICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7CisK
KyAgICB2b2lkIG9wZW4oKTsKKworICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0
OworCisgICAgV2ViUHJlZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0
OworCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgdm9pZCB1cGRhdGVJ
bnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4p
CisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0s
IExQQVJBTSk7CisgICAgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgdm9pZCB3aW5k
b3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92ZXJyaWRlOwor
I2VuZGlmCisKKyAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51bGxwdHIgfTsK
KyAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKworICAgIGJv
b2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc0F0dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQXR0YWNo
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fc2hvd01lc3NhZ2VTZW50IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlRmlyc3RC
cmluZ1RvRnJvbnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZl
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzT3BlbmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQWN0
aXZlRnJvbnRlbmQgeyBmYWxzZSB9OworCisgICAgQXR0YWNobWVudFNpZGUgbV9hdHRhY2htZW50
U2lkZSB7QXR0YWNobWVudFNpZGU6OkJvdHRvbX07CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
UmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXI7CisgICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRvdzsKKyAgICBS
ZXRhaW5QdHI8V0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFs
VVJMTWFwOworICAgIFJ1bkxvb3A6OlRpbWVyPFdlYkluc3BlY3RvclByb3h5PiBtX2Nsb3NlRnJv
bnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcjsKKyAgICBTdHJpbmcgbV91cmxTdHJpbmc7CisgICAg
V2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworICAgIGJvb2wgbV9pc09ic2VydmluZ0Nv
bnRlbnRMYXlvdXRSZWN0IHsgZmFsc2UgfTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+IG1fY2xpZW50OworICAgIEd0a1dp
ZGdldCogbV9pbnNwZWN0b3JWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9pbnNw
ZWN0b3JXaW5kb3cgeyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX2hlYWRlckJhciB7IG51
bGxwdHIgfTsKKyAgICBTdHJpbmcgbV9pbnNwZWN0ZWRVUkxTdHJpbmc7CisjZWxpZiBQTEFURk9S
TShXSU4pCisgICAgSFdORCBtX2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAg
SFdORCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBt
X2luc3BlY3RvclZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3RvckRl
dGFjaFdpbmRvdyB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8V2ViVmlldz4gbV9pbnNwZWN0b3JW
aWV3OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94
eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJi
Nzc1NTNjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw1OCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBX
ZWJJbnNwZWN0b3JQcm94eSB7CisgICAgT3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBj
YW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQorICAgIFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6
OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCisKKyAgICBTZW5kTWVzc2FnZVRvQmFj
a2VuZChTdHJpbmcgbWVzc2FnZSkKKworICAgIEZyb250ZW5kTG9hZGVkKCkKKyAgICBEaWRDbG9z
ZSgpCisgICAgQnJpbmdUb0Zyb250KCkKKyAgICBCcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkK
KyAgICBSZW9wZW4oKQorICAgIFJlc2V0U3RhdGUoKQorCisgICAgSW5zcGVjdGVkVVJMQ2hhbmdl
ZChTdHJpbmcgdXJsU3RyaW5nKQorICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQorICAgIEVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJv
b2wgYWN0aXZlKQorICAgIFRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAg
ICBTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5h
YmxlZCkKKworICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQorICAgIEFwcGVuZChTdHJpbmcgZmlsZW5h
bWUsIFN0cmluZyBjb250ZW50KQorCisgICAgQXR0YWNoQm90dG9tKCkKKyAgICBBdHRhY2hSaWdo
dCgpCisgICAgQXR0YWNoTGVmdCgpCisgICAgRGV0YWNoKCkKKworICAgIEF0dGFjaEF2YWlsYWJp
bGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCisKKyAgICBTZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBoZWlnaHQpCisgICAgU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKKworICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKworICAg
IFN0YXJ0V2luZG93RHJhZygpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmVhMTVlZTY1NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMu
Y3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiQVBJUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiBIYXNoTWFwPFdl
YlBhZ2VQcm94eSosIHVuc2lnbmVkPiBQYWdlTGV2ZWxNYXA7CisKK3N0YXRpYyBQYWdlTGV2ZWxN
YXAmIHBhZ2VMZXZlbE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBhZ2VMZXZl
bE1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3Vuc2lnbmVkIGluc3BlY3RvckxldmVs
Rm9yUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpIHsKKyAgICAgICAg
YXV0byBmaW5kUmVzdWx0ID0gcGFnZUxldmVsTWFwKCkuZmluZChwYWdlKTsKKyAgICAgICAgaWYg
KGZpbmRSZXN1bHQgIT0gcGFnZUxldmVsTWFwKCkuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmluZFJlc3VsdC0+dmFsdWUgKyAxOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitTdHJp
bmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdl
KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91cExldmVs
IiwgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKHBhZ2UpLCAiX18iKTsKK30KKwordm9pZCB0cmFja0lu
c3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlLCBXZWJQYWdlUHJveHkqIGlu
c3BlY3RlZFBhZ2UpCit7CisgICAgcGFnZUxldmVsTWFwKCkuc2V0KGluc3BlY3RvclBhZ2UsIGlu
c3BlY3RvckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKSk7Cit9CisKK3ZvaWQgdW50cmFja0lu
c3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKQoreworICAgIHBhZ2VMZXZl
bE1hcCgpLnJlbW92ZShpbnNwZWN0b3JQYWdlKTsKK30KKworc3RhdGljIFdlYlByb2Nlc3NQb29s
KiBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbDsKK3N0YXRpYyBXZWJQcm9jZXNzUG9vbCogc19u
ZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbDsKKworV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclBy
b2Nlc3NQb29sKHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICAvLyBIYXZpbmcgb3Vy
IG93biBwcm9jZXNzIHBvb2wgcmVtb3ZlcyB1cyBmcm9tIHRoZSBtYWluIHByb2Nlc3MgcG9vbCBh
bmQKKyAgICAvLyBndWFyYW50ZWVzIG5vIHByb2Nlc3Mgc2hhcmluZyBmb3Igb3VyIHVzZXIgaW50
ZXJmYWNlLgorICAgIFdlYlByb2Nlc3NQb29sKiYgcG9vbCA9IChpbnNwZWN0aW9uTGV2ZWwgPT0g
MSkgPyBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCA6IHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vz
c1Bvb2w7CisgICAgaWYgKCFwb29sKSB7CisgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IEFQ
STo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcG9vbCA9ICZX
ZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24uZ2V0KCkpLmxlYWtSZWYoKTsKKyAg
ICAgICAgLy8gRG8gbm90IGRlbGF5IHByb2Nlc3MgbGF1bmNoIGZvciBpbnNwZWN0b3IgcGFnZXMg
YXMgaW5zcGVjdG9yIHBhZ2VzIGRvIG5vdCBrbm93IGhvdyB0byB0cmFuc2l0aW9uIGZyb20gYSB0
ZXJtaW5hdGVkIHByb2Nlc3MuCisgICAgICAgIHBvb2wtPmRpc2FibGVEZWxheWVkV2ViUHJvY2Vz
c0xhdW5jaCgpOworICAgIH0KKyAgICByZXR1cm4gKnBvb2w7Cit9CisKK2Jvb2wgaXNJbnNwZWN0
b3JQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCit7CisgICAgcmV0dXJu
IChzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCAmJiBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9v
bCA9PSAmcHJvY2Vzc1Bvb2wpCisgICAgICAgIHx8IChzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQ
b29sICYmIHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQb29sKTsKK30K
KworYm9vbCBpc0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAgIHJl
dHVybiBwYWdlTGV2ZWxNYXAoKS5jb250YWlucygmd2ViUGFnZSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclV0aWxpdGllcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5jMTllYTc1ODhjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2Ns
YXNzIFdlYlByb2Nlc3NQb29sOworCisvLyBUaGUgaW5zcGVjdG9yIHBhZ2UgZ3JvdXBzIGFyZSB1
c2VkIHRvIGdpdmUgZGlmZmVyZW50IHByZWZlcmVuY2VzIHRvIGVhY2gKKy8vIGluc3BlY3RvciBs
ZXZlbCBieSBzZXR0aW5nIGEgcGVyLWxldmVsIHBhZ2UgZ3JvdXAgaWRlbnRpZmllci4KK3Vuc2ln
bmVkIGluc3BlY3RvckxldmVsRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKK1N0cmluZyBpbnNwZWN0
b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKK3ZvaWQgdHJhY2tJ
bnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBp
bnNwZWN0ZWRQYWdlKTsKK3ZvaWQgdW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBp
bnNwZWN0b3JQYWdlKTsKKworV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVu
c2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7Citib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2Vi
UHJvY2Vzc1Bvb2wmKTsKK2Jvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYpOworCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURl
YnVnZ2FibGUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VE
ZWJ1Z2dhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmVi
YmRmODdhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlBhZ2VEZWJ1Z2dhYmxlLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKKworI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworV2ViUGFnZURlYnVn
Z2FibGU6OldlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fcGFn
ZShwYWdlKQoreworfQorCitTdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6Om5hbWUoKSBjb25zdAor
eworICAgIGlmICghbV9uYW1lT3ZlcnJpZGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX25h
bWVPdmVycmlkZTsKKworICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLT50aXRsZSgpOwor
fQorCitTdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6OnVybCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3BhZ2UubWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5n
KCk7CisKKyAgICBTdHJpbmcgdXJsID0gbV9wYWdlLm1haW5GcmFtZSgpLT51cmwoKS5zdHJpbmco
KTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6YmxhbmtVUkwo
KS5zdHJpbmcoKTsKKworICAgIHJldHVybiB1cmw7Cit9CisKK2Jvb2wgV2ViUGFnZURlYnVnZ2Fi
bGU6Omhhc0xvY2FsRGVidWdnZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuaW5zcGVj
dG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKTsKK30KKwordm9pZCBXZWJQYWdlRGVi
dWdnYWJsZTo6Y29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwsIGJvb2wgaXNBdXRvbWF0
aWNDb25uZWN0aW9uLCBib29sIGltbWVkaWF0ZWx5UGF1c2UpCit7CisgICAgbV9wYWdlLmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoY2hhbm5lbCwgaXNBdXRvbWF0aWNDb25u
ZWN0aW9uLCBpbW1lZGlhdGVseVBhdXNlKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6
ZGlzY29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCit7CisgICAgbV9wYWdlLmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7Cit9CisKK3ZvaWQg
V2ViUGFnZURlYnVnZ2FibGU6OmRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQoreworICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxl
OjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Cit9CisKK3ZvaWQgV2ViUGFn
ZURlYnVnZ2FibGU6OnNldE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
bV9uYW1lT3ZlcnJpZGUgPSBuYW1lOworICAgIHVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGY4NDhkZTExNmEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURl
YnVnZ2FibGUuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rpb25UYXJnZXQu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3MgV2ViUGFnZURlYnVnZ2FibGUgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlRGVidWdnYWJs
ZSk7CitwdWJsaWM6CisgICAgV2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVByb3h5Jik7CisgICAg
fldlYlBhZ2VEZWJ1Z2dhYmxlKCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpSZW1vdGVD
b250cm9sbGFibGVUYXJnZXQ6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3Bl
Y3Rvcjo6UmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlOjpXZWJQYWdlOyB9CisKKyAgICBT
dHJpbmcgbmFtZSgpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyB1cmwoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGhhc0xvY2FsRGVidWdnZXIoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY29u
bmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0
aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBmaW5hbDsKKyAgICB2
b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKSBmaW5hbDsKKyAgICB2
b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5h
bDsKKyAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCkgZmluYWw7CisKKyAgICBjb25zdCBTdHJp
bmcmIG5hbWVPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZU92ZXJyaWRlOyB9CisgICAg
dm9pZCBzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgV2Vi
UGFnZVByb3h5JiBtX3BhZ2U7CisgICAgU3RyaW5nIG1fbmFtZU92ZXJyaWRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ09OVFJPTExBQkxF
X1RBUkdFVChXZWJLaXQ6OldlYlBhZ2VEZWJ1Z2dhYmxlLCBXZWJQYWdlKTsKKworI2VuZGlmIC8v
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFlZTI4YmY3MTYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUHJvdmlzaW9u
YWxQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2Vi
UGFnZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitzdGF0
aWMgU3RyaW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNp
b25hbFBhZ2UpCit7CisgICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0
SUQocHJvdmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKK30KKworV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkK
KyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRl
cjo6Y3JlYXRlKCkpCisgICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQoreworICAgIGF1dG8gdGFyZ2V0
QWdlbnQgPSBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldEFnZW50PihtX2Zyb250ZW5kUm91dGVy
LmdldCgpLCBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKworICAgIG1fdGFyZ2V0QWdlbnQg
PSB0YXJnZXRBZ2VudC5nZXQoKTsKKworICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdl
dEFnZW50KSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmluaXQoKQor
eworICAgIFN0cmluZyBwYWdlVGFyZ2V0SWQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rh
cmdldElEKG1fcGFnZS53ZWJQYWdlSUQoKSk7CisgICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBh
Z2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKTsKK30KKwor
dm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6cGFnZUNsb3NlZCgpCit7CisgICAgZGlz
Y29ubmVjdEFsbEZyb250ZW5kcygpOworCisgICAgbV9hZ2VudHMuZGlzY2FyZFZhbHVlcygpOwor
fQorCitib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNMb2NhbEZyb250ZW5kKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9mcm9udGVuZFJvdXRlci0+aGFzTG9jYWxGcm9udGVuZCgp
OworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCwgYm9vbCwgYm9vbCkK
K3sKKyAgICBib29sIGNvbm5lY3RpbmdGaXJzdEZyb250ZW5kID0gIW1fZnJvbnRlbmRSb3V0ZXIt
Pmhhc0Zyb250ZW5kcygpOworCisgICAgbV9mcm9udGVuZFJvdXRlci0+Y29ubmVjdEZyb250ZW5k
KGZyb250ZW5kQ2hhbm5lbCk7CisKKyAgICBpZiAoY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQpCisg
ICAgICAgIG1fYWdlbnRzLmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCgmbV9mcm9udGVuZFJv
dXRlci5nZXQoKSwgJm1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOworCisgICAgbV9wYWdlLmRp
ZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRD
b3VudCgpKTsKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIGlmIChoYXNMb2Nh
bEZyb250ZW5kKCkpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRp
ZENoYW5nZSgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2Nvbm5lY3RGcm9udGVuZChGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCkKK3sK
KyAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVs
KTsKKworICAgIGJvb2wgZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91
dGVyLT5oYXNGcm9udGVuZHMoKTsKKyAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkK
KyAgICAgICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVj
dFJlYXNvbjo6SW5zcGVjdG9yRGVzdHJveWVkKTsKKworICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNw
ZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7CisK
KyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RG
cm9udGVuZCkKKyAgICAgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hh
bmdlKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlz
Y29ubmVjdEFsbEZyb250ZW5kcygpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSBhIGxvY2FsIGlu
c3BlY3RvciBjbGllbnQuCisKKyAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5k
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOb3RpZnkgYWdlbnRzIGZpcnN0LCBzaW5j
ZSB0aGV5IG1heSBuZWVkIHRvIHVzZSBJbnNwZWN0b3JDbGllbnQuCisgICAgbV9hZ2VudHMud2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFy
Z2V0RGVzdHJveWVkKTsKKworICAgIC8vIERpc2Nvbm5lY3QgYW55IHJlbWFpbmluZyByZW1vdGUg
ZnJvbnRlbmRzLgorICAgIG1fZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMo
KTsKKworICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRl
bmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKKyAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKKyNl
bmRpZgorfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE1lc3Nh
Z2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPmRpc3BhdGNoKG1lc3NhZ2UpOworfQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJv
b2wgaW5kaWNhdGluZykKK3sKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBtX3BhZ2Uu
c2V0SW5kaWNhdGluZyhpbmRpY2F0aW5nKTsKKyNlbHNlCisgICAgaWYgKGluZGljYXRpbmcpCisg
ICAgICAgIG1fcGFnZS5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOworICAgIGVsc2UKKyAgICAg
ICAgbV9wYWdlLmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7CisjZW5kaWYKK30KKyNlbmRpZgor
Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5
cGUpCit7CisgICAgYWRkVGFyZ2V0KEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdl
LCB0YXJnZXRJZCwgdHlwZSkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit7CisgICAg
YXV0byBpdCA9IG1fdGFyZ2V0cy5maW5kKHRhcmdldElkKTsKKyAgICBpZiAoaXQgPT0gbV90YXJn
ZXRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVz
dHJveWVkKCppdC0+dmFsdWUpOworICAgIG1fdGFyZ2V0cy5yZW1vdmUoaXQpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQs
IG1lc3NhZ2UpOworfQorCitib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzaG91bGRQ
YXVzZUxvYWRpbmcoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdl
dFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHJl
dHVybiB0YXJnZXQtPmlzUGF1c2VkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXI6OnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVBy
b3h5JiBwcm92aXNpb25hbFBhZ2UsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQor
eworICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9u
YWxQYWdlKSk7CisgICAgQVNTRVJUKHRhcmdldCk7CisgICAgdGFyZ2V0LT5zZXRSZXN1bWVDYWxs
YmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJv
dmlzaW9uYWxQYWdlKQoreworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3Jl
YXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lv
bmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCit7CisgICAgZGVzdHJveUluc3BlY3RvclRh
cmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKK30KKwordm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFn
ZUlEKQoreworICAgIFN0cmluZyBvbGRJRCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFy
Z2V0SUQob2xkV2ViUGFnZUlEKTsKKyAgICBTdHJpbmcgbmV3SUQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7CisgICAgYXV0byBuZXdUYXJnZXQgPSBt
X3RhcmdldHMudGFrZShuZXdJRCk7CisgICAgQVNTRVJUKG5ld1RhcmdldCk7CisgICAgbmV3VGFy
Z2V0LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAgIG1fdGFyZ2V0QWdlbnQtPmRp
ZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBuZXdJRCk7CisKKyAgICAvLyBXZSd2ZSBk
aXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5kIHdpbGwgbm90IHJlY2VpdmUgYW55IG1l
c3NhZ2UgZnJvbSBpdCwgc28KKyAgICAvLyB3ZSBkZXN0cm95IGV2ZXJ5dGhpbmcgYnV0IHRoZSBu
ZXcgdGFyZ2V0IGhlcmUuCisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDI5
Mzc+IGRvIG5vdCBkZXN0cm95IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvbW1pdHRlZCBw
YWdlLgorICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQorICAgICAg
ICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7CisgICAgbV90YXJnZXRz
LmNsZWFyKCk7CisgICAgbV90YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50aWZpZXIoKSwgV1RG
TW92ZShuZXdUYXJnZXQpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJiB0YXJnZXQp
Cit7CisgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0Q3JlYXRlZCgqdGFyZ2V0KTsKKyAgICBtX3Rh
cmdldHMuc2V0KHRhcmdldC0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKHRhcmdldCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc4Y2FlZGYwYzBjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFy
Z2V0UHJveHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudFJlZ2lz
dHJ5Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBCYWNrZW5kRGlzcGF0
Y2hlcjsKK2NsYXNzIEZyb250ZW5kQ2hhbm5lbDsKK2NsYXNzIEZyb250ZW5kUm91dGVyOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcihXZWJQYWdlUHJveHkmKTsKKworICAgIHZvaWQgaW5pdCgpOworICAgIHZv
aWQgcGFnZUNsb3NlZCgpOworCisgICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7CisK
KyAgICB2b2lkIGNvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJv
b2wgaXNBdXRvbWF0aWNJbnNwZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9
IGZhbHNlKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbCYpOworICAgIHZvaWQgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOworCisgICAgdm9p
ZCBkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKwor
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29s
KTsKKyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICB2b2lkIGRl
c3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7CisgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIGJvb2wgc2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0
IFByb3Zpc2lvbmFsUGFnZVByb3h5JikgY29uc3Q7CisgICAgdm9pZCBzZXRDb250aW51ZUxvYWRp
bmdDYWxsYmFjayhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYsIFdURjo6RnVuY3Rpb248dm9p
ZCgpPiYmKTsKKworICAgIHZvaWQgZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFs
UGFnZVByb3h5Jik7CisgICAgdm9pZCB3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQ
cm92aXNpb25hbFBhZ2VQcm94eSYpOworICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdl
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgbmV3V2ViUGFnZUlEKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZFRhcmdldChzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYpOworCisgICAgV2ViUGFnZVByb3h5
JiBtX3BhZ2U7CisgICAgUmVmPEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRS
b3V0ZXI7CisgICAgUmVmPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7CisgICAgSW5zcGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOworICAgIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7CisgICAgSGFzaE1h
cDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5ZDUwZGMyODZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2ds
aWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKworI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90
ZUluc3BlY3RvclV0aWxzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxl
VHlwZS5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0
b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0
b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCwgdWludDY0X3Qg
Y29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKKyAgICAgICAgOiBtX3Byb3h5KFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX2luc3BlY3RvckNsaWVu
dChpbnNwZWN0b3JDbGllbnQpCisgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklE
KQorICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCisgICAgeworICAgICAgICBtX3Byb3h5
LT5zZXRDbGllbnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3RvclByb3h5KCkK
KyAgICB7CisgICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9w
cm94eS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisgICAgeworICAg
ICAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2PjogdGhpcyBzaG91bGQg
aW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgorICAgICAgICBS
ZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8gPSBBUEk6OkRlYnVnZ2FibGVJ
bmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKTsKKyAgICAgICAgZGVidWdn
YWJsZUluZm8tPnNldERlYnVnZ2FibGVUeXBlKEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6Oldl
YlBhZ2UpOworICAgICAgICBtX3Byb3h5LT5sb2FkKFdURk1vdmUoZGVidWdnYWJsZUluZm8pLCBt
X2luc3BlY3RvckNsaWVudC5iYWNrZW5kQ29tbWFuZHNVUkwoKSk7CisgICAgfQorCisgICAgdm9p
ZCBzaG93KCkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFRhcmdldE5hbWUoY29uc3QgQ1N0cmluZyYgbmFtZSkKKyAgICB7CisjaWYgUExBVEZP
Uk0oR1RLKQorICAgICAgICBtX3Byb3h5LT51cGRhdGVXaW5kb3dUaXRsZShuYW1lKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50
LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdl
KTsKKyAgICB9CisKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlv
bklELCBtX3RhcmdldElEKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmPFJlbW90ZVdlYklu
c3BlY3RvclByb3h5PiBtX3Byb3h5OworICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNw
ZWN0b3JDbGllbnQ7CisgICAgdWludDY0X3QgbV9jb25uZWN0aW9uSUQ7CisgICAgdWludDY0X3Qg
bV90YXJnZXRJRDsKK307CisKK2NvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVy
cyYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjptZXNzYWdlSGFuZGxlcnMoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnM+
IG1lc3NhZ2VIYW5kbGVycyA9IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyh7Cisg
ICAgeyAiRGlkQ2xvc2UiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVz
c2FnZUNhbGxiYWNrPiB7IHsgfSwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJp
YW50KiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpz
dGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAg
ICBjbGllbnQuY29ubmVjdGlvbkRpZENsb3NlKCk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7
ICJEaWRTZXR1cEluc3BlY3RvckNsaWVudCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25u
ZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIihheSkiLAorICAgICAgICBbXShTb2NrZXRDb25u
ZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAg
ICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50
Kj4odXNlckRhdGEpOworICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gYmFja2VuZENvbW1h
bmRzVmFyaWFudDsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihAYXkp
IiwgJmJhY2tlbmRDb21tYW5kc1ZhcmlhbnQub3V0UHRyKCkpOworICAgICAgICAgICAgY2xpZW50
LnNldEJhY2tlbmRDb21tYW5kcyhnX3ZhcmlhbnRfZ2V0X2J5dGVzdHJpbmcoYmFja2VuZENvbW1h
bmRzVmFyaWFudC5nZXQoKSkpOworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiU2V0VGFyZ2V0
TGlzdCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJh
Y2s+IHsgIih0YSh0c3NzYikpIiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJp
YW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYg
Y2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsK
KyAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklEOworICAgICAgICAgICAgR1VuaXF1ZU91
dFB0cjxHVmFyaWFudEl0ZXI+IGl0ZXI7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIodGEodHNzc2IpKSIsICZjb25uZWN0aW9uSUQsICZpdGVyLm91dFB0cigpKTsKKyAg
ICAgICAgICAgIHNpemVfdCB0YXJnZXRDb3VudCA9IGdfdmFyaWFudF9pdGVyX25fY2hpbGRyZW4o
aXRlci5nZXQoKSk7CisgICAgICAgICAgICBWZWN0b3I8UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpU
YXJnZXQ+IHRhcmdldExpc3Q7CisgICAgICAgICAgICB0YXJnZXRMaXN0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkodGFyZ2V0Q291bnQpOworICAgICAgICAgICAgZ3VpbnQ2NCB0YXJnZXRJRDsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHR5cGU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1l
OworICAgICAgICAgICAgY29uc3QgY2hhciogdXJsOworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFz
TG9jYWxEZWJ1Z2dlcjsKKyAgICAgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKGl0
ZXIuZ2V0KCksICIodCZzJnMmc2IpIiwgJnRhcmdldElELCAmdHlwZSwgJm5hbWUsICZ1cmwsICZo
YXNMb2NhbERlYnVnZ2VyKSkgeworICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHR5cGUs
ICJXZWIiKSB8fCAhZ19zdHJjbXAwKHR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICAg
ICAgICAgIHRhcmdldExpc3QudW5jaGVja2VkQXBwZW5kKHsgdGFyZ2V0SUQsIHR5cGUsIG5hbWUs
IHVybCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsaWVudC5zZXRUYXJnZXRMaXN0
KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAgICAgIH19CisgICAgfSwK
KyAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0
Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodHRzKSIsCisgICAgICAgIFtdKFNvY2tl
dENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsK
KyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JD
bGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRCwgdGFy
Z2V0SUQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworICAgICAgICAgICAgZ192
YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHR0JnMpIiwgJmNvbm5lY3Rpb25JRCwgJnRhcmdldElE
LCAmbWVzc2FnZSk7CisgICAgICAgICAgICBjbGllbnQuc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAgICB9fQorICAgIH0KKyAgICB9
KTsKKyAgICByZXR1cm4gbWVzc2FnZUhhbmRsZXJzOworfQorCitSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBw
b3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX2hvc3RBbmRQ
b3J0KFN0cmluZzo6ZnJvbVVURjgoYWRkcmVzcykgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0
KSkKKyAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0
R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKK3sKKyAgICBHUmVmUHRyPEdTb2NrZXRDbGllbnQ+
IHNvY2tldENsaWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfbmV3KCkpOworICAgIGdf
c29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29ja2V0Q2xpZW50LmdldCgpLCBt
X2hvc3RBbmRQb3J0LnV0ZjgoKS5kYXRhKCksIDAsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAg
ICAgIFtdKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
ICAgICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVm
KGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKEdfU09DS0VUX0NMSUVOVChv
YmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdfZXJy
b3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1dG8qIGNsaWVudCA9IHN0
YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAg
IGlmIChjb25uZWN0aW9uKQorICAgICAgICAgICAgICAgIGNsaWVudC0+c2V0dXBDb25uZWN0aW9u
KFNvY2tldENvbm5lY3Rpb246OmNyZWF0ZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBtZXNzYWdlSGFu
ZGxlcnMoKSwgY2xpZW50KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBX
VEZMb2dBbHdheXMoIlJlbW90ZUluc3BlY3RvckNsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byBp
bnNwZWN0b3Igc2VydmVyOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBj
bGllbnQtPm1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqY2xpZW50KTsKKyAgICAgICAgICAg
IH0KKyAgICB9LCB0aGlzKTsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5z
cGVjdG9yQ2xpZW50KCkKK3sKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxl
LmdldCgpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldHVwQ29ubmVjdGlv
bihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQoreworICAgIG1fc29ja2V0Q29u
bmVjdGlvbiA9IFdURk1vdmUoY29ubmVjdGlvbik7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5z
ZW5kTWVzc2FnZSgiU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBnX3ZhcmlhbnRfbmV3KCIoQGF5KSIs
IGdfdmFyaWFudF9uZXdfYnl0ZXN0cmluZyhJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2go
KS5kYXRhKCkpKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5k
Q29tbWFuZHMoY29uc3QgY2hhciogYmFja2VuZENvbW1hbmRzKQoreworICAgIGlmICghYmFja2Vu
ZENvbW1hbmRzIHx8ICFiYWNrZW5kQ29tbWFuZHNbMF0pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29t
bWFuZHNVUkwgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShiYWNrZW5kQ29tbWFuZHMsIHN0
cmxlbihiYWNrZW5kQ29tbWFuZHMpLCBiYXNlNjREYXRhKTsKKyAgICBtX2JhY2tlbmRDb21tYW5k
c1VSTCA9ICJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisK
K3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQoreworICAg
IG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKKyAg
ICBtX3NvY2tldENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlv
bkNsb3NlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCit7CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFpcihjb25u
ZWN0aW9uSUQsIHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SURdIHsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0aGlzLCBjb25u
ZWN0aW9uSUQsIHRhcmdldElEKTsKKyAgICB9KTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0Vu
dHJ5KSB7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3coKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2Uo
IlNldHVwIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsK
KyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9u
SUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9z
b2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiLCBnX3Zh
cmlhbnRfbmV3KCIodHRzKSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UudXRmOCgp
LmRhdGEoKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJv
bnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKK3sKKyAgICBB
U1NFUlQobV9pbnNwZWN0b3JQcm94eU1hcC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0
aW9uSUQsIHRhcmdldElEKSkpOworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2Uo
IkZyb250ZW5kRGlkQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0
YXJnZXRJRCkpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OnNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYm
IHRhcmdldExpc3QpCit7CisgICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0cyB0byByZW1vdmUgdGhl
bS4KKyAgICBWZWN0b3I8dWludDY0X3QsIDQ+IHRhcmdldHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1
dG8mIGNvbm5lY3Rpb25UYXJnZXRQYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsK
KyAgICAgICAgaWYgKGNvbm5lY3Rpb25UYXJnZXRQYWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0TGlzdCkgeworICAgICAgICAgICAg
aWYgKHRhcmdldC5pZCA9PSBjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNvbmQpIHsKKyAgICAgICAg
ICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLmdldChjb25uZWN0aW9uVGFyZ2V0UGFpciktPnNl
dFRhcmdldE5hbWUodGFyZ2V0Lm5hbWUpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChjb25uZWN0
aW9uVGFyZ2V0UGFpci5zZWNvbmQpOworICAgIH0KKyAgICBmb3IgKGF1dG8gdGFyZ2V0SUQgOiB0
YXJnZXRzVG9SZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6
bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQo
Y29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdl
dExpc3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
bmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdl
dElELCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGF1dG8gcHJveHkgPSBtX2luc3BlY3Rv
clByb3h5TWFwLmdldChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Cisg
ICAgQVNTRVJUKHByb3h5KTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm47CisgICAg
cHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9n
bGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmFkZWUwMmNlNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgK
QEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVjdGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBf
R0NhbmNlbGxhYmxlIEdDYW5jZWxsYWJsZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFJlbW90ZUluc3BlY3RvckNsaWVudDsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OworY2xh
c3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2Vy
dmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGll
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVj
dG9yQ2xpZW50JikgPSAwOworfTsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3Rv
ckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0
b3JPYnNlcnZlciYpOworICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKKworICAgIHN0cnVj
dCBUYXJnZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdWludDY0X3QgaWQ7CisgICAgICAgIENT
dHJpbmcgdHlwZTsKKyAgICAgICAgQ1N0cmluZyBuYW1lOworICAgICAgICBDU3RyaW5nIHVybDsK
KyAgICB9OworCisgICAgY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+JiB0
YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9CisgICAgY29uc3QgU3RyaW5nJiBo
b3N0QW5kUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0KKyAgICBjb25zdCBT
dHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1h
bmRzVVJMOyB9CisKKyAgICB2b2lkIGluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50
NjRfdCB0YXJnZXRJRCk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBj
b25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGNsb3NlRnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0
SUQpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNz
YWdlSGFuZGxlcnMmIG1lc3NhZ2VIYW5kbGVycygpOworICAgIHZvaWQgc2V0dXBDb25uZWN0aW9u
KFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25EaWRDbG9zZSgp
OworCisgICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOworICAgIHZvaWQg
c2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYpOwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWlu
dDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqKTsKKworICAgIFN0cmluZyBtX2hvc3RBbmRQb3J0
OworICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKKyAgICBSZW1vdGVJbnNwZWN0b3JP
YnNlcnZlciYgbV9vYnNlcnZlcjsKKyAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2Nr
ZXRDb25uZWN0aW9uOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7CisgICAgSGFz
aE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZUluc3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclBy
b3h5Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYklu
c3BlY3RvclByb3h5Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjU5OWM0NDY1NzY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkluc3BlY3RvclByb3h5OworCitjbGFzcyBXZWJJbnNwZWN0
b3JQcm94eUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yUHJveHlD
bGllbnQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coV2ViSW5zcGVj
dG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKFdlYkluc3BlY3RvclBy
b3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5zcGVjdG9yUHJv
eHkmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2ViSW5zcGVj
dG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhdHRh
Y2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRldGFjaChXZWJJ
bnNwZWN0b3JQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRI
ZWlnaHQoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBoZWlnaHQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2ln
bmVkIHdpZHRoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaEF2YWlsYWJp
bGl0eShXZWJJbnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmZGUzNDliYjcxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94
eUd0ay5jcHAKQEAgLTAsMCArMSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR3VzdGF2
byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpbmNsdWRlICJBUElO
YXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1ZGUg
IldLQXJyYXkuaCIKKyNpbmNsdWRlICJXS0NvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIldL
TXV0YWJsZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCisj
aW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR3RrVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFz
ZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQgaW5zcGVj
dG9yVmlld0Rlc3Ryb3llZChHdGtXaWRnZXQqLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBX
ZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0
b3JQcm94eSo+KHVzZXJEYXRhKTsKKworICAgIC8vIEluZm9ybSBXZWJQcm9jZXNzIGFib3V0IHdl
Ymluc3BlY3RvciBjbG9zdXJlLiBOb3QgZG9pbmcgc28sCisgICAgLy8gcmVzdWx0cyBpbiBmYWls
dXJlIG9mIHN1YnNlcXVlbnQgaW52b2NhdGlvbiBvZiB3ZWJpbnNwZWN0b3IuCisgICAgaW5zcGVj
dG9yUHJveHktPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldENsaWVu
dChzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+JiYgY2xpZW50KQorewor
ICAgIG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
aW5zcGVjdG9yV2luZG93KTsKKyAgICB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShX
RUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhtX2luc3BlY3RvcldpbmRvdyksICFtX2luc3BlY3RlZFVS
TFN0cmluZy5pc0VtcHR5KCkgPyBtX2luc3BlY3RlZFVSTFN0cmluZy51dGY4KCkuZGF0YSgpIDog
bnVsbHB0cik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXhjZWVkZWREYXRhYmFz
ZVF1b3RhKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tTdHJp
bmdSZWYsIFdLU3RyaW5nUmVmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9u
ZywgdW5zaWduZWQgbG9uZyBsb25nIGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1bnNpZ25lZCBsb25n
IGxvbmcgZXhwZWN0ZWRVc2FnZSwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4
PHVuc2lnbmVkIGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudERhdGFiYXNlVXNhZ2Ug
KiAxLjI1KTsKK30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5z
cGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworICAg
IHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdh
dGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJS
ZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgQVBJ
OjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5z
b3VyY2VGcmFtZSgpOworICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFp
bkZyYW1lKCkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5z
cGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVu
dEluZm8pOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7CisKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVx
dWVzdCgpOworCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmls
ZS4KKyAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2Uo
cmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxz
ZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3Rl
bmVyUmVmKS0+aWdub3JlKCk7CisKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBp
bnNwZWN0ZWQgcGFnZS4KKyAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5s
b2FkUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Q29udGV4
dE1lbnVGcm9tUHJvcG9zZWRNZW51KFdLUGFnZVJlZiBwYWdlUmVmLCBXS0FycmF5UmVmIHByb3Bv
c2VkTWVudVJlZiwgV0tBcnJheVJlZiogbmV3TWVudVJlZiwgV0tIaXRUZXN0UmVzdWx0UmVmLCBX
S1R5cGVSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIFdLTXV0YWJsZUFycmF5UmVmIG1lbnVJdGVt
cyA9IFdLTXV0YWJsZUFycmF5Q3JlYXRlKCk7CisKKyAgICBzaXplX3QgY291bnQgPSBXS0FycmF5
R2V0U2l6ZShwcm9wb3NlZE1lbnVSZWYpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBXS0NvbnRleHRNZW51SXRlbVJlZiBjb250ZXh0TWVudUl0ZW0g
PSBzdGF0aWNfY2FzdDxXS0NvbnRleHRNZW51SXRlbVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4
KHByb3Bvc2VkTWVudVJlZiwgaSkpOworICAgICAgICBzd2l0Y2ggKFdLQ29udGV4dE1lbnVJdGVt
R2V0VGFnKGNvbnRleHRNZW51SXRlbSkpIHsKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRl
bVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRl
bVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRl
bVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRl
bVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBXS0FycmF5QXBwZW5kSXRlbShtZW51SXRlbXMsIGNvbnRleHRNZW51
SXRlbSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgICpuZXdN
ZW51UmVmID0gbWVudUl0ZW1zOworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKGluc3BlY3RlZFBh
Z2UoKSk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclZpZXcpOworCisgICAgYXV0byBwcmVmZXJl
bmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJL
aXQyLiIpOworI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZlbG9w
ZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQg
Y2hhbmdpbmcgc2V0dGluZ3MuCisgICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0Vu
YWJsZWQodHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3Rl
bUNvbnNvbGVFbmFibGVkKHRydWUpOworI2VuZGlmCisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFT
Y3JpcHRSdW50aW1lRmxhZ3MoeworICAgIH0pOworICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFn
ZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVj
dGVkUGFnZSgpKSk7CisKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29u
ZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQ
b29sKCZpbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0aW9uTGV2ZWwoKSkpOworICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7CisgICAgcGFn
ZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOworICAgIG1faW5z
cGVjdG9yVmlldyA9IEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2VDcmVhdGUoKnBhZ2VDb25m
aWd1cmF0aW9uLnB0cigpKSk7CisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVD
VChtX2luc3BlY3RvclZpZXcpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9y
VmlldykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JWaWV3LCAiZGVzdHJveSIs
IEdfQ0FMTEJBQ0soaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworCisgICAgV0tQYWdl
VUlDbGllbnRWMiB1aUNsaWVudCA9IHsKKyAgICAgICAgeyAyLCB0aGlzIH0sCisgICAgICAgIG51
bGxwdHIsIC8vIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBu
dWxscHRyLCAvLyBzaG93UGFnZQorICAgICAgICBudWxscHRyLCAvLyBjbG9zZVBhZ2UKKyAgICAg
ICAgbnVsbHB0ciwgLy8gdGFrZUZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIGZvY3VzCisgICAg
ICAgIG51bGxwdHIsIC8vIHVuZm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlw
dEFsZXJ0CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRDb25maXJtCisgICAgICAg
IG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRQcm9tcHQKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0
U3RhdHVzVGV4dAorICAgICAgICBudWxscHRyLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudF9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIG1pc3NpbmdQbHVnaW5C
dXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkTm90SGFuZGxlS2V5RXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkTm90SGFuZGxlV2hl
ZWxFdmVudAorICAgICAgICBudWxscHRyLCAvLyBhcmVUb29sYmFyc1Zpc2libGUKKyAgICAgICAg
bnVsbHB0ciwgLy8gc2V0VG9vbGJhcnNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzTWVu
dUJhclZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0TWVudUJhclZpc2libGUKKyAgICAg
ICAgbnVsbHB0ciwgLy8gaXNTdGF0dXNCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNl
dFN0YXR1c0JhclZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNSZXNpemFibGUKKyAgICAg
ICAgbnVsbHB0ciwgLy8gc2V0UmVzaXphYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGdldFdpbmRv
d0ZyYW1lLAorICAgICAgICBudWxscHRyLCAvLyBzZXRXaW5kb3dGcmFtZSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZERyYXcKKyAgICAgICAgbnVsbHB0ciwgLy8gcGFnZURpZFNjcm9sbAorICAgICAgICBleGNl
ZWRlZERhdGFiYXNlUXVvdGEsCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bk9wZW5QYW5lbCwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdAorICAgICAgICBudWxscHRyLCAvLyBoZWFkZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZm9vdGVySGVpZ2h0CisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdIZWFkZXIKKyAgICAgICAg
bnVsbHB0ciwgLy8gZHJhd0Zvb3RlcgorICAgICAgICBudWxscHRyLCAvLyBwcmludEZyYW1lCisg
ICAgICAgIG51bGxwdHIsIC8vIHJ1bk1vZGFsCisgICAgICAgIG51bGxwdHIsIC8vIHVudXNlZAor
ICAgICAgICBudWxscHRyLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCisgICAg
ICAgIG51bGxwdHIsIC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQKKyAgICAgICAgbnVsbHB0
ciwgLy8gY3JlYXRlUGFnZQorICAgICAgICBudWxscHRyLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxl
bWVudAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdAorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRv
bkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMQorICAgICAgICBudWxscHRyLCAvLyBzaG93
Q29sb3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbG9yUGlja2VyCisgICAgICAg
IG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZAorICAgIH07CisKKyAg
ICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKKyAgICAgICAg
eyAwLCB0aGlzIH0sCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCisg
ICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQorICAg
ICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCisgICAgICAgIG51bGxw
dHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAg
ICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxw
dHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNo
TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgorICAgICAg
ICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQorICAgICAgICBu
dWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlk
U2FtZURvY3VtZW50TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9n
cmVzc0RpZENoYW5nZQorICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZQorICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCisgICAgICAgIG51bGxw
dHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKKworICAgICAgICBudWxscHRyLCAvLyBkaWRC
ZWdpbk5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0
aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQor
ICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90Cisg
ICAgfTsKKworICAgIFdLUGFnZUNvbnRleHRNZW51Q2xpZW50VjMgY29udGV4dE1lbnVDbGllbnQg
PSB7CisgICAgICAgIHsgMywgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBnZXRDb250ZXh0
TWVudUZyb21Qcm9wb3NlZE1lbnVfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxs
cHRyLCAvLyBjdXN0b21Db250ZXh0TWVudUl0ZW1TZWxlY3RlZAorICAgICAgICBudWxscHRyLCAv
LyBjb250ZXh0TWVudURpc21pc3NlZAorICAgICAgICBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3Nl
ZE1lbnUsCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dDb250ZXh0TWVudQorICAgICAgICBudWxs
cHRyLCAvLyBoaWRlQ29udGV4dE1lbnUKKyAgICB9OworCisgICAgV2ViUGFnZVByb3h5KiBpbnNw
ZWN0b3JQYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNF
KG1faW5zcGVjdG9yVmlldykpOworICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsKKworICAgIFdL
UGFnZVNldFBhZ2VVSUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJnVpQ2xpZW50LmJhc2Up
OworICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2Up
LCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKyAgICBXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVD
bGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZjb250ZXh0TWVudUNsaWVudC5iYXNlKTsKKwor
ICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgbV9j
bGllbnQtPm9wZW5XaW5kb3coKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRn
ZXQqIGluc3BlY3RlZFZpZXdQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChpbnNwZWN0
ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7CisgICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09uc2Ny
ZWVuVG9wbGV2ZWxXaW5kb3coaW5zcGVjdGVkVmlld1BhcmVudCkpCisgICAgICAgIGluc3BlY3Rl
ZFZpZXdQYXJlbnQgPSBudWxscHRyOworCisgICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7
CisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoaW5zcGVj
dGVkVmlld1BhcmVudCA/IEdUS19XSU5ET1coaW5zcGVjdGVkVmlld1BhcmVudCkgOiBudWxscHRy
KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93
KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3
KTsKKworICAgIGlmICghbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICB1
cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9p
bnRlcihHX09CSkVDVChtX2luc3BlY3RvcldpbmRvdyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmbV9pbnNwZWN0b3JXaW5kb3cpKTsKKyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRP
VyhtX2luc3BlY3RvcldpbmRvdykpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JW
aWV3KSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2lu
c3BlY3RvclZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3BlY3RvclZpZXdEZXN0cm95
ZWQpLCB0aGlzKTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZSgqdGhpcyk7CisK
KyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBudWxscHRy
OworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZv
ckNyYXNoKCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlk
YXRlKCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVJlc2V0U3RhdGUoKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nVG9Gcm9udCgpCit7CisgICAgaWYgKG1faXNPcGVuaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmJyaW5nVG9Gcm9udCgqdGhpcykpCisg
ICAgICAgIHJldHVybjsKKworICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRf
dG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNj
cmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCisgICAgICAgIGd0a193aW5kb3dfcHJlc2VudChH
VEtfV0lORE9XKHBhcmVudCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgR3Rr
V2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcp
OworICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50
KSkKKyAgICAgICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIGd0a193aW5kb3dfaXNfYWN0aXZlKEdU
S19XSU5ET1cocGFyZW50KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwp
Cit7CisgICAgbV9pbnNwZWN0ZWRVUkxTdHJpbmcgPSB1cmw7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZCgqdGhpcywgdXJsKTsKKworICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0
bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNh
dGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQor
eworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1Vz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sIik7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8v
L29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sIik7Cit9CisKK1N0
cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCit7CisgICAgcmV0dXJu
IFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS8i
KTsKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9j
YWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1
NTM2PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcg
dGFyZ2V0LgorICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3Vu
c2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgp
Cit7CisgICAgcmV0dXJuIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF9oZWlnaHQoaW5zcGVjdGVk
UGFnZSgpLT52aWV3V2lkZ2V0KCkpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgcmV0dXJuIGd0a193aWRnZXRf
Z2V0X2FsbG9jYXRlZF93aWR0aChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBHUmVmUHRy
PEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldzsKKyAgICBpZiAobV9p
bnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRB
SU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CisgICAgICAgIGd0a193
aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gMDsKKyAgICB9CisKKyAgICAvLyBTZXQgYSBkZWZhdWx0IHNpemVzIGJhc2VkIG9uIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRl
ZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmlt
dW1BdHRhY2hlZFdpZHRoID0gNzUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVt
QXR0YWNoZWRIZWlnaHQgPSAyNTA7CisKKyAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRh
Y2htZW50U2lkZTo6Qm90dG9tKSB7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhl
aWdodCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKKyAgICAgICAg
cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdo
dCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0
aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKSAqIDMgLyA0OworICAgICAgICBwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgs
IHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOwor
ICAgIH0KKworICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YXR0YWNoKCp0aGlzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRXZWJJbnNwZWN0b3IoV0VC
S0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCBtX2luc3Bl
Y3RvclZpZXcsIG1fYXR0YWNobWVudFNpZGUpOworICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3Bl
Y3RvclZpZXcpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgp
Cit7CisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5pbmdQcm9jZXNzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9p
bnNwZWN0b3JWaWV3OworICAgIGlmICghbV9jbGllbnQgfHwgIW1fY2xpZW50LT5kZXRhY2goKnRo
aXMpKSB7CisgICAgICAgIC8vIERldGFjaCBpcyBjYWxsZWQgd2hlbiBtX2lzQXR0YWNoZWQgaXMg
dHJ1ZSwgYnV0IGl0IGNvdWxkIGNhbGxlZCBiZWZvcmUKKyAgICAgICAgLy8gdGhlIGluc3BlY3Rv
ciBpcyBvcGVuZWQgaWYgdGhlIGluc3BlY3RvciBpcyBzaG93bi9jbG9zZWQgcXVpY2tseS4gU28s
CisgICAgICAgIC8vIHdlIG1pZ2h0IG5vdCBoYXZlIGEgcGFyZW50IHlldC4KKyAgICAgICAgaWYg
KEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50KG1faW5zcGVjdG9yVmll
dykpCisgICAgICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHBhcmVu
dCksIG1faW5zcGVjdG9yVmlldyk7CisgICAgfQorCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdl
IGFyZSBub3QgdmlzaWJsZS4gVGhpcyBtZWFucyB0aGUgaW5zcGVjdG9yIHdhcyBjbG9zZWQgd2hp
bGUgYXR0YWNoZWQKKyAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW5kIHNob3cgdGhl
IGluc3BlY3RvciB3aW5kb3cuCisgICAgaWYgKCFtX2lzVmlzaWJsZSkgeworICAgICAgICAvLyBU
aGUgaW5zcGVjdG9yIHZpZXcgd2lsbCBiZSBkZXN0cm95ZWQsIGJ1dCB3ZSBkb24ndCBuZWVkIHRv
IG5vdGlmeSB0aGUgd2ViIHByb2Nlc3MgdG8gY2xvc2UgdGhlCisgICAgICAgIC8vIGluc3BlY3Rv
ciBpbiB0aGlzIGNhc2UsIHNpbmNlIGl0J3MgYWxyZWFkeSBjbG9zZWQuCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2luc3BlY3RvclZpZXcsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKyAgICAgICAg
bV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG9wZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KCp0aGlzLCBoZWlnaHQpOworICAgIHdlYmtpdFdlYlZp
ZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVk
UGFnZSgpLT52aWV3V2lkZ2V0KCkpLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7Cisg
ICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFjaGVkV2lkdGgoKnRoaXMsIHdpZHRo
KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJf
VklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgd2lkdGgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitzdGF0aWMgdm9pZCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2soR09i
amVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKKyAgICBpZiAo
IWdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIsIG51
bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8
V2ViUGFnZVByb3h5Kj4odXNlckRhdGEpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2Zp
bGVfZ2V0X3BhdGgoZmlsZSkpOworICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSwgcGFnZS0+d2ViUGFnZUlEKCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZm9yY2VTYXZlRGlhbG9n
KTsKKworICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9p
bnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZl
bFdpbmRvdyhwYXJlbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a0ZpbGVD
aG9vc2VyTmF0aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9uYXRpdmVf
bmV3KCJTYXZlIEZpbGUiLAorICAgICAgICBHVEtfV0lORE9XKHBhcmVudCksIEdUS19GSUxFX0NI
T09TRVJfQUNUSU9OX1NBVkUsICJTYXZlIiwgIkNhbmNlbCIpKTsKKworICAgIEd0a0ZpbGVDaG9v
c2VyKiBjaG9vc2VyID0gR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cuZ2V0KCkpOworICAgIGd0a19m
aWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25maXJtYXRpb24oY2hvb3NlciwgVFJVRSk7
CisKKyAgICAvLyBTb21lIGluc3BlY3RvciB2aWV3cyAoQXVkaXRzIGZvciBpbnN0YW5jZSkgdXNl
IGEgY3VzdG9tIFVSSSBzY2hlbWUsIHN1Y2gKKyAgICAvLyBhcyB3ZWItaW5zcGVjdG9yLiBTbyB3
ZSBjYW4ndCByZWx5IG9uIHRoZSBVUkwgYmVpbmcgYSB2YWxpZCBmaWxlOi8vLyBVUkwKKyAgICAv
LyB1bmZvcnR1bmF0ZWx5LgorICAgIFVSTCB1cmwoVVJMKCksIHN1Z2dlc3RlZFVSTCk7CisgICAg
Ly8gU3RyaXAgbGVhZGluZyAvIGNoYXJhY3Rlci4KKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9j
dXJyZW50X25hbWUoY2hvb3NlciwgdXJsLnBhdGgoKS5zdWJzdHJpbmcoMSkudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19OQVRJVkVfRElBTE9HKGRp
YWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOworICAgIENTdHJpbmcgZGF0YVN0cmluZzsKKyAg
ICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50
LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgfSBlbHNlCisgICAgICAg
IGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKKworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAh
ZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRh
KCk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFT
dHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBm
aWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOworICAg
IEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAg
IGdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2FzeW5jKGZpbGUuZ2V0KCksIGRhdGEsIGRhdGFMZW5n
dGgsIG51bGxwdHIsIGZhbHNlLAorICAgICAgICBHX0ZJTEVfQ1JFQVRFX1JFUExBQ0VfREVTVElO
QVRJT04sIG51bGxwdHIsIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjaywgbV9pbnNwZWN0b3JQ
YWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQo
Ym9vbCBhdmFpbGFibGUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+
ZGlkQ2hhbmdlQXR0YWNoQXZhaWxhYmlsaXR5KCp0aGlzLCBhdmFpbGFibGUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ5MGYwZTZmMzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3Rv
cldpbmRvdy5jcHAKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dEluc3BlY3RvcldpbmRvdy5oIgorCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNp
bmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JX
aW5kb3cgeworICAgIEd0a1dpbmRvdyBwYXJlbnQ7CisKKyAgICBHdGtXaWRnZXQqIGhlYWRlckJh
cjsKK307CisKK3N0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MgeworICAgIEd0a1dp
bmRvd0NsYXNzIHBhcmVudDsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0SW5zcGVjdG9yV2lu
ZG93LCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvdywgR1RLX1RZUEVfV0lORE9XKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19jbGFzc19pbml0KFdlYktpdEluc3BlY3Rvcldp
bmRvd0NsYXNzKikKK3sKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3df
aW5pdChXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdykKK3sKKyAgICB3aW5kb3ctPmhlYWRl
ckJhciA9IGd0a19oZWFkZXJfYmFyX25ldygpOworICAgIGd0a19oZWFkZXJfYmFyX3NldF90aXRs
ZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIF8oIldlYiBJbnNwZWN0b3IiKSk7
CisgICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uKEdUS19IRUFERVJfQkFS
KHdpbmRvdy0+aGVhZGVyQmFyKSwgVFJVRSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGViYXIo
R1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ctPmhlYWRlckJhcik7CisgICAgZ3RrX3dpZGdldF9z
aG93KHdpbmRvdy0+aGVhZGVyQmFyKTsKK30KKworR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JX
aW5kb3dOZXcoR3RrV2luZG93KiBwYXJlbnQpCit7CisgICAgcmV0dXJuIEdUS19XSURHRVQoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRP
V19UT1BMRVZFTCwgInRyYW5zaWVudC1mb3IiLCBwYXJlbnQsCisgICAgICAgICJkZWZhdWx0LXdp
ZHRoIiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVp
Z2h0IiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsK
K30KKwordm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0
b3JXaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciogc3VidGl0bGUpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyh3aW5kb3cpKTsKKworICAgIGd0a19o
ZWFkZXJfYmFyX3NldF9zdWJ0aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciks
IHN1YnRpdGxlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYmRjMjhkMTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93
LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XICAgICAgICAg
ICAgKHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9J
TlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIFdlYktpdEluc3BlY3Rvcldp
bmRvdykpCisjZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9X
SU5ET1cpKQorI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1Jf
V0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19J
TlNQRUNUT1JfV0lORE9XX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQorI2RlZmluZSBXRUJLSVRfSU5T
UEVDVE9SX1dJTkRPV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5k
b3dDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgV2ViS2l0
SW5zcGVjdG9yV2luZG93OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0Ns
YXNzIFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzOworCitHVHlwZSB3ZWJraXRfaW5zcGVjdG9y
X3dpbmRvd19nZXRfdHlwZSh2b2lkKTsKKworR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5k
b3dOZXcoR3RrV2luZG93KiBwYXJlbnQpOwordm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRT
dWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cqLCBjb25zdCBjaGFyKiBzdWJ0aXRsZSk7CisK
K0dfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTk4MzkxYzQyMGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxp
Z2h0Vmlldy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKworI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworc3RydWN0IEhpZ2hsaWdodDsKK30KKworQGludGVyZmFjZSBXS0luc3BlY3RvckhpZ2hsaWdo
dFZpZXcgOiBVSVZpZXcgeworICAgIE5TTXV0YWJsZUFycmF5ICpfbGF5ZXJzOyAvLyBDQVNoYXBl
TGF5ZXJzLgorfQorLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGln
aGxpZ2h0OworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA2NWYwYzAzZTMzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcubW0KQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIgor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSW5zcGVjdG9yT3ZlcmxheS5oPgorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JIaWdo
bGlnaHRWaWV3CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBfbGF5ZXJzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzZWxm
IF9yZW1vdmVBbGxMYXllcnNdOworICAgIFtfbGF5ZXJzIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClfcmVtb3ZlQWxsTGF5ZXJzCit7CisgICAgZm9yIChDQVNo
YXBlTGF5ZXIgKmxheWVyIGluIF9sYXllcnMpCisgICAgICAgIFtsYXllciByZW1vdmVGcm9tU3Vw
ZXJsYXllcl07CisgICAgW19sYXllcnMgcmVtb3ZlQWxsT2JqZWN0c107Cit9CisKKy0gKHZvaWQp
X2NyZWF0ZUxheWVyczooTlNVSW50ZWdlciludW1MYXllcnMKK3sKKyAgICBpZiAoW19sYXllcnMg
Y291bnRdID09IG51bUxheWVycykKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3JlbW92
ZUFsbExheWVyc107CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7
ICsraSkgeworICAgICAgICBDQVNoYXBlTGF5ZXIgKmxheWVyID0gW1tDQVNoYXBlTGF5ZXIgYWxs
b2NdIGluaXRdOworICAgICAgICBbX2xheWVycyBhZGRPYmplY3Q6bGF5ZXJdOworICAgICAgICBb
c2VsZi5sYXllciBhZGRTdWJsYXllcjpsYXllcl07CisgICAgICAgIFtsYXllciByZWxlYXNlXTsK
KyAgICB9Cit9CisKK3N0YXRpYyBib29sIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9p
bnRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHAxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwMiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgZDEsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIGQyLCBXZWJDb3JlOjpGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pIAoreworICAg
IC8vIERvIHRoZSBsaW5lcyBpbnRlcnNlY3Q/CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZW1w
b3JhcnlJbnRlcnNlY3Rpb25Qb2ludDsKKyAgICBpZiAoIWZpbmRJbnRlcnNlY3Rpb24ocDEsIHAy
LCBkMSwgZDIsIHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gSXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSB0d28gcG9pbnRz
IG9uIHRoZSBsaW5lPworICAgIGlmIChwMS54KCkgPj0gcDIueCgpKSB7CisgICAgICAgIGlmICh0
ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPiBwMS54KCkgfHwgdGVtcG9yYXJ5SW50ZXJz
ZWN0aW9uUG9pbnQueCgpIDwgcDIueCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPiBw
Mi54KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpIDwgcDEueCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocDEueSgpID49IHAyLnkoKSkgewor
ICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpID4gcDEueSgpIHx8IHRl
bXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA8IHAyLnkoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9u
UG9pbnQueSgpID4gcDIueSgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA8IHAx
LnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnRlcnNlY3Rp
b24gPSB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8gVGhpcyBxdWFkIGludGVyc2VjdGlvbiB3b3JrcyBiZWNhdXNlIHRoZSB0d28gcXVhZHMgYXJl
IGtub3duIHRvIGJlIGF0IHRoZSBzYW1lCisvLyByb3RhdGlvbiBhbmQgY2xvY2t3aXNlLW5lc3Mu
CitzdGF0aWMgV2ViQ29yZTo6RmxvYXRRdWFkIHF1YWRJbnRlcnNlY3Rpb24oV2ViQ29yZTo6Rmxv
YXRRdWFkIGJvdW5kcywgV2ViQ29yZTo6RmxvYXRRdWFkIHRvQ2xhbXApCit7CisgICAgLy8gUmVz
dWx0aW5nIHBvaW50cy4KKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHAxLCBwMiwgcDMsIHA0Owor
ICAgIGJvb2wgY29udGFpbnNQb2ludDEgPSBmYWxzZTsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQy
ID0gZmFsc2U7CisgICAgYm9vbCBjb250YWluc1BvaW50MyA9IGZhbHNlOworICAgIGJvb2wgY29u
dGFpbnNQb2ludDQgPSBmYWxzZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50MSA9IGZhbHNl
OworICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQyID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNl
Y3RGb3JQb2ludDMgPSBmYWxzZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50NCA9IGZhbHNl
OworCisgICAgLy8gVG9wIC8gYm90dG9tIHZlcnRpY2FsIGNsYW1waW5nLgorICAgIGlmIChib3Vu
ZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAxKCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQx
ID0gdHJ1ZTsKKyAgICAgICAgcDEgPSB0b0NsYW1wLnAxKCk7CisgICAgfSBlbHNlIGlmICghKGlu
dGVyc2VjdEZvclBvaW50MSA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJv
dW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9DbGFtcC5wMSgpLCB0b0NsYW1wLnA0KCksIHAxKSkp
CisgICAgICAgIHAxID0gdG9DbGFtcC5wMSgpOworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1Bv
aW50KHRvQ2xhbXAucDIoKSkpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVlOworICAg
ICAgICBwMiA9IHRvQ2xhbXAucDIoKTsKKyAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9p
bnQyID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJv
dW5kcy5wMigpLCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwgcDIpKSkKKyAgICAgICAgcDIg
PSB0b0NsYW1wLnAyKCk7CisKKyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5w
MygpKSkgeworICAgICAgICBjb250YWluc1BvaW50MyA9IHRydWU7CisgICAgICAgIHAzID0gdG9D
bGFtcC5wMygpOworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDMgPSBmaW5kSW50
ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRv
Q2xhbXAucDIoKSwgdG9DbGFtcC5wMygpLCBwMykpKQorICAgICAgICBwMyA9IHRvQ2xhbXAucDMo
KTsKKworICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnA0KCkpKSB7CisgICAg
ICAgIGNvbnRhaW5zUG9pbnQ0ID0gdHJ1ZTsKKyAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7Cisg
ICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50NCA9IGZpbmRJbnRlcnNlY3Rpb25Pbkxp
bmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wNCgpLCBib3VuZHMucDMoKSwgdG9DbGFtcC5wMSgpLCB0
b0NsYW1wLnA0KCksIHA0KSkpCisgICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOworCisgICAgLy8g
SWYgb25seSBvbmUgb2YgdGhlIHBvaW50cyBpbnRlcnNlY3RlZCBvbiBlaXRoZXIgdGhlIHRvcCBv
ciBib3R0b20gbGluZSB0aGVuIHdlCisgICAgLy8gY2FuIGNsYW1wIHRoZSBvdGhlciBwb2ludCBv
biB0aGF0IGxpbmUgdG8gdGhlIGNvcm5lciBvZiB0aGUgYm91bmRzLgorICAgIGlmICghY29udGFp
bnNQb2ludDEgJiYgaW50ZXJzZWN0Rm9yUG9pbnQyICYmICFpbnRlcnNlY3RGb3JQb2ludDEpIHsK
KyAgICAgICAgY29udGFpbnNQb2ludDEgPSB0cnVlOworICAgICAgICBwMSA9IGJvdW5kcy5wMSgp
OworICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQyICYmIGludGVyc2VjdEZvclBvaW50MSAm
JiAhaW50ZXJzZWN0Rm9yUG9pbnQyKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsK
KyAgICAgICAgcDIgPSBib3VuZHMucDIoKTsKKyAgICB9CisgICAgaWYgKCFjb250YWluc1BvaW50
NCAmJiBpbnRlcnNlY3RGb3JQb2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50NCkgeworICAgICAg
ICBjb250YWluc1BvaW50NCA9IHRydWU7CisgICAgICAgIHA0ID0gYm91bmRzLnA0KCk7CisgICAg
fSBlbHNlIGlmICghY29udGFpbnNQb2ludDMgJiYgaW50ZXJzZWN0Rm9yUG9pbnQ0ICYmICFpbnRl
cnNlY3RGb3JQb2ludDMpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDMgPSB0cnVlOworICAgICAg
ICBwMyA9IGJvdW5kcy5wMygpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBvbmx5IG5lZWQgdG8g
cGVyZm9ybSBob3Jpem9udGFsIGNsYW1waW5nIGZvciB1bmFkanVzdGVkIHBvaW50cy4KKyAgICBp
ZiAoIWNvbnRhaW5zUG9pbnQyICYmICFpbnRlcnNlY3RGb3JQb2ludDIpCisgICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMigpLCBib3VuZHMucDMoKSwg
cDEsIHAyLCBwMik7CisgICAgaWYgKCFjb250YWluc1BvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9p
bnQzKQorICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMu
cDIoKSwgYm91bmRzLnAzKCksIHA0LCBwMywgcDMpOworICAgIGlmICghY29udGFpbnNQb2ludDEg
JiYgIWludGVyc2VjdEZvclBvaW50MSkKKyAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJl
dHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wNCgpLCBwMSwgcDIsIHAxKTsKKyAgICBp
ZiAoIWNvbnRhaW5zUG9pbnQ0ICYmICFpbnRlcnNlY3RGb3JQb2ludDQpCisgICAgICAgIGZpbmRJ
bnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwg
cDQsIHAzLCBwNCk7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRRdWFkKHAxLCBwMiwgcDMs
IHA0KTsKK30KKworc3RhdGljIHZvaWQgbGF5ZXJQYXRoV2l0aEhvbGUoQ0FTaGFwZUxheWVyICps
YXllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UXVhZCYgaG9sZVF1YWQpCit7CisgICAgLy8gTm90aGluZyB0byBzaG93LgorICAgIGlm
IChvdXRlclF1YWQgPT0gaG9sZVF1YWQgfHwgaG9sZVF1YWQuY29udGFpbnNRdWFkKG91dGVyUXVh
ZCkpIHsKKyAgICAgICAgbGF5ZXIucGF0aCA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIG5lZ2F0aXZlIG1hcmdpbiAvIHBhZGRpbmcgdGhlbiB0
aGUgb3V0ZXIgYm94IG1pZ2h0IG5vdAorICAgIC8vIGZ1bGx5IGNvbnRhaW4gdGhlIGhvbGUgYm94
LiBJbiBzdWNoIGNhc2VzIHdlIHJlY2FsY3VsYXRlIHRoZSBob2xlIHRvCisgICAgLy8gYmUgdGhl
IGludGVyc2VjdGlvbiBvZiB0aGUgdHdvIHF1YWRzLgorICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBp
bm5lckhvbGU7CisgICAgaWYgKG91dGVyUXVhZC5jb250YWluc1F1YWQoaG9sZVF1YWQpKQorICAg
ICAgICBpbm5lckhvbGUgPSBob2xlUXVhZDsKKyAgICBlbHNlCisgICAgICAgIGlubmVySG9sZSA9
IHF1YWRJbnRlcnNlY3Rpb24ob3V0ZXJRdWFkLCBob2xlUXVhZCk7CisKKyAgICAvLyBDbG9ja3dp
c2UgaW5zaWRlIHJlY3QgKGhvbGUpLCBDb3VudGVyLUNsb2Nrd2lzZSBvdXRzaWRlIHJlY3QgKGZp
bGwpLgorICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsK
KyAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDEoKS54KCksIGlubmVy
SG9sZS5wMSgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJI
b2xlLnAyKCkueCgpLCBpbm5lckhvbGUucDIoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KHBhdGgsIDAsIGlubmVySG9sZS5wMygpLngoKSwgaW5uZXJIb2xlLnAzKCkueSgpKTsKKyAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDQoKS54KCksIGlubmVy
SG9sZS5wNCgpLnkoKSk7CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFk
LnAxKCkueCgpLCBvdXRlclF1YWQucDEoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50
KHBhdGgsIDAsIG91dGVyUXVhZC5wNCgpLngoKSwgb3V0ZXJRdWFkLnA0KCkueSgpKTsKKyAgICBD
R1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDMoKS54KCksIG91dGVyUXVh
ZC5wMygpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFk
LnAyKCkueCgpLCBvdXRlclF1YWQucDIoKS55KCkpOworICAgIGxheWVyLnBhdGggPSBwYXRoOwor
ICAgIENHUGF0aFJlbGVhc2UocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGxheWVyUGF0aChDQVNo
YXBlTGF5ZXIgKmxheWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCkKK3sK
KyAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAg
Q0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAxKCkueCgpLCBvdXRlclF1YWQu
cDEoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5w
NCgpLngoKSwgb3V0ZXJRdWFkLnA0KCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChw
YXRoLCAwLCBvdXRlclF1YWQucDMoKS54KCksIG91dGVyUXVhZC5wMygpLnkoKSk7CisgICAgQ0dQ
YXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAyKCkueCgpLCBvdXRlclF1YWQu
cDIoKS55KCkpOworICAgIGxheWVyLnBhdGggPSBwYXRoOworICAgIENHUGF0aFJlbGVhc2UocGF0
aCk7Cit9CisKKy0gKHZvaWQpX2xheW91dEZvck5vZGVIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6
OkhpZ2hsaWdodCYpaGlnaGxpZ2h0IG9mZnNldDoodW5zaWduZWQpb2Zmc2V0Cit7CisgICAgQVNT
RVJUKFtfbGF5ZXJzIGNvdW50XSA+PSBvZmZzZXQgKyA0KTsKKyAgICBBU1NFUlQoaGlnaGxpZ2h0
LnF1YWRzLnNpemUoKSA+PSBvZmZzZXQgKyA0KTsKKyAgICBpZiAoW19sYXllcnMgY291bnRdIDwg
b2Zmc2V0ICsgNCB8fCBoaWdobGlnaHQucXVhZHMuc2l6ZSgpIDwgb2Zmc2V0ICsgNCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ0FTaGFwZUxheWVyICptYXJnaW5MYXllciA9IFtfbGF5ZXJzIG9i
amVjdEF0SW5kZXg6b2Zmc2V0XTsKKyAgICBDQVNoYXBlTGF5ZXIgKmJvcmRlckxheWVyID0gW19s
YXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAxXTsKKyAgICBDQVNoYXBlTGF5ZXIgKnBhZGRp
bmdMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgMl07CisgICAgQ0FTaGFw
ZUxheWVyICpjb250ZW50TGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDNd
OworCisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIG1hcmdpblF1YWQgPSBoaWdobGlnaHQucXVhZHNb
b2Zmc2V0XTsKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgYm9yZGVyUXVhZCA9IGhpZ2hsaWdodC5x
dWFkc1tvZmZzZXQgKyAxXTsKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgcGFkZGluZ1F1YWQgPSBo
aWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMl07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIGNvbnRl
bnRRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDNdOworCisgICAgbWFyZ2luTGF5ZXIu
ZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQubWFyZ2luQ29sb3IpOworICAgIGJv
cmRlckxheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmJvcmRlckNvbG9y
KTsKKyAgICBwYWRkaW5nTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQu
cGFkZGluZ0NvbG9yKTsKKyAgICBjb250ZW50TGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xv
cihoaWdobGlnaHQuY29udGVudENvbG9yKTsKKworICAgIGxheWVyUGF0aFdpdGhIb2xlKG1hcmdp
bkxheWVyLCBtYXJnaW5RdWFkLCBib3JkZXJRdWFkKTsKKyAgICBsYXllclBhdGhXaXRoSG9sZShi
b3JkZXJMYXllciwgYm9yZGVyUXVhZCwgcGFkZGluZ1F1YWQpOworICAgIGxheWVyUGF0aFdpdGhI
b2xlKHBhZGRpbmdMYXllciwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkKTsKKyAgICBsYXllclBh
dGgoY29udGVudExheWVyLCBjb250ZW50UXVhZCk7Cit9CisKKy0gKHZvaWQpX2xheW91dEZvck5v
ZGVMaXN0SGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAorewor
ICAgIGlmICghaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSkgeworICAgICAgICBbc2VsZiBfcmVtb3Zl
QWxsTGF5ZXJzXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG5vZGVD
b3VudCA9IGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgLyA0OworICAgIFtzZWxmIF9jcmVhdGVMYXll
cnM6bm9kZUNvdW50ICogNF07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUNv
dW50OyArK2kpCisgICAgICAgIFtzZWxmIF9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0OmhpZ2hsaWdo
dCBvZmZzZXQ6aSAqIDRdOworfQorCistICh2b2lkKV9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDoo
Y29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKK3sKKyAgICBOU1VJbnRlZ2VyIG51
bUxheWVycyA9IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7CisgICAgaWYgKCFudW1MYXllcnMpIHsK
KyAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm51bUxheWVyc107CisKKyAgICBDR0NvbG9yUmVm
IGNvbnRlbnRDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7Cisg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKKyAgICAgICAg
Q0FTaGFwZUxheWVyICpsYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAg
IGxheWVyLmZpbGxDb2xvciA9IGNvbnRlbnRDb2xvcjsKKyAgICAgICAgbGF5ZXJQYXRoKGxheWVy
LCBoaWdobGlnaHQucXVhZHNbaV0pOworICAgIH0KK30KKworLSAodm9pZCl1cGRhdGU6KGNvbnN0
IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Cit7CisgICAgaWYgKGhpZ2hsaWdodC50eXBl
ID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGUgfHwgaGlnaGxpZ2h0LnR5cGUgPT0gV2Vi
Q29yZTo6SGlnaGxpZ2h0VHlwZTo6Tm9kZUxpc3QpCisgICAgICAgIFtzZWxmIF9sYXlvdXRGb3JO
b2RlTGlzdEhpZ2hsaWdodDpoaWdobGlnaHRdOworICAgIGVsc2UgaWYgKGhpZ2hsaWdodC50eXBl
ID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6OlJlY3RzKQorICAgICAgICBbc2VsZiBfbGF5b3V0
Rm9yUmVjdHNIaWdobGlnaHQ6aGlnaGxpZ2h0XTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZiYTY5NWU2YmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVj
dG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0IDxVSUtpdC9VSUdlc3R1
cmVSZWNvZ25pemVyLmg+CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCistIChDR1BvaW50KWxvY2F0aW9uSW5W
aWV3OihVSVZpZXcgKil2aWV3OworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dL
SW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNjdmZTdiY2NkYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNo
R2VzdHVyZVJlY29nbml6ZXIubW0KQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29n
bml6ZXIuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFVJS2l0L1VJ
R2VzdHVyZVJlY29nbml6ZXJTdWJjbGFzcy5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgor
CitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIg
eworICAgIFJldGFpblB0cjxVSVRvdWNoPiBfdG91Y2g7Cit9CisKKy0gKENHUG9pbnQpbG9jYXRp
b25JblZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW190b3VjaCBsb2NhdGlvbklu
Vmlldzp2aWV3XTsKK30KKworLSAodm9pZClfcHJvY2Vzc1RvdWNoZXM6KE5TU2V0ICopdG91Y2hl
cyBzdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKW5ld1N0YXRlCit7CisgICAgQVNTRVJU
KF90b3VjaCk7CisgICAgaWYgKFt0b3VjaGVzIGNvbnRhaW5zT2JqZWN0Ol90b3VjaC5nZXQoKV0p
CisgICAgICAgIHNlbGYuc3RhdGUgPSBuZXdTdGF0ZTsKK30KKworLSAodm9pZCl0b3VjaGVzQmVn
YW46KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIGlm
IChzZWxmLnN0YXRlICE9IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQoIV90b3VjaCk7CisgICAgX3RvdWNoID0gW3RvdWNoZXMg
YW55T2JqZWN0XTsKKworICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuXTsKK30KKworLSAodm9pZCl0b3VjaGVzTW92ZWQ6
KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIFtzZWxm
IF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNo
YW5nZWRdOworfQorCistICh2b2lkKXRvdWNoZXNFbmRlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhF
dmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNo
ZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWRdOworfQorCistICh2b2lkKXRv
dWNoZXNDYW5jZWxsZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVu
dAoreworICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUNhbmNlbGxlZF07Cit9CisKKy0gKHZvaWQpcmVzZXQKK3sKKyAgICBfdG91
Y2ggPSBuaWw7Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGFiZGVi
NWY2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCkBAIC0wLDAgKzEsMjYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlbW90ZVdlYklu
c3BlY3RvclByb3h5LmgiCisKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQorCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXS0ZyYW1l
SW5mby5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgorI2ltcG9ydCAi
V0tOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgor
I2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5
LmgiCisjaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgor
I2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1wb3J0
IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitAaW50
ZXJmYWNlIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciA6IE5TT2JqZWN0IDxO
U1dpbmRvd0RlbGVnYXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IHsKKyAg
ICBXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBfaW5zcGVjdG9yUHJveHk7Cit9Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIKKworLSAoTlNSZWN0
KXdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93ICop
c2hlZXQgdXNpbmdSZWN0OihOU1JlY3QpcmVjdAoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
CisgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0
KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7Cisg
ICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQ
cm94eQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX2luc3BlY3RvclByb3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRp
ZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIKK3sKKyAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRnJvbUNyYXNoKCk7Cit9CisKKy0gKEJP
T0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJu
IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKTsKK30KKworQGVuZAorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXS1dlYlZpZXcgKlJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Ojp3ZWJWaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0
b3JWaWV3LmdldCgpLndlYlZpZXc7Cit9CisKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBt
X29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRh
cHRlciBhbGxvY10gaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7CisKKyAg
ICBtX2luc3BlY3RvclZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBh
bGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOm51bGxwdHJdKTsKKyAgICBbbV9pbnNwZWN0b3JW
aWV3LmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgbV93aW5k
b3cgPSBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNaZXJvUmVjdCwg
V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGUpOworICAgIFtt
X3dpbmRvdyBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKyAgICBbbV93aW5kb3cg
c2V0RnJhbWVBdXRvc2F2ZU5hbWU6QCJXS1JlbW90ZVdlYkluc3BlY3RvcldpbmRvd0ZyYW1lIl07
CisKKyAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3ID0gbV93aW5kb3cuZ2V0KCkuY29udGVudFZpZXc7
CisgICAgW3dlYlZpZXcoKSBzZXRGcmFtZTpjb250ZW50Vmlldy5ib3VuZHNdOworICAgIFtjb250
ZW50VmlldyBhZGRTdWJ2aWV3OndlYlZpZXcoKV07CisKKyAgICByZXR1cm4gd2ViVmlldygpLT5f
cGFnZS5nZXQoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1fd2luZG93KSB7CisgICAg
ICAgIFttX3dpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV93aW5kb3cgY2xvc2Vd
OworICAgICAgICBtX3dpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JW
aWV3KSB7CisgICAgICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsK
KyAgICAgICAgbV9pbnNwZWN0b3JWaWV3ID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29iakNB
ZGFwdGVyKQorICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIFtOU1dpbmRvdyBy
ZW1vdmVGcmFtZVVzaW5nTmFtZTpbbV93aW5kb3cgZnJhbWVBdXRvc2F2ZU5hbWVdXTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQorewor
ICAgIFttX3dpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOworICAgIFttX3dpbmRvdyBt
YWtlRmlyc3RSZXNwb25kZXI6d2ViVmlldygpXTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cp
Cit7CisgICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCisKKyAg
ICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIE5TVVJMICpwbGF0
Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0
KCk7CisgICAgaWYgKCFwbGF0Zm9ybVVSTCkgeworICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVSTF07CisgICAgICAgIC8vIFRoZSB1c2VyIG11c3Qg
Y29uZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgorICAgICAg
ICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhdGZv
cm1VUkwpOworICAgIGlmICghcGxhdGZvcm1VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJlbG93LgorICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxD
b3B5ID0gc3VnZ2VzdGVkVVJMOworICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7CisK
KyAgICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkgeworICAgICAgICBBU1NF
UlQoYWN0dWFsVVJMKTsKKworICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChz
dWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOworCisgICAgICAgIGlmIChiYXNlNjRFbmNvZGVk
KSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKCFiYXNl
NjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29u
dGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBs
ZW5ndGg6b3V0LnNpemUoKV0pOworICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6
YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBb
Y29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07CisKKyAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNh
dmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJ
RCgpKTsKKyAgICB9OworCisgICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2
ZVRvVVJMKHBsYXRmb3JtVVJMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2
ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVG
aWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAv
LyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8g
YSBwYXRoIGFuZAorICAgIC8vIGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4g
T3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3RlbSdzCisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3Ig
dGhlIGluaXRpYWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxh
dGZvcm1VUkwuaXNGaWxlVVJMKQorICAgICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZv
cm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxl
dGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFu
ZWwuVVJMKTsKKyAgICB9OworCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fd2luZG93ID8gbV93
aW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5V2luZG93XTsKKyAgICBpZiAod2luZG93KQorICAgICAg
ICBbcGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxl
cjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihbcGFuZWwgcnVuTW9kYWxdKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkKK3sKKyAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1h
Yy4KKworICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgUmV0
YWluUHRyPE5TVVJMPiBhY3R1YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChz
dWdnZXN0ZWRVUkwpOworICAgIC8vIERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBh
bHJlYWR5IGNvbmZpcm1lZCB0aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4KKyAgICBpZiAoIWFjdHVh
bFVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNG
aWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9y
Ok5VTExdOworICAgIFtoYW5kbGUgc2Vla1RvRW5kT2ZGaWxlXTsKKyAgICBbaGFuZGxlIHdyaXRl
RGF0YTpbY29udGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwor
ICAgIFtoYW5kbGUgY2xvc2VGaWxlXTsKKworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFn
ZSA9IHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7CisgICAgaW5zcGVjdG9yUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVS
TCBhYnNvbHV0ZVN0cmluZ10pLCBpbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3NoZWV0UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICB3
ZWJWaWV3KCktPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7
CisgICAgW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIG9wZW5VUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6dXJsXV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQoreworICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7CisKKyAgICBSZXRh
aW5QdHI8U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NG
Q2VydGlmaWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOworCisgICAgQVNTRVJUKG1fd2luZG93KTsK
KyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVs
IGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlk
RW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5m
by50cnVzdCgpIHNob3dHcm91cDpZRVNdOworI2Vsc2UKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBi
ZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVu
ZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkg
KiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2Vu
ZGlmCisKKyAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBo
YXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4
aXN0IGJlZm9yZWhhbmQuCisgICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9
IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmll
dyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxl
VHJ1c3Q6Tk9dOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsK
KyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDhiZDA4ZmY5ZDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKyNpbXBv
cnQgPHd0Zi9OYWtlZFB0ci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorCitPQkpDX0NMQVNTIFdL
V2ViVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisK
K0Bwcm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU7CisKK05TX0FTU1VN
RV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciA6
IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3ICp3
ZWJWaWV3OworQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRlOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJ
bnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4paW5zcGVjdGVkUGFn
ZTsKKworKyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJWaWV3OihOU1ZpZXcgKil2aWV3OworCitA
ZW5kCisKK0Bwcm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGUgPE5TT2Jq
ZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9y
RGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJv
bGxlcjsKKy0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVz
dDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwor
LSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICop
bmV3V2luZG93OworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRv
dzooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwor
QGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uZDkyNjNlMGZkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
bW0KQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKworI2lmIFBMQVRGT1JNKE1BQykK
KworI2ltcG9ydCAiQVBJTmF2aWdhdGlvbi5oIgorI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgor
I2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3Lmgi
CisjaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkRl
bGVnYXRlLmgiCisjaW1wb3J0ICJXS09wZW5QYW5lbFBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIldL
UHJlZmVyZW5jZXNQcml2YXRlLmgiCisjaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld0NvbmZp
Z3VyYXRpb25Qcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0
ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgi
CisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgor
CitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKCkgPFdLVUlEZWxlZ2F0ZSwg
V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHsKKyAgICBOYWtl
ZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX2luc3BlY3RlZFBhZ2U7CisgICAgUmV0YWluUHRy
PFdLSW5zcGVjdG9yV0tXZWJWaWV3PiBfd2ViVmlldzsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8V0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPj4gX2RlbGVnYXRlOworfQorCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQ
cm94eT4paW5zcGVjdGVkUGFnZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gVGhlIChsb2NhbCkgaW5zcGVjdGVkIHBhZ2Ug
aXMgbmlsIGlmIHRoZSBjb250cm9sbGVyIGlzIGhvc3RpbmcgYSBSZW1vdGUgV2ViIEluc3BlY3Rv
ciB2aWV3LgorICAgIF9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKKworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoX3dlYlZpZXcpIHsKKyAg
ICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW193ZWJWaWV3IHNl
dE5hdmlnYXRpb25EZWxlZ2F0ZTpuaWxdOworICAgICAgICBbX3dlYlZpZXcgc2V0SW5zcGVjdG9y
V0tXZWJWaWV3RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgX3dlYlZpZXcgPSBuaWw7CisgICAgfQor
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0QXV0b3Jl
bGVhc2VkKCk7Cit9CisKKy0gKFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICAvLyBDb25zdHJ1
Y3QgbGF6aWx5IHNvIHRoZSBjbGllbnQgY2FuIHNldCB0aGUgZGVsZWdhdGUgYmVmb3JlIHRoZSBX
ZWJWaWV3IGlzIGNyZWF0ZWQuCisgICAgaWYgKCFfd2ViVmlldykgeworICAgICAgICBOU1JlY3Qg
aW5pdGlhbEZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5
Ojppbml0aWFsV2luZG93V2lkdGgsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxX
aW5kb3dIZWlnaHQpOworICAgICAgICBfd2ViVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvcldL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTppbml0aWFsRnJhbWUgY29uZmlndXJhdGlvbjpb
c2VsZiBjb25maWd1cmF0aW9uXV0pOworICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpz
ZWxmXTsKKyAgICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpzZWxmXTsKKyAg
ICAgICAgW193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOnNlbGZdOworICAg
ICAgICBbX3dlYlZpZXcgX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0czpOT107
CisgICAgICAgIFtfd2ViVmlldyBfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTpZRVNdOworICAgICAg
ICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1Zp
ZXdIZWlnaHRTaXphYmxlXTsKKyAgICB9CisKKyAgICByZXR1cm4gX3dlYlZpZXcuZ2V0KCk7Cit9
CisKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVs
ZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCit7CisgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
KworICAgIFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gY29uZmlndXJhdGlvbi5nZXQoKS5w
cmVmZXJlbmNlczsKKyAgICBwcmVmZXJlbmNlcy5fYWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
ID0gWUVTOworICAgIFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21G
aWxlVVJMczpZRVNdOworICAgIHByZWZlcmVuY2VzLl9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBf
V0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lBbGxvd0FsbDsKKyAgICBwcmVmZXJlbmNlcy5famF2YVNj
cmlwdFJ1bnRpbWVGbGFncyA9IDA7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gQWxsb3cgZGV2
ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRo
b3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLl9kZXZlbG9wZXJFeHRyYXNF
bmFibGVkID0gWUVTOworICAgIHByZWZlcmVuY2VzLl9sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1D
b25zb2xlRW5hYmxlZCA9IFlFUzsKKyNlbmRpZgorCisgICAgcHJlZmVyZW5jZXMuX2RpYWdub3N0
aWNMb2dnaW5nRW5hYmxlZCA9IFlFUzsKKworICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJ
bnNwZWN0b3JJc1VuZGVyVGVzdDopXSkgeworICAgICAgICBpZiAoW19kZWxlZ2F0ZSBpbnNwZWN0
b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OnNlbGZdKSB7CisgICAgICAgICAg
ICBwcmVmZXJlbmNlcy5faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBOTzsK
KyAgICAgICAgICAgIHByZWZlcmVuY2VzLl9wYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHBy
ZXNzaW9uRW5hYmxlZCA9IE5POworICAgICAgICB9CisgICAgfQorCisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0UHJvY2Vzc1Bvb2w6d3JhcHBlcihXZWJLaXQ6Omluc3BlY3RvclByb2Nlc3NQb29sKFdl
YktpdDo6aW5zcGVjdG9yTGV2ZWxGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKSkpXTsKKyAgICBbY29u
ZmlndXJhdGlvbiBfc2V0R3JvdXBJZGVudGlmaWVyOldlYktpdDo6aW5zcGVjdG9yUGFnZUdyb3Vw
SWRlbnRpZmllckZvclBhZ2UoX2luc3BlY3RlZFBhZ2UpXTsKKworICAgIHJldHVybiBjb25maWd1
cmF0aW9uLmF1dG9yZWxlYXNlKCk7Cit9CisKKysgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmll
dzooTlNWaWV3ICopdmlldworeworICAgIHJldHVybiBbdmlldyBpc0tpbmRPZkNsYXNzOltXS0lu
c3BlY3RvcldLV2ViVmlldyBjbGFzc11dOworfQorCisvLyBNQVJLOiBXS1VJRGVsZWdhdGUgbWV0
aG9kcworCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGdldFdpbmRvd0Zy
YW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShDR1JlY3QpKWNvbXBsZXRpb25IYW5k
bGVyCit7CisgICAgaWYgKCFfd2ViVmlldy5nZXQoKS53aW5kb3cpCisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENHUmVjdFplcm8pOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoTlNSZWN0VG9DR1JlY3QoW3dlYlZpZXcgZnJhbWVdKSk7Cit9CisKKy0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2V0V2luZG93RnJhbWU6KENHUmVjdClmcmFtZQorewor
ICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBb
X3dlYlZpZXcuZ2V0KCkud2luZG93IHNldEZyYW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUpIGRp
c3BsYXk6WUVTXTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1
bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOihXS09wZW5QYW5lbFBhcmFtZXRlcnMgKilwYXJhbWV0
ZXJzIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNVUkwgKj4gKlVSTHMpKWNvbXBsZXRpb25IYW5kbGVyCit7
CisgICAgTlNPcGVuUGFuZWwgKm9wZW5QYW5lbCA9IFtOU09wZW5QYW5lbCBvcGVuUGFuZWxdOwor
ICAgIG9wZW5QYW5lbC5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHBhcmFtZXRlcnMuYWxsb3dz
TXVsdGlwbGVTZWxlY3Rpb247CisKKyAgICBhdXRvIHJlcG9ydFNlbGVjdGVkRmlsZXMgPSBeKE5T
SW50ZWdlciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VP
SykKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG9wZW5QYW5lbC5VUkxzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICB9OworCisg
ICAgaWYgKF93ZWJWaWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgW29wZW5QYW5lbCBiZWdpblNo
ZWV0TW9kYWxGb3JXaW5kb3c6X3dlYlZpZXcuZ2V0KCkud2luZG93IGNvbXBsZXRpb25IYW5kbGVy
OnJlcG9ydFNlbGVjdGVkRmlsZXNdOworICAgIGVsc2UKKyAgICAgICAgcmVwb3J0U2VsZWN0ZWRG
aWxlcyhbb3BlblBhbmVsIHJ1bk1vZGFsXSk7Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOihXS1Nl
Y3VyaXR5T3JpZ2luICopc2VjdXJpdHlPcmlnaW4gY3VycmVudFF1b3RhOih1bnNpZ25lZCBsb25n
IGxvbmcpY3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZToodW5zaWduZWQgbG9uZyBsb25n
KWN1cnJlbnRPcmlnaW5Vc2FnZSBjdXJyZW50RGF0YWJhc2VVc2FnZToodW5zaWduZWQgbG9uZyBs
b25nKWN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpZXhwZWN0
ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdR
dW90YSkpZGVjaXNpb25IYW5kbGVyCit7CisgICAgZGVjaXNpb25IYW5kbGVyKHN0ZDo6bWF4PHVu
c2lnbmVkIGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudFVzYWdlICogMS4yNSkpOwor
fQorCistIChOU01lbnUgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjb250ZXh0TWVu
dTooTlNNZW51ICopbWVudSBmb3JFbGVtZW50OihfV0tDb250ZXh0TWVudUVsZW1lbnRJbmZvICop
ZWxlbWVudAoreworICAgIGZvciAoTlNJbnRlZ2VyIGkgPSBtZW51Lm51bWJlck9mSXRlbXMgLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBOU01lbnVJdGVtICppdGVtID0gW21lbnUgaXRlbUF0
SW5kZXg6aV07CisgICAgICAgIHN3aXRjaCAoaXRlbS50YWcpIHsKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0Nv
bnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0Nv
bnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0Nv
bnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAgICAgICBjYXNlIGtXS0Nv
bnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgorICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgorICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgorICAgICAgICAgICAgW21lbnUg
cmVtb3ZlSXRlbUF0SW5kZXg6aV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBtZW51OworfQorCisvLyBNQVJLOiBXS05hdmlnYXRpb25EZWxlZ2F0
ZSBtZXRob2RzCisKKy0gKHZvaWQpd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRl
OihXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcklu
c3BlY3RvckRpZENyYXNoOildKQorICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250
cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6c2VsZl07Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmln
YXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXiko
V0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICAvLyBBbGxv
dyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgaWYgKCFuYXZpZ2F0
aW9uQWN0aW9uLnRhcmdldEZyYW1lLmlzTWFpbkZyYW1lKSB7CisgICAgICAgIGRlY2lzaW9uSGFu
ZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgor
ICAgIGlmIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQ
YWdlKG5hdmlnYXRpb25BY3Rpb24ucmVxdWVzdC5VUkwpKSB7CisgICAgICAgIGRlY2lzaW9uSGFu
ZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICBkZWNpc2lvbkhhbmRs
ZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKKyAgICAKKyAgICAvLyBBbmQgaW5z
dGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAgICBpZiAoX2luc3BlY3RlZFBh
Z2UpCisgICAgICAgIF9pbnNwZWN0ZWRQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uQWN0aW9u
LnJlcXVlc3QpOworfQorCisvLyBNQVJLOiBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIG1l
dGhvZHMKKworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tX
ZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIE9wdGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlv
bnM7CisgICAgaWYgKFdlYktpdDo6bGlua2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6
Rmlyc3RXaXRoRXhwaXJlZE9ubHlSZWxvYWRCZWhhdmlvcikpCisgICAgICAgIHJlbG9hZE9wdGlv
bnMuYWRkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOworCisgICAgX2luc3Bl
Y3RlZFBhZ2UtPnJlbG9hZChyZWxvYWRPcHRpb25zKTsKK30KKworLSAodm9pZClpbnNwZWN0b3JX
S1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcK
K3sKKyAgICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBfaW5z
cGVjdGVkUGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RnJvbU9yaWdpbik7Cit9
CisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdl
YlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBpZiAo
ISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGlu
c3BlY3RvclZpZXdDb250cm9sbGVyOndpbGxNb3ZlVG9XaW5kb3c6KV0pCisgICAgICAgIFtfZGVs
ZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dp
bmRvd107Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihX
S0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoISFfZGVsZWdhdGUgJiYg
W19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250
cm9sbGVyRGlkTW92ZVRvV2luZG93OildKQorICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZp
ZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OnNlbGZdOworfQorCitAZW5kCisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM1N2U3N2NmZTdmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5o
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlldy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorCitAcHJvdG9jb2wgV0tJ
bnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTsKKworQGludGVyZmFjZSBXS0luc3BlY3RvcldLV2Vi
VmlldyA6IFdLV2ViVmlldworQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3Bl
Y3RvcldLV2ViVmlld0RlbGVnYXRlPiBpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTsKK0BlbmQK
KworQHByb3RvY29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUKK0ByZXF1aXJlZAorLSAo
dm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2Vi
VmlldzsKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNw
ZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXc6KFdL
SW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAq
KW5ld1dpbmRvdzsKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihX
S0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7CitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNGJmZWY0YTAxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCkBAIC0w
LDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldL
SW5zcGVjdG9yV0tXZWJWaWV3LmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIldL
SW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvcldLV2ViVmlldyB7CisgICAgV2Vha09iakNQdHI8aWQg
PFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+PiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdh
dGU7Cit9CisKKy0gKE5TUmVjdClfb3BhcXVlUmVjdEZvcldpbmRvd01vdmVXaGVuSW5UaXRsZWJh
cgoreworICAgIC8vIFRoaXMgY29udmluY2VzIEFwcEtpdCB0byBhbGxvdyB3aW5kb3cgbW92ZXMg
d2hlbiBjbGlja2luZyBhbnl3aGVyZSBpbiB0aGUgdGl0bGViYXIgKHRvcCAyMnB0KQorICAgIC8v
IHdoZW4gdGhpcyB2aWV3J3MgY29udGVudHMgY292ZXIgdGhlIGVudGlyZSB3aW5kb3cncyBjb250
ZW50cywgaW5jbHVkaW5nIHRoZSB0aXRsZWJhci4KKyAgICByZXR1cm4gTlNaZXJvUmVjdDsKK30K
KworLSAoTlNJbnRlZ2VyKXRhZworeworICAgIHJldHVybiBXS0luc3BlY3RvclZpZXdUYWc7Cit9
CisKKy0gKGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilpbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZQoreworICAgIHJldHVybiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUuZ2V0
QXV0b3JlbGVhc2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdh
dGU6KGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9p
bnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChJQkFjdGlvbily
ZWxvYWQ6KGlkKXNlbmRlcgoreworICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRl
IGluc3BlY3RvcldLV2ViVmlld1JlbG9hZDpzZWxmXTsKK30KKworLSAoSUJBY3Rpb24pcmVsb2Fk
RnJvbU9yaWdpbjooaWQpc2VuZGVyCit7CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVs
ZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjpzZWxmXTsKK30KKworLSAo
dm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBb
c3VwZXIgdmlld1dpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKKyAgICBbc2VsZi5pbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXc6c2VsZiB3aWxsTW92ZVRvV2lu
ZG93Om5ld1dpbmRvd107Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdworeworICAg
IFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6c2VsZl07Cit9CisK
K0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmJlNzI4ZDQzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFj
Lm1tCkBAIC0wLDAgKzEsODA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBQTEFURk9STShNQUMpCisK
KyNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9y
dCAiX1dLSW5zcGVjdG9ySW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvcldpbmRvdy5o
IgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1w
b3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKworc3RhdGljIGNvbnN0IE5TVUludGVnZXIgd2lu
ZG93U3R5bGVNYXNrID0gTlNXaW5kb3dTdHlsZU1hc2tUaXRsZWQgfCBOU1dpbmRvd1N0eWxlTWFz
a0Nsb3NhYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tNaW5pYXR1cml6YWJsZSB8IE5TV2luZG93U3R5
bGVNYXNrUmVzaXphYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tGdWxsU2l6ZUNvbnRlbnRWaWV3Owor
CisvLyBUaGUgdGltZSB3ZSBrZWVwIG91ciBXZWJWaWV3IGFsaXZlIGJlZm9yZSBjbG9zaW5nIGl0
IGFuZCBpdHMgcHJvY2Vzcy4KKy8vIFJldXNpbmcgdGhlIFdlYlZpZXcgaW1wcm92ZXMgc3RhcnQg
dXAgdGltZSBmb3IgcGVvcGxlIHRoYXQganVtcCBpbiBhbmQgb3V0IG9mIHRoZSBJbnNwZWN0b3Iu
CitzdGF0aWMgY29uc3QgU2Vjb25kcyB3ZWJWaWV3Q2xvc2VUaW1lb3V0IHsgMV9taW4gfTsKKwor
c3RhdGljIHZvaWQqIGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0ID0gJmtXaW5k
b3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0OworCitAaW50ZXJmYWNlIFdLV2ViSW5zcGVj
dG9yUHJveHlPYmpDQWRhcHRlciAoKSA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlckRlbGVnYXRlPgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0
b3JQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7CistICh2
b2lkKWludmFsaWRhdGU7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLV2ViSW5zcGVjdG9y
UHJveHlPYmpDQWRhcHRlciB7CisgICAgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSogX2luc3Bl
Y3RvclByb3h5OworfQorCistIChXS0luc3BlY3RvclJlZilpbnNwZWN0b3JSZWYKK3sKKyAgICBy
ZXR1cm4gdG9BUEkoX2luc3BlY3RvclByb3h5KTsKK30KKworLSAoX1dLSW5zcGVjdG9yICopaW5z
cGVjdG9yCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIHdyYXBw
ZXIoKl9pbnNwZWN0b3JQcm94eSk7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkq
KWluc3BlY3RvclByb3h5Cit7CisgICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JQcm94eSwgaW5zcGVj
dG9yUHJveHkpOworCisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICAvLyBVbnJldGFpbmVkIHRvIGF2b2lkIGEgcmVmZXJlbmNlIGN5Y2xl
LgorICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAgIF9pbnNwZWN0b3JQcm94eSA9IG51
bGxwdHI7Cit9CisKKy0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3Np
dGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAg
ICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5z
cGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0
UmVjdCgpLndpZHRoKCksIDApOworICAgIHJldHVybiByZWN0OworfQorCistICh2b2lkKXdpbmRv
d0RpZE1vdmU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNw
ZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5n
ZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9y
UHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93V2lsbENs
b3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9y
UHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKK30KKworLSAodm9pZCl3
aW5kb3dEaWRFbnRlckZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7
CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5k
b3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxT
Y3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0
b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hh
bmdlKCk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIC8vIFJlc2l6aW5nIHRoZSB2aWV3cyB3aGls
ZSBpbnNpZGUgdGhpcyBub3RpZmljYXRpb24gY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgd2hlbiBl
bnRlcmluZworICAgIC8vIG9yIGV4aXRpbmcgZnVsbCBzY3JlZW4uIFRvIGF2b2lkIHRoYXQgd2Ug
bmVlZCB0byBwZXJmb3JtIHRoZSB3b3JrIGFmdGVyIGEgZGVsYXkuIFdlIG9ubHkKKyAgICAvLyBk
ZXBlbmQgb24gdGhpcyBmb3IgZW5mb3JjaW5nIHRoZSBoZWlnaHQgY29uc3RyYWludHMsIHNvIGEg
c21hbGwgZGVsYXkgaXNuJ3QgdGVycmlibGUuIE1vc3QKKyAgICAvLyBvZiB0aGUgdGltZSB0aGUg
dmlld3Mgd2lsbCBhbHJlYWR5IGhhdmUgdGhlIGNvcnJlY3QgZnJhbWVzIGJlY2F1c2Ugb2YgYXV0
b3Jlc2l6aW5nIG1hc2tzLgorCisgICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1cs
IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCisgICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENo
YW5nZSgpOworICAgIH0pOworfQorCistICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5T
U3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5
PE5TS2V5VmFsdWVDaGFuZ2VLZXksIGlkPiAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4
dAoreworICAgIGlmIChjb250ZXh0ICE9IGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250
ZXh0KSB7CisgICAgICAgIFtzdXBlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggb2ZP
YmplY3Q6b2JqZWN0IGNoYW5nZTpjaGFuZ2UgY29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBvYmplY3Q7CisgICAgQVNTRVJU
KFt3aW5kb3cgaXNLaW5kT2ZDbGFzczpbTlNXaW5kb3cgY2xhc3NdXSk7CisgICAgaWYgKHdpbmRv
dy5pbkxpdmVSZXNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGRpc3BhdGNoX2FmdGVyKERJ
U1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBp
ZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0
ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB9KTsKK30KKworLy8gTUFSSzogV0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZClpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICop
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAg
ICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKK30KKworLSAoQk9PTClpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX2luc3Bl
Y3RvclByb3h5ID8gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpIDogZmFsc2U7Cit9CisK
Ky0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAq
KW5ld1dpbmRvdworeworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0
b3JQcm94eS0+YXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJv
bGxlci53ZWJWaWV3LndpbmRvdyk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JW
aWV3Q29udHJvbGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNw
ZWN0b3JQcm94eS0+YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJv
bGxlci53ZWJWaWV3LndpbmRvdyk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNo
bWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpCit7Cisg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpt
X29iakNBZGFwdGVyLmdldCgpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24g
b2JqZWN0Om9sZFZpZXddOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5z
cGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlm
aWNhdGlvbiBvYmplY3Q6bmV3Vmlld107CisKKyAgICBpZiAobV9pc0F0dGFjaGVkKQorICAgICAg
ICBhdHRhY2gobV9hdHRhY2htZW50U2lkZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdykKK3sKKyAg
ICBpZiAobV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0KSB7CisgICAgICAgIG1faXNPYnNl
cnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IGZhbHNlOworICAgICAgICBbb2xkV2luZG93IHJlbW92
ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRS
ZWN0IiBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3co
TlNXaW5kb3cgKm5ld1dpbmRvdykKK3sKKyAgICBpZiAobV9pc0F0dGFjaGVkICYmICEhbmV3V2lu
ZG93KSB7CisgICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IHRydWU7Cisg
ICAgICAgIFtuZXdXaW5kb3cgYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQ
YXRoOkAiY29udGVudExheW91dFJlY3QiIG9wdGlvbnM6MCBjb250ZXh0OmtXaW5kb3dDb250ZW50
TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hh
bmdlKCk7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVJbnNwZWN0
b3JXaW5kb3dUaXRsZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWwoKTsK
KyAgICBpZiAobGV2ZWwgPiAxKSB7CisgICAgICAgIE5TU3RyaW5nICpkZWJ1Z1RpdGxlID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciBbJWRd
IOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSB3aGVuIGluc3BlY3RpbmcgV2Vi
IEluc3BlY3RvciIpLCBsZXZlbCwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOworICAgICAgICBb
bV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6ZGVidWdUaXRsZV07CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgTlNTdHJpbmcgKnRpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJ
X1NUUklORygiV2ViIEluc3BlY3RvciDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0
bGUiKSwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5k
b3cgc2V0VGl0bGU6dGl0bGVdOworICAgIH0KK30KKworUmV0YWluUHRyPE5TV2luZG93PiBXZWJJ
bnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJh
bWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlIHRhcmdldFR5cGUpCit7CisgICAgTlNSZWN0IHdpbmRv
d0ZyYW1lID0gIU5TSXNFbXB0eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkgPyBzYXZlZFdpbmRvd0Zy
YW1lIDogTlNNYWtlUmVjdCgwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dI
ZWlnaHQpOworICAgIGF1dG8gd2luZG93ID0gYWRvcHROUyhbW19XS0luc3BlY3RvcldpbmRvdyBh
bGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5
bGVNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT10pOworICAgIFt3
aW5kb3cgc2V0TWluU2l6ZTpOU01ha2VTaXplKG1pbmltdW1XaW5kb3dXaWR0aCwgbWluaW11bVdp
bmRvd0hlaWdodCldOworICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAg
ICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZp
b3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuUHJpbWFyeSldOworCisg
ICAgYm9vbCBmb3JSZW1vdGVUYXJnZXQgPSB0YXJnZXRUeXBlID09IEluc3BlY3Rpb25UYXJnZXRU
eXBlOjpSZW1vdGU7CisgICAgW3dpbmRvdyBzZXRGb3JSZW1vdGVUYXJnZXQ6Zm9yUmVtb3RlVGFy
Z2V0XTsKKworICAgIENHRmxvYXQgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplID0gKFt3aW5k
b3cgc2NyZWVuXS5mcmFtZS5zaXplLndpZHRoIC8gMikgLSA0OworICAgIENHRmxvYXQgbWluaW11
bUZ1bGxTY3JlZW5XaWR0aCA9IHN0ZDo6bWF4PENHRmxvYXQ+KDYzNiwgYXBwcm94aW1hdGVseUhh
bGZTY3JlZW5TaXplKTsKKyAgICBbd2luZG93IHNldE1pbkZ1bGxTY3JlZW5Db250ZW50U2l6ZTpO
U01ha2VTaXplKG1pbmltdW1GdWxsU2NyZWVuV2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsK
KyAgICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVo
YXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuQWxsb3dzVGlsaW5n
KV07CisKKyAgICBbd2luZG93IHNldFRpdGxlYmFyQXBwZWFyc1RyYW5zcGFyZW50OllFU107CisK
KyAgICAvLyBDZW50ZXIgdGhlIHdpbmRvdyBpZiB0aGUgc2F2ZWQgZnJhbWUgd2FzIGVtcHR5Lgor
ICAgIGlmIChOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpKQorICAgICAgICBbd2luZG93
IGNlbnRlcl07CisKKyAgICByZXR1cm4gd2luZG93OworfQorCitXZWJQYWdlUHJveHkqIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJU
KGluc3BlY3RlZFBhZ2UoKSk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOworCisgICAg
bV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgaWYgKG1f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fb2JqQ0FkYXB0ZXIp
OworICAgICAgICByZXR1cm4gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9w
YWdlLmdldCgpOworICAgIH0KKworICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tXZWJJ
bnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFdlYkluc3BlY3RvclByb3h5
OnRoaXNdKTsKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmlu
c3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZh
dWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxl
Y3RvcihpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIG9iamVjdDppbnNwZWN0ZWRWaWV3XTsKKworICAgIG1faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOmluc3BlY3RlZFBhZ2UoKV0pOworICAgIFttX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCld
OworCisgICAgV2ViUGFnZVByb3h5ICppbnNwZWN0b3JQYWdlID0gW21faW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOworICAgIEFTU0VSVChpbnNwZWN0b3JQYWdl
KTsKKworICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBBU1NFUlQoIW1faW5z
cGVjdG9yV2luZG93KTsKKworICAgIE5TU3RyaW5nICpzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nID0g
aW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmluc3BlY3RvcldpbmRv
d0ZyYW1lKCk7CisgICAgTlNSZWN0IHNhdmVkV2luZG93RnJhbWUgPSBOU1JlY3RGcm9tU3RyaW5n
KHNhdmVkV2luZG93RnJhbWVTdHJpbmcpOworCisgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBXZWJJ
bnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coc2F2ZWRXaW5kb3dGcmFtZSwgSW5z
cGVjdGlvblRhcmdldFR5cGU6OkxvY2FsKTsKKyAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVs
ZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZp
ZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKyAgICBOU1ZpZXcgKmNv
bnRlbnRWaWV3ID0gW21faW5zcGVjdG9yV2luZG93IGNvbnRlbnRWaWV3XTsKKyAgICBpbnNwZWN0
b3JWaWV3LmZyYW1lID0gW2NvbnRlbnRWaWV3IGJvdW5kc107CisgICAgW2NvbnRlbnRWaWV3IGFk
ZFN1YnZpZXc6aW5zcGVjdG9yVmlld107CisKKyAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRs
ZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSgpCit7
CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQgfHwgIW1faW5zcGVjdG9yV2luZG93KTsKKworICAg
IGlmIChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIG1faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgPSBuaWw7CisgICAgfQorCisgICAgaWYgKG1fb2JqQ0FkYXB0ZXIpIHsK
KyAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgICAgICBbbV9vYmpDQWRhcHRlciBpbnZh
bGlkYXRlXTsKKyAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKKyAgICB9Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVk
KCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRl
Om5pbF07CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KKworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5h
Y3Rpdml0eVRpbWVyLnN0YXJ0T25lU2hvdCh3ZWJWaWV3Q2xvc2VUaW1lb3V0KTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBt
X2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZUZy
b250ZW5kUGFnZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFs
aWRhdGUoKQoreworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3Ao
KTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgaWYgKG1faXNBdHRhY2hlZCkgeworICAgICAgICBw
bGF0Zm9ybURldGFjaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faW5z
cGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpu
aWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAgICBtX2luc3Bl
Y3RvcldpbmRvdyA9IG5pbDsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtUmVzZXRTdGF0ZSgpCit7CisgICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5w
cmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICAvLyBJZiB0aGUg
V2ViIEluc3BlY3RvciBpcyBubyBsb25nZXIgaW4gdGhlIHNhbWUgd2luZG93IGFzIHRoZSBpbnNw
ZWN0ZWQgdmlldywKKyAgICAvLyB0aGVuIHdlIG5lZWQgdG8gcmVvcGVuIHRoZSBJbnNwZWN0b3Ig
dG8gZ2V0IGl0IGF0dGFjaGVkIHRvIHRoZSByaWdodCB3aW5kb3cuCisgICAgLy8gVGhpcyBjYW4g
aGFwcGVuIHdoZW4gZHJhZ2dpbmcgdGFicyB0byBhbm90aGVyIHdpbmRvdyBpbiBTYWZhcmkuCisg
ICAgaWYgKG1faXNBdHRhY2hlZCAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3
XS53aW5kb3cgIT0gaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpKSB7CisgICAgICAg
IG9wZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FIDxyZGFyOi8v
cHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgYnJpbmcgYSBiYWNrZ3JvdW5kIHRhYiBp
biBTYWZhcmkgdG8gdGhlIGZyb250LCBvbmx5IGl0cyB3aW5kb3cuCisgICAgW1ttX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxd
OworICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUZp
cnN0UmVzcG9uZGVyOlttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddXTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCkKK3sKKyAgICBbaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpIG1ha2VLZXlBbmRP
cmRlckZyb250Om5pbF07Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNG
cm9udCgpCit7CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3
aWxsIG5vdCByZXR1cm4gZmFsc2UgZm9yIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpLCBvbmx5
IGEgYmFja2dyb3VuZCB3aW5kb3cuCisgICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIFttX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdy5pc01haW5XaW5kb3c7Cit9CisKK2Jv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0Nh
bkF0dGFjaCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCkt
Pmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgaWYgKFtXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyIHZpZXdJc0luc3BlY3RvcldlYlZpZXc6aW5zcGVjdGVkVmlld10pCisgICAgICAgIHJl
dHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOworCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmlt
dW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0
dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1OworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVt
QXR0YWNoZWRXaWR0aCA9IDUwMDsKKworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBp
bnNwZWN0ZWRWaWV3LmZyYW1lOworCisgICAgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0g
TlNIZWlnaHQoaW5zcGVjdGVkVmlld0ZyYW1lKSAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlv
OworICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gbWF4aW11bUF0dGFjaGVkSGVp
Z2h0ICYmIG1pbmltdW1BdHRhY2hlZFdpZHRoIDw9IE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1l
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIERvIG5vdGhpbmcuCit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBtX3VybFN0cmluZyA9IHVybFN0cmluZzsKKworICAg
IHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlm
aWNhdGVJbmZvKQoreworICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7CisK
KyAgICBSZXRhaW5QdHI8U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRv
cHROUyhbW1NGQ2VydGlmaWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOworCisgICAgTlNXaW5kb3cg
KndpbmRvdzsKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHdpbmRvdyA9IG1f
aW5zcGVjdG9yV2luZG93LmdldCgpOworICAgIGVsc2UKKyAgICAgICAgd2luZG93ID0gW1ttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddIHdpbmRvd107CisKKyAgICBpZiAoIXdpbmRv
dykKKyAgICAgICAgd2luZG93ID0gW05TQXBwIGtleVdpbmRvd107CisKKyNpZiBIQVZFKFNFQ19U
UlVTVF9TRVJJQUxJWkFUSU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JX
aW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4
dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVT
XTsKKyNlbHNlCisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5k
b3cgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxs
cHRyIGNlcnRpZmljYXRlczooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNo
YWluKCkgc2hvd0dyb3VwOllFU107CisjZW5kaWYKKworICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxs
ZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUg
Y2VydGlmaWNhdGVWaWV3IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KKyAgICBTRkNlcnRpZmlj
YXRlVmlldyAqY2VydGlmaWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVW
aWV3XTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOworICAgIFtj
ZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFibGVUcnVzdDpOT107CisgICAgW2NlcnRpZmljYXRlVmll
dyBzZXREaXNwbGF5RGV0YWlsczpZRVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWls
c0Rpc2Nsb3NlZDpZRVNdOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNh
dmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBBU1NFUlQoIXN1
Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1f
c3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7CisgICAgaWYg
KCFwbGF0Zm9ybVVSTCkgeworICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOnN1Z2dlc3RlZFVSTF07CisgICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcg
ZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgorICAgICAgICBmb3JjZVNhdmVE
aWFsb2cgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhdGZvcm1VUkwpOworICAg
IGlmICghcGxhdGZvcm1VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE5lY2Vzc2FyeSBm
b3IgdGhlIGJsb2NrIGJlbG93LgorICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2Vz
dGVkVVJMOworICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7CisKKyAgICBhdXRvIHNh
dmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkgeworICAgICAgICBBU1NFUlQoYWN0dWFsVVJM
KTsKKworICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxD
b3B5LCBhY3R1YWxVUkwpOworCisgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29u
dGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0
TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNp
emUoKV0pOworICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0
b21pY2FsbHk6WUVTXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbY29udGVudENvcHkg
d3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmcgZXJyb3I6TlVMTF07CisKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNv
bHV0ZVN0cmluZ10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICB9OworCisg
ICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJM
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtO
U1NhdmVQYW5lbCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0g
cGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
ZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAorICAgIC8v
IGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhl
IHN5c3RlbSdzCisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0
b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJM
KQorICAgICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGlu
Z0xhc3RQYXRoQ29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5T
SW50ZWdlciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VD
YW5jZWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNN
b2RhbFJlc3BvbnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsKKyAgICB9Owor
CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93ID8gbV9pbnNwZWN0b3JX
aW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5V2luZG93XTsKKyAgICBpZiAod2luZG93KQorICAgICAg
ICBbcGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxl
cjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihbcGFuZWwgcnVuTW9kYWxdKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKK3sKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIFJl
dGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQo
c3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMg
YWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisgICAgaWYgKCFhY3R1
YWxVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05T
RmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJv
cjpOVUxMXTsKKyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAgW2hhbmRsZSB3cml0
ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsK
KyAgICBbaGFuZGxlIGNsb3NlRmlsZV07CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJz
b2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQo
IW1faXNBdHRhY2hlZCk7CisgICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQobV9p
bnNwZWN0b3JXaW5kb3cpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUg
fHwgIW1faW5zcGVjdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1N0cmluZyAq
ZnJhbWVTdHJpbmcgPSBOU1N0cmluZ0Zyb21SZWN0KFttX2luc3BlY3RvcldpbmRvdyBmcmFtZV0p
OworICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRJbnNw
ZWN0b3JXaW5kb3dGcmFtZShmcmFtZVN0cmluZyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0dGFj
aGVkKTsKKyAgICBBU1NFUlQobV9pc1Zpc2libGUpOworICAgIEFTU0VSVChtX2luc3BlY3Rvcldp
bmRvdyk7CisKKyAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNw
ZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNo
YW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsgICAgCit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0IGN1cnJl
bnREaW1lbnNpb24pCit7CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF0dGFj
aCBhdmFpbGFiaWxpdHkgY2hhbmdlZC4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gY2FzZQor
ICAgICAgICAvLyB0aGUgYXR0YWNobWVudCB2aWV3IGlzIG5vdCB0aGUgV0tWaWV3LgorICAgICAg
ICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVk
UGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVj
dG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgTlNS
ZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7CisgICAgTlNSZWN0
IG9sZEluc3BlY3RvclZpZXdGcmFtZSA9IGluc3BlY3RvclZpZXcuZnJhbWU7CisgICAgTlNSZWN0
IG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TWmVyb1JlY3Q7CisgICAgTlNSZWN0IHBhcmVudEJv
dW5kcyA9IGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kczsKKyAgICBDR0Zsb2F0IGluc3Bl
Y3RlZFZpZXdUb3AgPSBOU01heFkoaW5zcGVjdGVkVmlld0ZyYW1lKTsKKworICAgIHN3aXRjaCAo
bV9hdHRhY2htZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewor
ICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCisgICAgICAgICAgICBjdXJyZW50RGltZW5z
aW9uID0gTlNIZWlnaHQob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0
IHBhcmVudEhlaWdodCA9IE5TSGVpZ2h0KHBhcmVudEJvdW5kcyk7CisgICAgICAgIENHRmxvYXQg
aW5zcGVjdG9ySGVpZ2h0ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWlu
ZWRBdHRhY2hlZFdpbmRvd0hlaWdodChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRIZWlnaHQpOwor
CisgICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2
aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCisgICAgICAgIGluc3BlY3RlZFZp
ZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgaW5zcGVjdG9ySGVpZ2h0LCBOU1dpZHRoKHBhcmVudEJv
dW5kcyksIGluc3BlY3RlZFZpZXdUb3AgLSBpbnNwZWN0b3JIZWlnaHQpOworICAgICAgICBuZXdJ
bnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmll
d0ZyYW1lKSwgaW5zcGVjdG9ySGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5z
aW9uKQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9y
Vmlld0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJl
bnRCb3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnRE
aW1lbnNpb24sIHBhcmVudFdpZHRoKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBv
c2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3
b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUg
aW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMg
dGhlIGluc3BlY3RlZCB2aWV3LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VS
ZWN0KDAsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3Ap
OworICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KHBhcmVudFdpZHRo
IC0gaW5zcGVjdG9yV2lkdGgsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3Vu
ZHMpKTsKKworICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3Rv
clZpZXcud2luZG93KSB7CisgICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBb
aW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRl
bnRMYXlvdXRSZWN0IGZyb21WaWV3Om5pbF07CisgICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3
RnJhbWUgPSBOU0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50
TGF5b3V0UmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBBdHRhY2htZW50U2lkZTo6TGVmdDogeworICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24p
CisgICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3
RnJhbWUpOworCisgICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJv
dW5kcyk7CisgICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVu
c2lvbiwgcGFyZW50V2lkdGgpOworCisgICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRp
b24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsu
IEJ1dCBkb24ndCB1c2UgdGhhdAorICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNw
ZWN0b3IgdmlldyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUg
aW5zcGVjdGVkIHZpZXcuCisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3Qo
aW5zcGVjdG9yV2lkdGgsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3Rl
ZFZpZXdUb3ApOworICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAs
IDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKKworICAgICAgICBp
ZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7Cisg
ICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBl
cnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21W
aWV3Om5pbF07CisgICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2Vj
dGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIGlmIChOU0VxdWFsUmVj
dHMob2xkSW5zcGVjdG9yVmlld0ZyYW1lLCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUpICYmIE5TRXF1
YWxSZWN0cyhbaW5zcGVjdGVkVmlldyBmcmFtZV0sIGluc3BlY3RlZFZpZXdGcmFtZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgdG8gbWFrZSBzdXJl
IHRoZSBsYXllcnMgZm9yIGJvdGggdmlld3MgcmVzaXplIGluIHN5bmMuCisgICAgW2luc3BlY3Rv
clZpZXcud2luZG93IGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07CisKKyAgICBbaW5z
cGVjdG9yVmlldyBzZXRGcmFtZTpuZXdJbnNwZWN0b3JWaWV3RnJhbWVdOworICAgIFtpbnNwZWN0
ZWRWaWV3IHNldEZyYW1lOmluc3BlY3RlZFZpZXdGcmFtZV07Cit9CisKK3Vuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgTlNW
aWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50
VmlldygpOworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZy
YW1lXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0
LnNpemUuaGVpZ2h0KTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGlu
c3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBOU1JlY3QgaW5z
cGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLndpZHRoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQoreworICAgIE5TVmlldyAqaW5z
cGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsK
KyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3ZWJWaWV3XTsKKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9p
bnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2lu
ZG93IGNsb3NlXTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorCisg
ICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBDR0Zsb2F0IGN1
cnJlbnREaW1lbnNpb247CisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2Fz
ZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRv
cmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld01heFlNYXJnaW5dOworICAg
ICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6UmlnaHQ6CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6
TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01pblhNYXJnaW5dOworICAgICAgICBjdXJyZW50
RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRX
aWR0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0Ogor
ICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNp
emFibGUgfCBOU1ZpZXdNYXhYTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGlu
c3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGN1cnJl
bnREaW1lbnNpb24pOworCisgICAgW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGFkZFN1YnZpZXc6
aW5zcGVjdG9yVmlldyBwb3NpdGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzppbnNwZWN0
ZWRWaWV3XTsKKyAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOmlu
c3BlY3RvclZpZXddOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFj
aCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNw
ZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFtt
X2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAgW2luc3BlY3RvclZpZXcg
cmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXpp
bmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOworCisgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgd2Ugc2l6ZSB0aGUgaW5zcGVjdGVkIHZpZXcncyBmcmFtZSBhZnRl
ciBkZXRhY2hpbmcgc28gdGhhdCBpdCB0YWtlcyB1cCB0aGUgc3BhY2UgdGhhdCB0aGUKKyAgICAv
LyBhdHRhY2hlZCBpbnNwZWN0b3IgdXNlZCB0by4gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBv
ZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KKwor
ICAgIGluc3BlY3RlZFZpZXcuZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVj
dGVkVmlldy5zdXBlcnZpZXcuYm91bmRzKSwgTlNNYXhZKGluc3BlY3RlZFZpZXcuZnJhbWUpKTsK
KworICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMg
dGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCisgICAgLy8gYW5kIHdlIHNo
b3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgorICAgIGlmICgh
bV9pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIG9wZW4oKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShoZWlnaHQpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lk
dGgpCit7CisgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSh3aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX3NoZWV0UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3
ZWJWaWV3XS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOworfQorCitTdHJpbmcgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBb
TlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUki
XTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTlNT
dHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIk1haW4iIG9mVHlwZTpAImh0
bWwiXTsKKyAgICBBU1NFUlQocGF0aCAmJiBwYXRoLmxlbmd0aCk7CisgICAgaWYgKCFwYXRoKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKK30KKworU3RyaW5nIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgTlNCdW5kbGUg
KmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJ
bnNwZWN0b3JVSSJdOworICAgIGlmICghYnVuZGxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QuaHRtbCBpbiBQcm9kdWN0aW9uIGJ1
aWxkcy4KKyAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiVGVz
dCIgb2ZUeXBlOkAiaHRtbCJdOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9y
eTpOT10uYWJzb2x1dGVTdHJpbmc7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdG9yQmFzZVVSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5k
bGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOworICAgIGlmICgh
YnVuZGxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBOU1N0cmluZyAqcGF0aCA9
IGJ1bmRsZS5yZXNvdXJjZVBhdGg7CisgICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOwor
CisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpZRVNd
LmFic29sdXRlU3RyaW5nOworfQorCitzdGF0aWMgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9u
UGxpc3QoKQoreworICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBh
dGhGb3JEaXJlY3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9t
YWluTWFzaywgWUVTKSBvYmplY3RBdEluZGV4OjBdOworICAgIE5TU3RyaW5nICpzeXN0ZW1WZXJz
aW9uUGxpc3RQYXRoID0gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpAIkNvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Il07CisgICAgTlNEaWN0
aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uSW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhD
b250ZW50c09mRmlsZTpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoXTsKKyAgICByZXR1cm4gc3lzdGVt
VmVyc2lvbkluZm87Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6
aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCit7CisgICAgTlNEaWN0aW9uYXJ5ICpwbGlzdCA9IHN5
c3RlbVZlcnNpb25QbGlzdCgpOworCisgICAgRGVidWdnYWJsZUluZm9EYXRhIHJlc3VsdDsKKyAg
ICByZXN1bHQuZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQ
YWdlOworICAgIHJlc3VsdC50YXJnZXRQbGF0Zm9ybU5hbWUgPSAibWFjT1MiX3M7CisgICAgcmVz
dWx0LnRhcmdldEJ1aWxkVmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdEJ1aWxkVmVyc2lvbiJdOwor
ICAgIHJlc3VsdC50YXJnZXRQcm9kdWN0VmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdFVzZXJWaXNp
YmxlVmVyc2lvbiJdOworICAgIHJlc3VsdC50YXJnZXRJc1NpbXVsYXRvciA9IGZhbHNlOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiZWU1Y2RmZjM4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKwor
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUlu
Zm8uaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNwZWN0b3JD
bGllbnQmIGluc3BlY3RvckNsaWVudCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0
SUQgdGFyZ2V0SUQsIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCisg
ICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29u
bmVjdGlvbklEKGNvbm5lY3Rpb25JRCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQor
ICAgICAgICAsIG1fZGVidWdnYWJsZVR5cGUoZGVidWdnYWJsZVR5cGUpCisgICAgeworICAgICAg
ICBtX3Byb3h5LT5zZXRDbGllbnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3Rv
clByb3h5KCkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAg
ICAgICAgbV9wcm94eS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisg
ICAgeworICAgICAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhp
cyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0Lgor
ICAgICAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8gPSBBUEk6OkRl
YnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKTsKKyAgICAg
ICAgZGVidWdnYWJsZUluZm8tPnNldERlYnVnZ2FibGVUeXBlKG1fZGVidWdnYWJsZVR5cGUpOwor
ICAgICAgICBtX3Byb3h5LT5sb2FkKFdURk1vdmUoZGVidWdnYWJsZUluZm8pLCBtX2luc3BlY3Rv
ckNsaWVudC5iYWNrZW5kQ29tbWFuZHNVUkwoKSk7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkK
KyAgICB7CisgICAgICAgIG1fcHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBt
X3Byb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSk7CisgICAgfQorCisgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nv
bm5lY3Rpb25JRCwgbV90YXJnZXRJRCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9z
ZUZyb21Gcm9udGVuZCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVu
dC5jbG9zZUZyb21Gcm9udGVuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAg
ICBSZW1vdGVJbnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OworICAgIENvbm5lY3Rp
b25JRCBtX2Nvbm5lY3Rpb25JRDsKKyAgICBUYXJnZXRJRCBtX3RhcmdldElEOworICAgIEluc3Bl
Y3Rvcjo6RGVidWdnYWJsZVR5cGUgbV9kZWJ1Z2dhYmxlVHlwZTsKK307CisKK1JlbW90ZUluc3Bl
Y3RvckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCB1cmwsIFJlbW90ZUluc3BlY3Rv
ck9ic2VydmVyJiBvYnNlcnZlcikKKyAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCit7CisgICAg
aWYgKCF1cmwuaG9zdCgpIHx8ICF1cmwucG9ydCgpKSB7CisgICAgICAgIExPR19FUlJPUigiSW52
YWxpZCBpbnNwZWN0b3IgdXJsOiAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29ubmVjdGlvbklEID0gY29ubmVjdEluZXQo
dXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpLCB1cmwucG9ydCgpLnZhbHVlKCkpOworICAgIGlmICgh
bV9jb25uZWN0aW9uSUQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnNwZWN0b3IgY2xpZW50IGNv
dWxkIG5vdCBjb25uZWN0IHRvICVzIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOwor
fQorCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQorewor
fQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNv
bnN0IFN0cmluZyYgZXZlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQobV9jb25uZWN0aW9uSUQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBtZXNzYWdlID0gZXZl
bnQudXRmOCgpOworICAgIHNlbmQobV9jb25uZWN0aW9uSUQudmFsdWUoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsK
K30KKworSGFzaE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudDo6Q2FsbEhhbmRsZXI+JiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpc3BhdGNoTWFw
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5k
bGVyPj4gZGlzcGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+KHsKKyAgICAg
ICAgeyAiQmFja2VuZENvbW1hbmRzIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKSB9LAorICAgICAgICB7ICJTZXRU
YXJnZXRMaXN0Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNs
aWVudDo6c2V0VGFyZ2V0TGlzdCkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5k
Il9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKSB9LAorICAgIH0pOworCisgICAgcmV0dXJuIGRpc3BhdGNoTWFw
OworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c3RhcnRJbml0aWFsQ29tbXVuaWNh
dGlvbigpCit7CisgICAgYXV0byBldmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ZXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZXR1cEluc3BlY3RvckNsaWVudCJfcyk7Cisg
ICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uQ2xvc2VkKCkKK3sKKyAgICBtX3Rh
cmdldHMuY2xlYXIoKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLmNsZWFyKCk7CisgICAgbV9v
YnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExp
c3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpZENs
b3NlKENvbm5lY3Rpb25JRCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAg
ICAgIGNvbm5lY3Rpb25DbG9zZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6Omluc3BlY3QoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFy
Z2V0SUQsIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCit7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFp
cihjb25uZWN0aW9uSUQsIHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQs
IGRlYnVnZ2FibGVUeXBlXSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3Bl
Y3RvclByb3h5PigqdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUp
OworICAgIH0pOworCisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvIHNldHVwRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHNl
dHVwRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZXR1cCJfcyk7CisgICAgc2V0dXBFdmVu
dC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAgIHNldHVw
RXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYklu
c3BlY3RvckV2ZW50KHNldHVwRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmxvYWQoKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdl
dElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgYXV0byBiYWNrZW5k
RXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRFdmVudC0+c2V0U3Ry
aW5nKCJldmVudCJfcywgIlNlbmRNZXNzYWdlVG9CYWNrZW5kIl9zKTsKKyAgICBiYWNrZW5kRXZl
bnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBiYWNr
ZW5kRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgYmFja2Vu
ZEV2ZW50LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpOworICAgIHNlbmRXZWJJbnNw
ZWN0b3JFdmVudChiYWNrZW5kRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0
aW9uSUQsIFRhcmdldElEIHRhcmdldElEKQoreworICAgIGF1dG8gY2xvc2VkRXZlbnQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGNsb3NlZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9z
LCAiRnJvbnRlbmREaWRDbG9zZSJfcyk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoImNv
bm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdl
cigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY2xv
c2VkRXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVt
b3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBFdmVudCYgZXZl
bnQpCit7CisgICAgaWYgKCFldmVudC5tZXNzYWdlIHx8IGV2ZW50Lm1lc3NhZ2UtPmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3Ry
aW5nKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlKGV2ZW50Lm1l
c3NhZ2UtPnV0ZjgoKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFy
Z2V0TGlzdChjb25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9u
SUQgfHwgIWV2ZW50Lm1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gbWVzc2FnZVZhbHVlOworICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihl
dmVudC5tZXNzYWdlLnZhbHVlKCksIG1lc3NhZ2VWYWx1ZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gbWVzc2FnZUFycmF5OworICAgIGlmICghbWVzc2FnZVZh
bHVlLT5hc0FycmF5KG1lc3NhZ2VBcnJheSkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxUYXJnZXQ+IHRhcmdldExpc3Q7CisgICAgZm9yIChhdXRvJiBpdGVtVmFsdWUgOiAqbWVzc2Fn
ZUFycmF5KSB7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmplY3Q7CisgICAg
ICAgIGlmICghaXRlbVZhbHVlLT5hc09iamVjdChpdGVtT2JqZWN0KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIFRhcmdldCB0YXJnZXQ7CisgICAgICAgIGlmICghaXRlbU9iamVj
dC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldC5pZCkKKyAgICAgICAgICAgIHx8ICFp
dGVtT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MsIHRhcmdldC5uYW1lKQorICAgICAgICAgICAg
fHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygidXJsIl9zLCB0YXJnZXQudXJsKQorICAgICAgICAg
ICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygidHlwZSJfcywgdGFyZ2V0LnR5cGUpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGFyZ2V0TGlzdC5hcHBlbmQoV1RGTW92ZSh0
YXJnZXQpKTsKKyAgICB9CisKKyAgICBhdXRvIGNvbm5lY3Rpb25JRCA9IGV2ZW50LmNvbm5lY3Rp
b25JRC52YWx1ZSgpOworCisgICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0cyB0byByZW1vdmUgdGhl
bS4KKyAgICBWZWN0b3I8VGFyZ2V0SUQsIDQ+IHRhcmdldHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1
dG8mIHBhaXIgOiBtX2luc3BlY3RvclByb3h5TWFwLmtleXMoKSkgeworICAgICAgICBpZiAocGFp
ci5maXJzdCAhPSBjb25uZWN0aW9uSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogdGFyZ2V0
TGlzdCkgeworICAgICAgICAgICAgaWYgKHRhcmdldC5pZCA9PSBwYWlyLnNlY29uZCkgeworICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICB0
YXJnZXRzVG9SZW1vdmUuYXBwZW5kKHBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChhdXRv
JiB0YXJnZXRJRCA6IHRhcmdldHNUb1JlbW92ZSkKKyAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1h
cC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworCisgICAg
bV90YXJnZXRzLnNldChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOworICAgIG1f
b2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2ZW50JiBldmVudCkKK3sK
KyAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQudGFyZ2V0SUQgfHwgIWV2ZW50
Lm1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJveHkgPSBtX2luc3BlY3Rv
clByb3h5TWFwLmdldChzdGQ6Om1ha2VfcGFpcihldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKSwg
ZXZlbnQudGFyZ2V0SUQudmFsdWUoKSkpOworICAgIGlmICghcHJveHkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcm94eS0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90
ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOWY1MWQ2M2RlYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRy
b2xsYWJsZVRhcmdldC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2Fi
bGVUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Owor
Y2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2Vy
dmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGll
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVj
dG9yQ2xpZW50JikgPSAwOworfTsKKwordXNpbmcgQ29ubmVjdGlvbklEID0gSW5zcGVjdG9yOjpD
b25uZWN0aW9uSUQ7Cit1c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rvcjo6VGFyZ2V0SUQ7CisKK2Ns
YXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
KCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCwgUmVtb3RlSW5zcGVj
dG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7CisKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHVwZGF0ZSB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHRvIHVzZSBEZWJ1
Z2dhYmxlVHlwZSBpbnN0ZWFkIG9mIFN0cmluZyBmb3IgdGhlIHRhcmdldCB0eXBlLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNDcKKyAgICBzdHJ1
Y3QgVGFyZ2V0IHsKKyAgICAgICAgVGFyZ2V0SUQgaWQ7CisgICAgICAgIFN0cmluZyB0eXBlOwor
ICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICB9OworCisgICAg
Y29uc3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorICAgIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1h
bmRzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KKworICAgIHZv
aWQgaW5zcGVjdChDb25uZWN0aW9uSUQsIFRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0
SUQsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlv
bklELCBUYXJnZXRJRCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPFJlbW90ZUluc3BlY3RvckNsaWVudD47CisKKyAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11
bmljYXRpb24oKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKKworICAgIHZvaWQgc2V0
VGFyZ2V0TGlzdChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQm
KTsKKworICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBmaW5hbDsKKyAgICBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIGZpbmFsOworCisgICAgdm9pZCBz
ZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgbV9iYWNr
ZW5kQ29tbWFuZHNVUkw7CisgICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7
CisgICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKKyAgICBIYXNoTWFw
PENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKKyAgICBIYXNoTWFwPHN0
ZDo6cGFpcjxDb25uZWN0aW9uSUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUlu
c3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdiYzQ1NWQzZTYyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQ
cm90b2NvbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIuaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJTG9h
ZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVVz
ZXJDb250ZW50V29ybGQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgorI2lu
Y2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK2NsYXNzIFNjcmlwdE1lc3NhZ2VDbGllbnQgZmluYWwgOiBwdWJsaWMgV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgU2NyaXB0TWVzc2FnZUNsaWVudChSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXImIGluc3BlY3RvclByb3RvY29sSGFuZGxlcikKKyAgICAgICAgOiBtX2luc3Bl
Y3RvclByb3RvY29sSGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsgfQorCisgICAg
flNjcmlwdE1lc3NhZ2VDbGllbnQoKSB7IH0KKworICAgIHZvaWQgZGlkUG9zdE1lc3NhZ2UoV2Vi
UGFnZVByb3h5JiBwYWdlLCBGcmFtZUluZm9EYXRhJiYsIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSYgc2VyaWFsaXplZFNjcmlwdFZhbHVlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
YXV0byB0b2tlbnMgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUudG9TdHJpbmcoKS5zcGxpdCgiOiIp
OworICAgICAgICBpZiAodG9rZW5zLnNpemUoKSAhPSAzKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIFVSTCByZXF1ZXN0VVJMIHsgeyB9LCBwYWdlLnBhZ2VMb2FkU3RhdGUoKS51cmwo
KSB9OworICAgICAgICBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlci5pbnNwZWN0KHJlcXVlc3RV
UkwuaG9zdEFuZFBvcnQoKSwgdG9rZW5zWzBdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMV0udG9V
SW50U3RyaWN0KCksIHRva2Vuc1syXSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlciYgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI7Cit9Owor
CitjbGFzcyBMb2FkZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpMb2FkZXJDbGllbnQgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExvYWRlckNsaWVudChG
dW5jdGlvbjx2b2lkKCk+JiYgbG9hZGVkQ2FsbGJhY2spCisgICAgICAgIDogbV9sb2FkZWRDYWxs
YmFjayB7IFdURk1vdmUobG9hZGVkQ2FsbGJhY2spIH0geyB9CisKKyAgICB2b2lkIGRpZEZpbmlz
aExvYWRGb3JGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94
eSYsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6T2JqZWN0KikgZmluYWwKKyAgICB7CisgICAgICAg
IG1fbG9hZGVkQ2FsbGJhY2soKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb248dm9p
ZCgpPiBtX2xvYWRlZENhbGxiYWNrOworfTsKKworc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6
RGVidWdnYWJsZVR5cGU+IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgZGVidWdnYWJsZVR5cGVTdHJpbmcpCit7CisgICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5n
ID09ICJqYXZhc2NyaXB0Il9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxl
VHlwZTo6SmF2YVNjcmlwdDsKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInBhZ2Ui
X3MpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpQYWdlOworICAg
IGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAic2VydmljZS13b3JrZXIiX3MpCisgICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpTZXJ2aWNlV29ya2VyOworICAgIGlm
IChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAid2ViLXBhZ2UiX3MpCisgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOworCisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6Omluc3BlY3Qo
Y29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFy
Z2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIGRlYnVnZ2Fi
bGVUeXBlID0gcGFyc2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmcodHlwZSk7CisgICAgaWYgKCFk
ZWJ1Z2dhYmxlVHlwZSkgeworICAgICAgICBMT0dfRVJST1IoIlVua25vd24gZGVidWdnYWJsZSB0
eXBlOiBcIiVzXCIiLCB0eXBlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1faW5zcGVjdG9yQ2xpZW50KQorICAgICAgICBtX2luc3BlY3RvckNsaWVu
dC0+aW5zcGVjdChjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZS52YWx1ZSgp
KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnJ1blNjcmlwdChj
b25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBtX3BhZ2UucnVuSmF2YVNjcmlwdEluTWFpbkZy
YW1lKHsgc2NyaXB0LCBmYWxzZSwgV1RGOjpudWxsb3B0LCBmYWxzZSB9LCAKKyAgICAgICAgW10o
QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBPcHRpb25hbDxXZWJDb3JlOjpFeGNlcHRpb25E
ZXRhaWxzPiBleGNlcHRpb25EZXRhaWxzLCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAg
ICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkV4
Y2VwdGlvbiBydW5uaW5nIHNjcmlwdCBcIiVzXCIiLCBleGNlcHRpb25EZXRhaWxzLT5tZXNzYWdl
LnV0ZjgoKS5kYXRhKCkpOworICAgIH0pOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3Rv
Y29sSGFuZGxlcjo6dGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBjbGll
bnQpCit7CisgICAgU3RyaW5nQnVpbGRlciBodG1sOworICAgIGlmIChjbGllbnQudGFyZ2V0cygp
LmlzRW1wdHkoKSkKKyAgICAgICAgaHRtbC5hcHBlbmQoIjxwPk5vIHRhcmdldHMgZm91bmQ8L3A+
Il9zKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaHRtbC5hcHBlbmQoIjx0YWJsZT4iKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBjb25uZWN0aW9uSUQgOiBjbGllbnQudGFyZ2V0cygpLmtleXMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjbGllbnQudGFyZ2V0cygpLmdldChjb25u
ZWN0aW9uSUQpKSB7CisgICAgICAgICAgICAgICAgaHRtbC5hcHBlbmQobWFrZVN0cmluZygKKyAg
ICAgICAgICAgICAgICAgICAgIjx0Ym9keT48dHI+IgorICAgICAgICAgICAgICAgICAgICAiPHRk
IGNsYXNzPVwiZGF0YVwiPjxkaXYgY2xhc3M9XCJ0YXJnZXRuYW1lXCI+IiwgdGFyZ2V0Lm5hbWUs
ICI8L2Rpdj48ZGl2IGNsYXNzPVwidGFyZ2V0dXJsXCI+IiwgdGFyZ2V0LnVybCwgIjwvZGl2Pjwv
dGQ+IgorICAgICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwiaW5wdXRcIj48aW5wdXQgdHlw
ZT1cImJ1dHRvblwiIHZhbHVlPVwiSW5zcGVjdFwiIG9uY2xpY2s9XCJ3aW5kb3cud2Via2l0Lm1l
c3NhZ2VIYW5kbGVycy5pbnNwZWN0b3IucG9zdE1lc3NhZ2UoXFwnIiwgY29ubmVjdGlvbklELCAi
OiIsIHRhcmdldC5pZCwgIjoiLCB0YXJnZXQudHlwZSwgIlxcJyk7XCI+PC90ZD4iCisgICAgICAg
ICAgICAgICAgICAgICI8L3RyPjwvdGJvZHk+IgorICAgICAgICAgICAgICAgICkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGh0bWwuYXBwZW5kKCI8L3RhYmxlPiIpOworICAg
IH0KKyAgICBtX3RhcmdldExpc3RzSHRtbCA9IGh0bWwudG9TdHJpbmcoKTsKKyAgICBpZiAobV9w
YWdlTG9hZGVkKQorICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjp1cGRhdGVUYXJnZXRMaXN0KCkKK3sKKyAgICBpZiAo
IW1fdGFyZ2V0TGlzdHNIdG1sLmlzRW1wdHkoKSkgeworICAgICAgICBydW5TY3JpcHQobWFrZVN0
cmluZygidXBkYXRlVGFyZ2V0cyhgIiwgbV90YXJnZXRMaXN0c0h0bWwsICJgKTsiKSk7CisgICAg
ICAgIG1fdGFyZ2V0TGlzdHNIdG1sID0geyB9OworICAgIH0KK30KKwordm9pZCBSZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXI6OnBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYgcGFn
ZVByb3h5LCBXZWJVUkxTY2hlbWVUYXNrJiB0YXNrKQoreworICAgIGF1dG8mIHJlcXVlc3RVUkwg
PSB0YXNrLnJlcXVlc3QoKS51cmwoKTsKKworICAgIC8vIERlc3Ryb3kgdGhlIGNsaWVudCBiZWZv
cmUgY3JlYXRpbmcgYSBuZXcgY29ubmVjdGlvbiBzbyBpdCBjYW4gY29ubmVjdCB0byB0aGUgc2Ft
ZSBwb3J0CisgICAgbV9pbnNwZWN0b3JDbGllbnQgPSBudWxscHRyOworICAgIG1faW5zcGVjdG9y
Q2xpZW50ID0gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+KHJlcXVlc3RVUkwsICp0
aGlzKTsKKworICAgIC8vIFNldHVwIHRhcmdldCBwb3N0TWVzc2FnZSBsaXN0ZW5lcgorICAgIGF1
dG8gaGFuZGxlciA9IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpjcmVhdGUobWFrZVVuaXF1ZTxT
Y3JpcHRNZXNzYWdlQ2xpZW50PigqdGhpcyksICJpbnNwZWN0b3IiLCBBUEk6OlVzZXJDb250ZW50
V29ybGQ6Om5vcm1hbFdvcmxkKCkpOworICAgIHBhZ2VQcm94eS5wYWdlR3JvdXAoKS51c2VyQ29u
dGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIoaGFuZGxlci5nZXQo
KSk7CisKKyAgICAvLyBTZXR1cCBsb2FkZXIgY2xpZW50IHRvIGdldCBub3RpZmllZCBvZiBwYWdl
IGxvYWQKKyAgICBtX3BhZ2Uuc2V0TG9hZGVyQ2xpZW50KG1ha2VVbmlxdWU8TG9hZGVyQ2xpZW50
PihbdGhpc10geworICAgICAgICBtX3BhZ2VMb2FkZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVU
YXJnZXRMaXN0KCk7CisgICAgfSkpOworICAgIG1fcGFnZUxvYWRlZCA9IGZhbHNlOworCisgICAg
U3RyaW5nQnVpbGRlciBodG1sQnVpbGRlcjsKKyAgICBodG1sQnVpbGRlci5hcHBlbmQoCisgICAg
ICAgICI8aHRtbD48aGVhZD48dGl0bGU+UmVtb3RlIEluc3BlY3RvcjwvdGl0bGU+IgorICAgICAg
ICAiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9dXRmLThcIiAvPiIKKyAgICAgICAgIjxzdHlsZT4iCisgICAgICAgICIgIGgxIHsg
Y29sb3I6ICNiYWJkYjY7IHRleHQtc2hhZG93OiAwIDFweCAwIHdoaXRlOyBtYXJnaW4tYm90dG9t
OiAwOyB9IgorICAgICAgICAiICBodG1sIHsgZm9udC1mYW1pbHk6IC13ZWJraXQtc3lzdGVtLWZv
bnQ7IGZvbnQtc2l6ZTogMTFwdDsgY29sb3I6ICMyZTM0MzY7IHBhZGRpbmc6IDIwcHggMjBweCAw
IDIwcHg7IGJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjQ7ICIKKyAgICAgICAgIiAgICAgICAgIGJh
Y2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBi
b3R0b20sIGNvbG9yLXN0b3AoMCwgI2VlZWVlYyksIGNvbG9yLXN0b3AoMSwgI2Y2ZjZmNCkpOyIK
KyAgICAgICAgIiAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSA1ZW07IGJhY2tncm91bmQt
cmVwZWF0OiBuby1yZXBlYXQ7IH0iCisgICAgICAgICIgIHRhYmxlIHsgd2lkdGg6IDEwMCU7IGJv
cmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHRhYmxlLWxheW91dDogZml4ZWQ7IH0iCisgICAgICAg
ICIgIHRhYmxlLCB0ZCB7IGJvcmRlcjogMXB4IHNvbGlkICNkM2Q3Y2Y7IGJvcmRlci1sZWZ0OiBu
b25lOyBib3JkZXItcmlnaHQ6IG5vbmU7IH0iCisgICAgICAgICIgIHAgeyBtYXJnaW4tYm90dG9t
OiAzMHB4OyB9IgorICAgICAgICAiICB0ZCB7IHBhZGRpbmc6IDE1cHg7IH0iCisgICAgICAgICIg
IHRkLmRhdGEgeyB3aWR0aDogMjAwcHg7IH0iCisgICAgICAgICIgIC50YXJnZXRuYW1lIHsgZm9u
dC13ZWlnaHQ6IGJvbGQ7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4
dC1vdmVyZmxvdzogZWxsaXBzaXM7IH0iCisgICAgICAgICIgIC50YXJnZXR1cmwgeyBjb2xvcjog
I2JhYmRiNjsgYmFja2dyb3VuZDogI2VlZTsgd29yZC13cmFwOiBicmVhay13b3JkOyBvdmVyZmxv
dy13cmFwOiBicmVhay13b3JkOyB9IgorICAgICAgICAiICB0ZC5pbnB1dCB7IHdpZHRoOiA2NHB4
OyB9IgorICAgICAgICAiICBpbnB1dCB7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiA4cHg7IH0iCisg
ICAgICAgICI8L3N0eWxlPiIKKyAgICAgICAgIjwvaGVhZD48Ym9keT48aDE+SW5zcGVjdGFibGUg
dGFyZ2V0czwvaDE+IgorICAgICAgICAiPGRpdiBpZD1cInRhcmdldGxpc3RcIj48cD5ObyB0YXJn
ZXRzIGZvdW5kPC9wPjwvZGl2PjwvYm9keT4iCisgICAgICAgICI8c2NyaXB0PiIKKyAgICAgICAg
ImZ1bmN0aW9uIHVwZGF0ZVRhcmdldHMoc3RyKSB7IgorICAgICAgICAgICAgImxldCB0YXJnZXRE
aXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0bGlzdCcpOyIKKyAgICAgICAgICAg
ICJ0YXJnZXREaXYuaW5uZXJIVE1MID0gc3RyOyIKKyAgICAgICAgIn0iCisgICAgICAgICI8L3Nj
cmlwdD4iKTsKKyAgICBodG1sQnVpbGRlci5hcHBlbmQoIjwvaHRtbD4iKTsKKworICAgIGF1dG8g
aHRtbCA9IGh0bWxCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOworICAgIGF1dG8gZGF0YSA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGh0bWwuZGF0YSgpLCBodG1sLmxlbmd0aCgpKTsKKyAgICBSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L2h0bWwiX3MsIGh0bWwubGVu
Z3RoKCksICJVVEYtOCJfcyk7CisgICAgdGFzay5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2Up
OworICAgIHRhc2suZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRhKSk7CisgICAgdGFzay5kaWRD
b21wbGV0ZShSZXNvdXJjZUVycm9yKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjBmNjAwZWZkZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIu
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJVUkxTY2hlbWVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBXVEYg
eworY2xhc3MgVVJMOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMU2No
ZW1lVGFzazsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyIGZpbmFsIDog
cHVibGljIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyLCBwdWJsaWMgV2ViVVJMU2NoZW1lSGFuZGxl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXI+IGNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKHBhZ2UpKTsgfQorCisgICAgdm9pZCBpbnNwZWN0
KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0
IFN0cmluZyYgdHlwZSk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICAgICAgOiBtX3BhZ2UocGFnZSkgeyB9CisK
KyAgICAvLyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlcgorICAgIHZvaWQgdGFyZ2V0TGlzdENoYW5n
ZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xv
c2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsIHsgfQorCisgICAgLy8gV2ViVVJMU2No
ZW1lSGFuZGxlcgorICAgIHZvaWQgcGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiwgV2Vi
VVJMU2NoZW1lVGFzayYpIGZpbmFsOworICAgIHZvaWQgcGxhdGZvcm1TdG9wVGFzayhXZWJQYWdl
UHJveHkmLCBXZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9CisgICAgdm9pZCBwbGF0Zm9ybVRh
c2tDb21wbGV0ZWQoV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorCisgICAgdm9pZCB1cGRh
dGVUYXJnZXRMaXN0KCk7CisKKyAgICB2b2lkIHJ1blNjcmlwdChjb25zdCBTdHJpbmcmKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+IG1faW5zcGVjdG9yQ2xp
ZW50OworICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIGJvb2wgbV9wYWdlTG9hZGVkIHsg
ZmFsc2UgfTsKKyAgICBTdHJpbmcgbV90YXJnZXRMaXN0c0h0bWw7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2lu
L1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMzkwYzJiOTRmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNw
cApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0ludFJlY3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBMUENUU1RS
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBURVhUKCJSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eVBvaW50ZXIiKTsKK2NvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGFzc05hbWUgPSBMIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3MiOworCitMUkVTVUxU
IENBTExCQUNLIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlO
VCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkqPig6OkdldFByb3AoaHduZCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJv
cCkpOworCisgICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIHJl
dHVybiBjbGllbnQtPnNpemVDaGFuZ2UoKTsKKyAgICBjYXNlIFdNX0NMT1NFOgorICAgICAgICBy
ZXR1cm4gY2xpZW50LT5vbkNsb3NlKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBh
cmFtKTsKK30KKworc3RhdGljIEFUT00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpCit7CisgICAgc3Rh
dGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworICAgIGlmIChoYXZl
UmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFdORENM
QVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3
Y2V4LnN0eWxlICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7
CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgICAgICA9
IDA7CisgICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7CisgICAgd2NleC5oQ3Vyc29yICAgICAg
ICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0g
MDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUg
ID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtICAg
ICAgICA9IDA7CisKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitMUkVTVUxUIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpzaXplQ2hhbmdlKCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJv
bnRlbmRIYW5kbGUsICZyZWN0KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRv
dygpLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0
LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIHJldHVybiAwOworfQorCitM
UkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvbkNsb3NlKCkKK3sKKyAgICA6OlNob3dX
aW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfSElERSk7CisgICAgZnJvbnRlbmREaWRDbG9zZSgp
OworICAgIHJldHVybiAwOworfQorCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgUmVmUHRy
PFdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3Ry
aW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOworICAgIHByZWZlcmVuY2VzLT5zZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7CisKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01P
REUpCisgICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Cisg
ICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVk
KHRydWUpOworI2VuZGlmCisKKyAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBX
ZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShu
dWxscHRyKSk7CisKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmln
dXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29s
KCZpbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsK
KyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkp
OworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsK
KworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCg2MCwgMjAwLCAxNTAwLCAxMDAwKTsKKyAgICBy
ZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgbV9mcm9udGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2lu
ZG93RXgoMCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQ
RURXSU5ET1csCisgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpLCAwLCAwLCAwLCAwKTsKKworICAgIDo6U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxl
LCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhB
TkRMRT4odGhpcykpOworICAgIFNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7
CisKKyAgICBSRUNUIHI7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZy
KTsKKyAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24s
IG1fZnJvbnRlbmRIYW5kbGUpOworICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Cit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Cit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbyYpIHsgfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICA6OkRlc3Ryb3lXaW5kb3co
bV9mcm9udGVuZEhhbmRsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yZGVhYzk3MzE3OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5z
cGVjdG9yUHJveHlXaW4uY3BwCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2luY2x1
ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCisj
aW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50SW1w
bC5oIgorI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2lu
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgorI2luY2x1ZGUgPFdlYktpdC9X
S1BhZ2UuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IExQQ1dTVFIgV2Vi
SW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IEwiV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIjsK
K3N0YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJXZWJJ
bnNwZWN0b3JQcm94eUNsYXNzIjsKKworc3RydWN0IEluc3BlY3RlZFdpbmRvd0luZm8geworICAg
IGludCBsZWZ0OworICAgIGludCB0b3A7CisgICAgaW50IHZpZXdXaWR0aDsKKyAgICBpbnQgdmll
d0hlaWdodDsKKyAgICBpbnQgcGFyZW50V2lkdGg7CisgICAgaW50IHBhcmVudEhlaWdodDsKK307
CisKK3N0YXRpYyBJbnNwZWN0ZWRXaW5kb3dJbmZvIGdldEluc3BlY3RlZFdpbmRvd0luZm8oSFdO
RCBpbnNwZWN0ZWRXaW5kb3csIEhXTkQgcGFyZW50V2luZG93KQoreworICAgIFJFQ1QgcmVjdDsK
KyAgICA6OkdldENsaWVudFJlY3QoaW5zcGVjdGVkV2luZG93LCAmcmVjdCk7CisgICAgOjpNYXBX
aW5kb3dQb2ludHMoaW5zcGVjdGVkV2luZG93LCBwYXJlbnRXaW5kb3csIChMUFBPSU5UKSZyZWN0
LCAyKTsKKworICAgIFJFQ1QgcGFyZW50UmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QocGFyZW50
V2luZG93LCAmcGFyZW50UmVjdCk7CisgICAgcmV0dXJuIHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwg
cmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgcGFyZW50UmVj
dC5yaWdodCAtIHBhcmVudFJlY3QubGVmdCwgcGFyZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0
LnRvcCB9OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3Nh
Z2UoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3
aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzogeworICAgICAgICBp
ZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHdp
bmRvd1BvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0lORE9XUE9TKj4obFBhcmFtKTsKKworICAgICAg
ICBpZiAod2luZG93UG9zLT5mbGFncyAmIFNXUF9OT1NJWkUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgSFdORCBwYXJlbnQgPSBHZXRQYXJlbnQoaHduZCk7CisgICAgICAgIFJFQ1Qg
cGFyZW50UmVjdDsKKyAgICAgICAgR2V0Q2xpZW50UmVjdChwYXJlbnQsICZwYXJlbnRSZWN0KTsK
KworICAgICAgICBSRUNUIGluc3BlY3RvclJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3QobV9p
bnNwZWN0b3JWaWV3V2luZG93LCAmaW5zcGVjdG9yUmVjdCk7CisKKyAgICAgICAgc3dpdGNoICht
X2F0dGFjaG1lbnRTaWRlKSB7CisgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTog
eworICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChp
bnNwZWN0b3JSZWN0LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wLCB3aW5kb3dQb3MtPmN5KTsK
KyAgICAgICAgICAgIHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OworICAgICAgICAg
ICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPngs
IHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3Rvckhl
aWdodCwgU1dQX05PWk9SREVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OlJpZ2h0OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5k
b3dXaWR0aChpbnNwZWN0b3JSZWN0LnJpZ2h0IC0gaW5zcGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQ
b3MtPmN4KTsKKyAgICAgICAgICAgIHdpbmRvd1Bvcy0+Y3ggLT0gaW5zcGVjdG9yV2lkdGg7Cisg
ICAgICAgICAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRv
d1Bvcy0+eCArIHdpbmRvd1Bvcy0+Y3gsIHdpbmRvd1Bvcy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdp
bmRvd1Bvcy0+Y3ksIFNXUF9OT1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JQcm94eTo6d25kUHJvYyhIV05EIGh3bmQs
IFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFdlYkluc3Bl
Y3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4o
OjpHZXRQcm9wKGh3bmQsIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKKyAgICBzd2l0
Y2ggKG1zZykgeworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgOjpTZXRXaW5kb3dQb3MoY2xp
ZW50LT5tX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIExPV09SRChsUGFyYW0pLCBISVdP
UkQobFBhcmFtKSwgU1dQX05PWk9SREVSKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBX
TV9DTE9TRToKKyAgICAgICAgY2xpZW50LT5jbG9zZSgpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDo6RGVmV2luZG93
UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQ
cm94eTo6cmVnaXN0ZXJXaW5kb3dDbGFzcygpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworCisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93
Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xh
c3MgPSB0cnVlOworCisgICAgV05EQ0xBU1NFWCB3Y2V4OworICAgIHdjZXguY2JTaXplID0gc2l6
ZW9mKFdORENMQVNTRVgpOworICAgIHdjZXguc3R5bGUgPSAwOworICAgIHdjZXgubHBmblduZFBy
b2MgPSB3bmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSA9IDA7CisgICAgd2NleC5jYlduZEV4
dHJhID0gMDsKKyAgICB3Y2V4LmhJbnN0YW5jZSA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7
CisgICAgd2NleC5oSWNvbiA9IDA7CisgICAgd2NleC5oQ3Vyc29yID0gTG9hZEN1cnNvcigwLCBJ
RENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCA9IDA7CisgICAgd2NleC5scHN6TWVu
dU5hbWUgPSAwOworICAgIHdjZXgubHBzekNsYXNzTmFtZSA9IFdlYkluc3BlY3RvclByb3h5Q2xh
c3NOYW1lOworICAgIHdjZXguaEljb25TbSA9IDA7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFz
c0V4KCZ3Y2V4KTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25B
Y3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1l
cyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUg
PSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7CisgICAgaWYgKHNv
dXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgeworICAgICAgICB0b0lt
cGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNvbnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0
PGNvbnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKHdlYklu
c3BlY3RvclByb3h5KTsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0g
dG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7CisKKyAgICAvLyBBbGxvdyBs
b2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgorICAgIGlmIChXZWJJbnNwZWN0b3JQ
cm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgeworICAgICAg
ICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5z
cGVjdG9yJ3MgcGFnZS4KKyAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKKworICAg
IC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIHdlYklu
c3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVz
dCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0
b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7CisgICAgd2Vi
SW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VS
VChpbnNwZWN0ZWRQYWdlKCkpOworCisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVu
Y2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOworI2lmIEVOQUJM
RShERVZFTE9QRVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhl
IFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3Mu
CisgICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7CisgICAg
cHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRy
dWUpOworI2VuZGlmCisgICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxl
VVJMcyh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7
IH0pOworICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9y
UGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7CisgICAgYXV0byBw
YWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2wo
aW5zcGVjdGlvbkxldmVsKCkpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5j
ZXMocHJlZmVyZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3Jv
dXAocGFnZUdyb3VwLnB0cigpKTsKKworICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZp
Z2F0aW9uQ2xpZW50ID0geworICAgICAgICB7IDAsIHRoaXMgfSwKKyAgICAgICAgZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvblJlc3BvbnNlCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZv
clBsdWdpbkxvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25h
bE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgorICAg
ICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZEZhaWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25h
bExvYWRJblN1YmZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9h
ZAorICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCisgICAgICAg
IG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIs
IC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCisgICAgICAgIHdlYlByb2Nl
c3NEaWRDcmFzaCwKKyAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQor
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAg
bnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3QKKyAgICB9OworCisgICAgUkVDVCByID0geyAwLCAwLCBz
dGF0aWNfY2FzdDxMT05HPihpbml0aWFsV2luZG93V2lkdGgpLCBzdGF0aWNfY2FzdDxMT05HPihp
bml0aWFsV2luZG93SGVpZ2h0KSB9OworICAgIGF1dG8gcGFnZSA9IGluc3BlY3RlZFBhZ2UoKTsK
KyAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBwYWdlLT52aWV3V2lkZ2V0KCk7CisgICAgbV9p
bnNwZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gOjpHZXRQYXJlbnQobV9pbnNwZWN0ZWRWaWV3V2lu
ZG93KTsKKyAgICBhdXRvIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRp
b24sIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0g
JnZpZXcubGVha1JlZigpOworICAgIGF1dG8gaW5zcGVjdG9yUGFnZSA9IG1faW5zcGVjdG9yVmll
dy0+cGFnZSgpOworICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IGluc3BlY3RvclBhZ2UtPnZp
ZXdXaWRnZXQoKTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNw
ZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisKKyAgICByZXR1cm4gaW5zcGVj
dG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2Fz
dGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOworICAgIG1f
aW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsK
KyAgICBpZiAobV9pbnNwZWN0b3JWaWV3V2luZG93KSB7CisgICAgICAgIDo6RGVzdHJveVdpbmRv
dyhtX2luc3BlY3RvclZpZXdXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cg
PSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKKyAg
ICAgICAgOjpSZW1vdmVQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQ
cm94eVBvaW50ZXJQcm9wKTsKKyAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVjdG9yRGV0
YWNoV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSBudWxscHRyOwor
ICAgIH0KKyAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBudWxscHRyOworICAgIG1faW5zcGVj
dGVkVmlld1BhcmVudFdpbmRvdyA9IG51bGxwdHI7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCit7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2Vi
Q29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJNYWluIiksIENGU1RSKCJodG1sIiksIENGU1RS
KCJXZWJJbnNwZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxVUkxS
ZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK1N0cmluZyBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworI2lmIFVTRShDRikK
KyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29w
eVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiVGVzdCIpLCBDRlNU
UigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOworICAgIHJldHVybiBDRlVSTEdl
dFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRp
ZgorfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQorewor
I2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGJhc2VVUkxSZWYgPSBhZG9wdENG
KENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigi
V2ViSW5zcGVjdG9yVUkiKSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIHJldHVybiBDRlVSTEdl
dFN0cmluZyhiYXNlVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRp
ZgorfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2Nh
bERlYnVnZ2FibGUoKQoreworICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1
Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhLgorICAgIHJldHVybiBEZWJ1
Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgUkVDVCByZWN0OworICAg
IDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKKyAgICByZXR1
cm4gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIFJFQ1QgcmVjdDsKKyAg
ICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7CisgICAgcmV0
dXJuIHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0
dGFjaGVkU2l6ZSA9IDMwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFj
aGVkV2lkdGggPSA3NTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hl
ZEhlaWdodCA9IDI1MDsKKworICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdyAmJiA6Okdl
dFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cpID09IG1faW5zcGVjdG9yRGV0YWNoV2luZG93
KSB7CisgICAgICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0
YWNoV2luZG93LCBTV19ISURFKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdl
QnJvYWRjYXN0ZXI6OmFkZExpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisK
KyAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKSB7Cisg
ICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRmb3JtSW5zcGVjdGVk
V2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRv
d0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRB
dHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2lu
ZG93V2lkdGgoKSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lk
dGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hl
ZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOworICAgIH0KKyAgICA6OlNob3dXaW5kb3co
bV9pbnNwZWN0b3JWaWV3V2luZG93LCBTV19TSE9XKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNS
dW5uaW5nUHJvY2VzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faW5zcGVjdG9y
RGV0YWNoV2luZG93KSB7CisgICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKKyAgICAgICAg
bV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFdlYkluc3BlY3Rv
clByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICAgICAgQ1df
VVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2lu
ZG93SGVpZ2h0LAorICAgICAgICAgICAgMCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwg
MCk7CisgICAgICAgIDo6U2V0UHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVj
dG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAg
ICB9CisKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3Rl
bmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisKKyAgICBSRUNUIHJlY3Q7CisgICAg
OjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCAmcmVjdCk7CisgICAgYXV0
byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5k
b3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRQYXJlbnQobV9pbnNw
ZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7CisgICAgOjpTZXRXaW5k
b3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5s
ZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2lu
ZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJ
bmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93
SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKKworICAg
IGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNo
V2luZG93LCBTV19TSE9XKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgYXV0byB3aW5k
b3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1f
aW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0
b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0
IC0gaGVpZ2h0LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCBoZWln
aHQsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2lu
ZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVu
dFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRv
d0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgYXV0
byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5k
b3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9p
bnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lkdGgsIHdp
bmRvd0luZm8udG9wLCB3aWR0aCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZv
LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdX
aW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFy
ZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2lu
ZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
c0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3Rh
dGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIC8qIHVybCAqLykK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFp
bGFiaWxpdHlDaGFuZ2VkKGJvb2wgLyogYXZhaWxhYmxlICovKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRXaW5kb3coKQoreworICAgIHBsYXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTI4Y2EyZmJmYi4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yVGFyZ2V0UHJveHkuaCIKLQotI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCi0j
aW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0
b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkm
IHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
VHlwZSB0eXBlKQotewotICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5
PihwYWdlLCB0YXJnZXRJZCwgdHlwZSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JU
YXJnZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQ
cm94eSYgcHJvdmlzaW9uYWxQYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IEluc3BlY3Rv
clRhcmdldFByb3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5
cGUpOwotICAgIHRhcmdldC0+bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNp
b25hbFBhZ2UpOwotICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KLUluc3BlY3RvclRhcmdldFByb3h5
OjpJbnNwZWN0b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQotICAgIDogbV9w
YWdlKHBhZ2UpCi0gICAgLCBtX2lkZW50aWZpZXIodGFyZ2V0SWQpCi0gICAgLCBtX3R5cGUodHlw
ZSkKLXsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAg
aWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVj
dGlvblR5cGUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3BhZ2UuaGFz
UnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOwotfQotCi12
b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KCkKLXsKLSAgICBpZiAoaXNQYXVz
ZWQoKSkKLSAgICAgICAgcmVzdW1lKCk7Ci0KLSAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsK
LSAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nv
bm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOwot
fQotCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7
Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5k
TWVzc2FnZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAg
ICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRC
YWNrZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSkpOwotfQotCi12b2lkIEluc3BlY3RvclRhcmdl
dFByb3h5OjpkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpCi17Ci0gICAgbV9wcm92aXNpb25h
bFBhZ2UgPSBudWxscHRyOwotfQotCi1ib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zp
c2lvbmFsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yVGFyZ2V0UHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyMzljZWM4
ZTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRh
cmdldFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgUHJvdmlzaW9uYWxQYWdlUHJveHk7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KLS8v
IE5PVEU6IFRoaXMgVUlQcm9jZXNzIHNpZGUgSW5zcGVjdG9yVGFyZ2V0IGRvZXNuJ3QgY2FyZSBh
Ym91dCB0aGUgZnJvbnRlbmQgY2hhbm5lbCwgc2luY2UKLS8vIGFueSB0YXJnZXQgLT4gZnJvbnRl
bmQgbWVzc2FnZXMgd2lsbCBiZSByb3V0ZWQgdG8gdGhlIFdlYlBhZ2VQcm94eSB3aXRoIGEgdGFy
Z2V0SWQuCi0KLWNsYXNzIEluc3BlY3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRQcm94eSk7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gY3JlYXRlKFdl
YlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQ
cm94eT4gY3JlYXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICBJbnNwZWN0b3JUYXJnZXRQ
cm94eShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRQcm94eSgpID0gZGVmYXVs
dDsKLQotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQotICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9u
YWxUYXJnZXQoKTsKLSAgICBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5
cGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLXBy
aXZhdGU6Ci0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAgU3RyaW5nIG1faWRlbnRpZmll
cjsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgbV90eXBlOwotICAgIFdlYWtQ
dHI8UHJvdmlzaW9uYWxQYWdlUHJveHk+IG1fcHJvdmlzaW9uYWxQYWdlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTJj
MjlmNDE4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKLSNpbmNsdWRlICJB
UElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQotICAgIDogbV9kZWJ1Z2dhYmxlSW5mbyhBUEk6OkRl
YnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKSkKLXsKLX0K
LQotUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6On5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpCi17
Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxh
YmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShhdmFpbGFibGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OmxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0
IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQotewotICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpOwotCi0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUlu
Zm8pOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOwotCi0g
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
SW5pdGlhbGl6ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2Vu
ZENvbW1hbmRzVVJMKSk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJM
KCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQmFja2VuZCgpCi17Ci0gICAgY2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6Y2xvc2VGcm9tQ3Jhc2goKQotewotICAgIC8vIEJlaGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQg
anVzdCBjbG9zZWQsIHNvIGNsaWVudHMgYXJlIGluZm9ybWVkIHRoZSBmcm9udGVuZCBpcyBnb25l
LgotICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6c2hvdygpCi17Ci0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmREaWRDbG9zZSgpCi17Ci0gICAgUmVmPFJlbW90
ZVdlYkluc3BlY3RvclByb3h5PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJvbUZyb250ZW5kKCk7Ci0KLSAgICBjbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpy
ZW9wZW4oKQotewotICAgIEFTU0VSVCghbV9iYWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgpKTsK
LQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgbG9hZChtX2RlYnVnZ2Fi
bGVJbmZvLmNvcHlSZWYoKSwgbV9iYWNrZW5kQ29tbWFuZHNVUkwpOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkKLXsKLSAgICBwbGF0Zm9ybVJlc2V0U3Rh
dGUoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkK
LXsKLSAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0g
ICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3RlZFVSTCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9y
Y2VTYXZlRGlhbG9nKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5k
KGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0g
ICAgcGxhdGZvcm1BcHBlbmQoc3VnZ2VzdGVkVVJMLCBjb250ZW50KTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBwbGF0Zm9ybVN0YXJ0V2lu
ZG93RHJhZygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvcGVuSW5OZXdU
YWIoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgcGxhdGZvcm1PcGVuSW5OZXdUYWIodXJsKTsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0
IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIHBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZVRvQmFja2VuZCht
ZXNzYWdlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpOwotCi0gICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwg
bnVsbHB0cik7Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKLSAgICBtX2luc3Bl
Y3RvclBhZ2UtPnByb2Nlc3MoKS5hc3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3Rv
clBhZ2UsIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17
Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5z
cGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQ
YWdlLT53ZWJQYWdlSUQoKSk7Ci0KLSAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3Rv
clBhZ2UpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLQotICAgIHBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotI2lmICFFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9S
TShXSU4pKQotV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikgeyB9Ci12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
b25zdCBDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKSB7IH0KLSNlbmRpZiAvLyAhRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RL
KSAmJiAhUExBVEZPUk0oV0lOKSkKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmFiNThmOGNlMDYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBOU1VS
TDsKLU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXI7Ci1PQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsK
LU9CSkNfQ0xBU1MgV0tXZWJWaWV3OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIENlcnRpZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBEZWJ1Z2dh
YmxlSW5mbzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsK
LWNsYXNzIFdlYlZpZXc7Ci0KLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCgpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSA9IDA7Ci19
OwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkoKSk7Ci0gICAgfQotCi0gICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2
b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50KSB7IG1f
Y2xpZW50ID0gY2xpZW50OyB9Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9v
bCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgbG9hZChSZWY8QVBJOjpE
ZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOwotICAg
IHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOwotICAgIHZvaWQgc2hvdygpOwotCi0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3cu
Z2V0KCk7IH0KLSAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotICAgIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7
IH0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgdXBkYXRlV2luZG93VGl0
bGUoY29uc3QgQ1N0cmluZyYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0g
ICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7Ci0gICAgTFJFU1VMVCBvbkNsb3NlKCk7Ci0KLSAgICBz
dGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFN
KTsKLSNlbmRpZgotCi0gICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOwotCi1wcml2YXRlOgotICAg
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdl
cy4KLSAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKLSAgICB2b2lkIHJlb3BlbigpOwotICAg
IHZvaWQgcmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBz
YXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotICAgIHZvaWQgc2V0U2hl
ZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgc3RhcnRXaW5kb3dE
cmFnKCk7Ci0gICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZv
aWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotICAg
IHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBjbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOwotCi0gICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgot
ICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
LSAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lk
IHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsK
LSAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotICAgIHZv
aWQgcGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0K
LSAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07
Ci0gICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07Ci0KLSAgICBS
ZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKLSAgICBTdHJpbmcgbV9i
YWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKLSAgICBSZXRhaW5QdHI8
TlNXaW5kb3c+IG1fd2luZG93OwotICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJldGFp
blB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7Ci0gICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fc2hlZXRSZWN0OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIEd0a1dp
ZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV93aW5kb3cgeyBu
dWxscHRyIH07Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAgSFdORCBtX2Zy
b250ZW5kSGFuZGxlOwotICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwOTFiNzhmYjYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisr
KyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0j
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAg
RnJvbnRlbmREaWRDbG9zZSgpCi0gICAgUmVvcGVuKCkKLSAgICBSZXNldFN0YXRlKCkKLSAgICBC
cmluZ1RvRnJvbnQoKQotCi0gICAgU2F2ZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50
LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi0gICAgQXBwZW5kKFN0cmlu
ZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQpCi0KLSAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QpCi0KLSAgICBTdGFydFdpbmRvd0RyYWcoKQotCi0gICAgT3BlbkluTmV3
VGFiKFN0cmluZyB1cmwpCi0gICAgU2hvd0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyBjZXJ0aWZpY2F0ZUluZm8pCi0KLSAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcg
bWVzc2FnZSkKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVj
dG9ySGlnaGxpZ2h0Vmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JI
aWdobGlnaHRWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ODM5MWM0MjBj
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotc3RydWN0IEhpZ2hsaWdodDsKLX0KLQotQGludGVyZmFjZSBX
S0luc3BlY3RvckhpZ2hsaWdodFZpZXcgOiBVSVZpZXcgewotICAgIE5TTXV0YWJsZUFycmF5ICpf
bGF5ZXJzOyAvLyBDQVNoYXBlTGF5ZXJzLgotfQotLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNv
cmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0OwotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1ZjBjMDNlMzMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCIKLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0dlb21ldHJ5VXRpbGl0aWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXku
aD4KLQotQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldwotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lCi17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
X2xheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsK
LSAgICBbX2xheWVycyByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZv
aWQpX3JlbW92ZUFsbExheWVycwotewotICAgIGZvciAoQ0FTaGFwZUxheWVyICpsYXllciBpbiBf
bGF5ZXJzKQotICAgICAgICBbbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFtfbGF5
ZXJzIHJlbW92ZUFsbE9iamVjdHNdOwotfQotCi0tICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUlu
dGVnZXIpbnVtTGF5ZXJzCi17Ci0gICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBudW1MYXllcnMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwotCi0gICAg
Zm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKLSAgICAgICAgQ0FT
aGFwZUxheWVyICpsYXllciA9IFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAg
W19sYXllcnMgYWRkT2JqZWN0OmxheWVyXTsKLSAgICAgICAgW3NlbGYubGF5ZXIgYWRkU3VibGF5
ZXI6bGF5ZXJdOwotICAgICAgICBbbGF5ZXIgcmVsZWFzZV07Ci0gICAgfQotfQotCi1zdGF0aWMg
Ym9vbCBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDIsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIGQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMiwgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgaW50ZXJzZWN0aW9uKSAKLXsKLSAgICAvLyBEbyB0aGUgbGluZXMgaW50
ZXJzZWN0PwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9p
bnQ7Ci0gICAgaWYgKCFmaW5kSW50ZXJzZWN0aW9uKHAxLCBwMiwgZDEsIGQyLCB0ZW1wb3JhcnlJ
bnRlcnNlY3Rpb25Qb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElzIHRo
ZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvbiB0aGUgbGluZT8KLSAgICBp
ZiAocDEueCgpID49IHAyLngoKSkgewotICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9u
UG9pbnQueCgpID4gcDEueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAy
LngoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDIueCgpIHx8IHRlbXBvcmFyeUlu
dGVyc2VjdGlvblBvaW50LngoKSA8IHAxLngoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHAxLnkoKSA+PSBwMi55KCkpIHsKLSAgICAgICAgaWYgKHRlbXBvcmFy
eUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAxLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Q
b2ludC55KCkgPCBwMi55KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAyLnkoKSB8
fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMS55KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50ZXJzZWN0aW9uID0gdGVtcG9yYXJ5SW50ZXJz
ZWN0aW9uUG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoaXMgcXVhZCBpbnRlcnNl
Y3Rpb24gd29ya3MgYmVjYXVzZSB0aGUgdHdvIHF1YWRzIGFyZSBrbm93biB0byBiZSBhdCB0aGUg
c2FtZQotLy8gcm90YXRpb24gYW5kIGNsb2Nrd2lzZS1uZXNzLgotc3RhdGljIFdlYkNvcmU6OkZs
b2F0UXVhZCBxdWFkSW50ZXJzZWN0aW9uKFdlYkNvcmU6OkZsb2F0UXVhZCBib3VuZHMsIFdlYkNv
cmU6OkZsb2F0UXVhZCB0b0NsYW1wKQotewotICAgIC8vIFJlc3VsdGluZyBwb2ludHMuCi0gICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBwMSwgcDIsIHAzLCBwNDsKLSAgICBib29sIGNvbnRhaW5zUG9p
bnQxID0gZmFsc2U7Ci0gICAgYm9vbCBjb250YWluc1BvaW50MiA9IGZhbHNlOwotICAgIGJvb2wg
Y29udGFpbnNQb2ludDMgPSBmYWxzZTsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQ0ID0gZmFsc2U7
Ci0gICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDEgPSBmYWxzZTsKLSAgICBib29sIGludGVyc2Vj
dEZvclBvaW50MiA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmFsc2U7
Ci0gICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDQgPSBmYWxzZTsKLQotICAgIC8vIFRvcCAvIGJv
dHRvbSB2ZXJ0aWNhbCBjbGFtcGluZy4KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9D
bGFtcC5wMSgpKSkgewotICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7Ci0gICAgICAgIHAx
ID0gdG9DbGFtcC5wMSgpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDEgPSBm
aW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAy
KCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwMSkpKQotICAgICAgICBwMSA9IHRvQ2xh
bXAucDEoKTsKLQotICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAyKCkpKSB7
Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKLSAgICAgICAgcDIgPSB0b0NsYW1wLnAy
KCk7Ci0gICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MiA9IGZpbmRJbnRlcnNlY3Rp
b25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9DbGFtcC5w
MigpLCB0b0NsYW1wLnAzKCksIHAyKSkpCi0gICAgICAgIHAyID0gdG9DbGFtcC5wMigpOwotCi0g
ICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDMoKSkpIHsKLSAgICAgICAgY29u
dGFpbnNQb2ludDMgPSB0cnVlOwotICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKLSAgICB9IGVs
c2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdl
ZW5Qb2ludHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAu
cDMoKSwgcDMpKSkKLSAgICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7Ci0KLSAgICBpZiAoYm91bmRz
LmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wNCgpKSkgewotICAgICAgICBjb250YWluc1BvaW50NCA9
IHRydWU7Ci0gICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOwotICAgIH0gZWxzZSBpZiAoIShpbnRl
cnNlY3RGb3JQb2ludDQgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3Vu
ZHMucDQoKSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwNCkpKQot
ICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsKLQotICAgIC8vIElmIG9ubHkgb25lIG9mIHRoZSBw
b2ludHMgaW50ZXJzZWN0ZWQgb24gZWl0aGVyIHRoZSB0b3Agb3IgYm90dG9tIGxpbmUgdGhlbiB3
ZQotICAgIC8vIGNhbiBjbGFtcCB0aGUgb3RoZXIgcG9pbnQgb24gdGhhdCBsaW5lIHRvIHRoZSBj
b3JuZXIgb2YgdGhlIGJvdW5kcy4KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmIGludGVyc2Vj
dEZvclBvaW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9p
bnQxID0gdHJ1ZTsKLSAgICAgICAgcDEgPSBib3VuZHMucDEoKTsKLSAgICB9IGVsc2UgaWYgKCFj
b250YWluc1BvaW50MiAmJiBpbnRlcnNlY3RGb3JQb2ludDEgJiYgIWludGVyc2VjdEZvclBvaW50
MikgewotICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Ci0gICAgICAgIHAyID0gYm91bmRz
LnAyKCk7Ci0gICAgfQotICAgIGlmICghY29udGFpbnNQb2ludDQgJiYgaW50ZXJzZWN0Rm9yUG9p
bnQzICYmICFpbnRlcnNlY3RGb3JQb2ludDQpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDQgPSB0
cnVlOwotICAgICAgICBwNCA9IGJvdW5kcy5wNCgpOwotICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5z
UG9pbnQzICYmIGludGVyc2VjdEZvclBvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKSB7Ci0g
ICAgICAgIGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKLSAgICAgICAgcDMgPSBib3VuZHMucDMoKTsK
LSAgICB9Ci0KLSAgICAvLyBOb3cgd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gaG9yaXpvbnRhbCBj
bGFtcGluZyBmb3IgdW5hZGp1c3RlZCBwb2ludHMuCi0gICAgaWYgKCFjb250YWluc1BvaW50MiAm
JiAhaW50ZXJzZWN0Rm9yUG9pbnQyKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0
d2VlblBvaW50cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCksIHAxLCBwMiwgcDIpOwotICAgIGlm
ICghY29udGFpbnNQb2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50MykKLSAgICAgICAgZmluZElu
dGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBw
NCwgcDMsIHAzKTsKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2lu
dDEpCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5w
MSgpLCBib3VuZHMucDQoKSwgcDEsIHAyLCBwMSk7Ci0gICAgaWYgKCFjb250YWluc1BvaW50NCAm
JiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0
d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHA0LCBwMywgcDQpOwotCi0gICAg
cmV0dXJuIFdlYkNvcmU6OkZsb2F0UXVhZChwMSwgcDIsIHAzLCBwNCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxheWVyUGF0aFdpdGhIb2xlKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UXVhZCYgb3V0ZXJRdWFkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIGhvbGVRdWFk
KQotewotICAgIC8vIE5vdGhpbmcgdG8gc2hvdy4KLSAgICBpZiAob3V0ZXJRdWFkID09IGhvbGVR
dWFkIHx8IGhvbGVRdWFkLmNvbnRhaW5zUXVhZChvdXRlclF1YWQpKSB7Ci0gICAgICAgIGxheWVy
LnBhdGggPSBOVUxMOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUg
aXMgYSBuZWdhdGl2ZSBtYXJnaW4gLyBwYWRkaW5nIHRoZW4gdGhlIG91dGVyIGJveCBtaWdodCBu
b3QKLSAgICAvLyBmdWxseSBjb250YWluIHRoZSBob2xlIGJveC4gSW4gc3VjaCBjYXNlcyB3ZSBy
ZWNhbGN1bGF0ZSB0aGUgaG9sZSB0bwotICAgIC8vIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhl
IHR3byBxdWFkcy4KLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgaW5uZXJIb2xlOwotICAgIGlmIChv
dXRlclF1YWQuY29udGFpbnNRdWFkKGhvbGVRdWFkKSkKLSAgICAgICAgaW5uZXJIb2xlID0gaG9s
ZVF1YWQ7Ci0gICAgZWxzZQotICAgICAgICBpbm5lckhvbGUgPSBxdWFkSW50ZXJzZWN0aW9uKG91
dGVyUXVhZCwgaG9sZVF1YWQpOwotCi0gICAgLy8gQ2xvY2t3aXNlIGluc2lkZSByZWN0IChob2xl
KSwgQ291bnRlci1DbG9ja3dpc2Ugb3V0c2lkZSByZWN0IChmaWxsKS4KLSAgICBDR011dGFibGVQ
YXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7Ci0gICAgQ0dQYXRoTW92ZVRvUG9p
bnQocGF0aCwgMCwgaW5uZXJIb2xlLnAxKCkueCgpLCBpbm5lckhvbGUucDEoKS55KCkpOwotICAg
IENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMigpLngoKSwgaW5uZXJI
b2xlLnAyKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhv
bGUucDMoKS54KCksIGlubmVySG9sZS5wMygpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9p
bnQocGF0aCwgMCwgaW5uZXJIb2xlLnA0KCkueCgpLCBpbm5lckhvbGUucDQoKS55KCkpOwotICAg
IENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFk
LnAxKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQu
cDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
cGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOwotICAgIENH
UGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFk
LnAyKCkueSgpKTsKLSAgICBsYXllci5wYXRoID0gcGF0aDsKLSAgICBDR1BhdGhSZWxlYXNlKHBh
dGgpOwotfQotCi1zdGF0aWMgdm9pZCBsYXllclBhdGgoQ0FTaGFwZUxheWVyICpsYXllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQpCi17Ci0gICAgQ0dNdXRhYmxlUGF0aFJl
ZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0aE1vdmVUb1BvaW50KHBh
dGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKLSAgICBDR1Bh
dGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5w
NCgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAz
KCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBh
dGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKLSAgICBsYXll
ci5wYXRoID0gcGF0aDsKLSAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOwotfQotCi0tICh2b2lkKV9s
YXlvdXRGb3JOb2RlSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdo
dCBvZmZzZXQ6KHVuc2lnbmVkKW9mZnNldAotewotICAgIEFTU0VSVChbX2xheWVycyBjb3VudF0g
Pj0gb2Zmc2V0ICsgNCk7Ci0gICAgQVNTRVJUKGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPj0gb2Zm
c2V0ICsgNCk7Ci0gICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA8IG9mZnNldCArIDQgfHwgaGlnaGxp
Z2h0LnF1YWRzLnNpemUoKSA8IG9mZnNldCArIDQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENB
U2hhcGVMYXllciAqbWFyZ2luTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldF07
Ci0gICAgQ0FTaGFwZUxheWVyICpib3JkZXJMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6
b2Zmc2V0ICsgMV07Ci0gICAgQ0FTaGFwZUxheWVyICpwYWRkaW5nTGF5ZXIgPSBbX2xheWVycyBv
YmplY3RBdEluZGV4Om9mZnNldCArIDJdOwotICAgIENBU2hhcGVMYXllciAqY29udGVudExheWVy
ID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAzXTsKLQotICAgIFdlYkNvcmU6OkZs
b2F0UXVhZCBtYXJnaW5RdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldF07Ci0gICAgV2ViQ29y
ZTo6RmxvYXRRdWFkIGJvcmRlclF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMV07Ci0g
ICAgV2ViQ29yZTo6RmxvYXRRdWFkIHBhZGRpbmdRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNl
dCArIDJdOwotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBjb250ZW50UXVhZCA9IGhpZ2hsaWdodC5x
dWFkc1tvZmZzZXQgKyAzXTsKLQotICAgIG1hcmdpbkxheWVyLmZpbGxDb2xvciA9IGNhY2hlZENH
Q29sb3IoaGlnaGxpZ2h0Lm1hcmdpbkNvbG9yKTsKLSAgICBib3JkZXJMYXllci5maWxsQ29sb3Ig
PSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5ib3JkZXJDb2xvcik7Ci0gICAgcGFkZGluZ0xheWVy
LmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7Ci0gICAg
Y29udGVudExheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRD
b2xvcik7Ci0KLSAgICBsYXllclBhdGhXaXRoSG9sZShtYXJnaW5MYXllciwgbWFyZ2luUXVhZCwg
Ym9yZGVyUXVhZCk7Ci0gICAgbGF5ZXJQYXRoV2l0aEhvbGUoYm9yZGVyTGF5ZXIsIGJvcmRlclF1
YWQsIHBhZGRpbmdRdWFkKTsKLSAgICBsYXllclBhdGhXaXRoSG9sZShwYWRkaW5nTGF5ZXIsIHBh
ZGRpbmdRdWFkLCBjb250ZW50UXVhZCk7Ci0gICAgbGF5ZXJQYXRoKGNvbnRlbnRMYXllciwgY29u
dGVudFF1YWQpOwotfQotCi0tICh2b2lkKV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDooY29u
c3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKLXsKLSAgICBpZiAoIWhpZ2hsaWdodC5x
dWFkcy5zaXplKCkpIHsKLSAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSBoaWdobGlnaHQucXVh
ZHMuc2l6ZSgpIC8gNDsKLSAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3VudCAqIDRdOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKQotICAgICAgICBb
c2VsZiBfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDpoaWdobGlnaHQgb2Zmc2V0OmkgKiA0XTsKLX0K
LQotLSAodm9pZClfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hs
aWdodCYpaGlnaGxpZ2h0Ci17Ci0gICAgTlNVSW50ZWdlciBudW1MYXllcnMgPSBoaWdobGlnaHQu
cXVhZHMuc2l6ZSgpOwotICAgIGlmICghbnVtTGF5ZXJzKSB7Ci0gICAgICAgIFtzZWxmIF9yZW1v
dmVBbGxMYXllcnNdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NlbGYgX2NyZWF0
ZUxheWVyczpudW1MYXllcnNdOwotCi0gICAgQ0dDb2xvclJlZiBjb250ZW50Q29sb3IgPSBjYWNo
ZWRDR0NvbG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOwotICAgIGZvciAoTlNVSW50ZWdlciBp
ID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7Ci0gICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIg
PSBbX2xheWVycyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBsYXllci5maWxsQ29sb3IgPSBj
b250ZW50Q29sb3I7Ci0gICAgICAgIGxheWVyUGF0aChsYXllciwgaGlnaGxpZ2h0LnF1YWRzW2ld
KTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQm
KWhpZ2hsaWdodAotewotICAgIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGln
aHRUeXBlOjpOb2RlIHx8IGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6
Ok5vZGVMaXN0KQotICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6aGln
aGxpZ2h0XTsKLSAgICBlbHNlIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGln
aHRUeXBlOjpSZWN0cykKLSAgICAgICAgW3NlbGYgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0Omhp
Z2hsaWdodF07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIz
ZDcwNWU4M2U3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJ
bnNwZWN0b3JQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgi
Ci0jaW5jbHVkZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiQVBJ
VUlDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIgotI2luY2x1ZGUg
IldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNs
dWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUlu
Zm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dEVuY29kaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0KLSNpZiBQTEFU
Rk9STShHVEspCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdCB1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOwotY29u
c3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7
Ci0KLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgg
PSAxMDAwOwotY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dI
ZWlnaHQgPSA2NTA7Ci0KLVdlYkluc3BlY3RvclByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQ
YWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIDogbV9jbG9z
ZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQot
I2VuZGlmCi17Ci0gICAgaWYgKGluc3BlY3RlZFBhZ2UgJiYgaW5zcGVjdGVkUGFnZS0+aGFzUnVu
bmluZ1Byb2Nlc3MoKSkgewotICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdl
OwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5z
cGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rv
clByb3h5Ojp+V2ViSW5zcGVjdG9yUHJveHkoKQotewotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdGlvbkxldmVsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9y
TGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSk7Ci19Ci0KLVdlYlByZWZlcmVuY2VzJiBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdl
R3JvdXAoKS5wcmVmZXJlbmNlcygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnZh
bGlkYXRlKCkKLXsKLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFn
ZUlEKCkpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICBwbGF0Zm9y
bUludmFsaWRhdGUoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
bmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Ci19Ci0KLS8vIFB1YmxpYyBBUElzCi1ib29s
IFdlYkluc3BlY3RvclByb3h5Ojppc0Zyb250KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFn
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKLXsKLSAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvd01lc3NhZ2VT
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7Ci0g
ICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7Ci0KLSAgICBjcmVhdGVGcm9udGVu
ZFBhZ2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7Ci0g
ICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQotewotICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNDb25uZWN0ZWQoKSkgewot
ICAgICAgICBicmluZ1RvRnJvbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNv
bm5lY3QoKTsKLQotICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNv
IGl0IG9wZW5zIHRoZSBJbnNwZWN0b3IuCi0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9
IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpoaWRlKCkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBm
YWxzZTsKLQotICAgIHBsYXRmb3JtSGlkZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9z
ZSgpKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRm9yQ3Jhc2goKQotewotICAgIGNsb3NlKCk7Ci0KLSAgICBw
bGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cmVvcGVuKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2xvc2UoKTsKLSAgICBzaG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnJlc2V0U3RhdGUoKQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCku
ZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCk7Ci0gICAgaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKLSAgICBpbnNw
ZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotCi0g
ICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJl
c2V0KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKSB7Ci0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdl
SUQoKSk7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJv
eHkqIGluc3BlY3RlZFBhZ2UpCi17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAg
IEFTU0VSVChpbnNwZWN0ZWRQYWdlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3Rl
ZFBhZ2U7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lu
c3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JQ
YWdlKQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpz
ZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVy
KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRD
b25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNob3dDb25zb2xlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dSZXNvdXJjZXMoKQotewotICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2Uo
KTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
aG93UmVzb3VyY2VzKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJl
c291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUpCi17Ci0gICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwot
Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmF0dGFjaEJvdHRvbSgpCi17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRl
OjpCb3R0b20pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCi17
Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpSaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmF0dGFjaExlZnQoKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVm
dCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBz
aWRlKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFjYW5BdHRhY2goKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9pc0F0dGFjaGVkID0gdHJ1ZTsKLSAgICBtX2F0dGFjaG1lbnRT
aWRlID0gc2lkZTsKLQotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3Rv
ckF0dGFjaG1lbnRTaWRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihzaWRlKSk7Ci0KLSAgICBpZiAo
bV9pc1Zpc2libGUpCi0gICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKHRydWUpKTsKLQotICAgIHN3aXRjaCAo
bV9hdHRhY2htZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAg
ICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0
YWNoZWRCb3R0b20oKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBdHRhY2htZW50U2lk
ZTo6UmlnaHQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBwbGF0Zm9ybUF0dGFjaCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpkZXRhY2goKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2lzQXR0YWNoZWQgPSBmYWxzZTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSkKLSAg
ICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWQoZmFsc2UpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7Ci0KLSAgICBwbGF0Zm9ybURldGFj
aCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0
SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKLSAgICBwbGF0Zm9ybVNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgaW5zcGVjdG9yUGFnZVBy
ZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7Ci0gICAgcGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBwbGF0Zm9y
bVNldFNoZWV0UmVjdChyZWN0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRX
aW5kb3dEcmFnKCkKLXsKLSAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIW1f
aW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNQcm9maWxpbmdQ
YWdlKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6U3RvcFBhZ2VQcm9maWxpbmcoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKLXsK
LSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
ZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSkgewotICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2UgPSB0cnVlOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgY29ubmVjdCgpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOwotICAgIH0KLX0KLQotYm9v
bCBXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwm
IHVybCkKLXsKLSAgICAvLyBVc2UgVVJMIHNvIHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQg
cHJvdG9jb2xzLgotICAgIFVSTCBtYWluUGFnZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclBhZ2VVUkwoKSk7Ci0gICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdl
VVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJv
ZHVjdGlvbiBidWlsZHMuCi0gICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCk7Ci0gICAgaWYgKHRlc3RQYWdlVVJMU3Ry
aW5nLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVUkwgdGVzdFBhZ2VV
UkwoVVJMKCksIHRlc3RQYWdlVVJMU3RyaW5nKTsKLSAgICByZXR1cm4gdXJsLnByb3RvY29sKCkg
PT0gdGVzdFBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJs
LnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0g
ICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0
b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICBBU1NFUlQobV9pbnNw
ZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdl
KTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNw
ZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCksICp0aGlzKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnBy
b2Nlc3MoKS5hc3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1
bmRlclRlc3QpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2Nh
bEZyb250ZW5kKCkpIHsKLSAgICAgICAgc2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV91bmRlclRlc3QgPSB1bmRlclRlc3Q7Ci0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7
Ci0KLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlk
ZW50aWZpZXIoKSwgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVj
dGlvbkxldmVsKCkpKTsKLQotICAgIEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKLSAgICBt
X2lzQWN0aXZlRnJvbnRlbmQgPSB0cnVlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqdGhpcyk7Ci0KLSAgICBpZiAoIW1fdW5kZXJU
ZXN0KSB7Ci0gICAgICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNo
KTsKLSAgICAgICAgbV9pc0F0dGFjaGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0gICAgICAg
IG1fYXR0YWNobWVudFNpZGUgPSBzdGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9y
UGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKSk7Ci0KLSAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVk
KG1faXNBdHRhY2hlZCkpOwotCi0gICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgICAgICAgICAgY2FzZSBBdHRhY2ht
ZW50U2lkZTo6Qm90dG9tOgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKLSAg
ICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICAgICAgICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpEZXRhY2hlZCgpKTsKLQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0g
ICAgfQotCi0gICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3Rv
ciBhdHRhY2hlcyBzbyB0aGF0IGl0IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUg
X1dLSW5zcGVjdG9yIGxvYWRpbmcgaXRzIGZyb250ZW5kLgotICAgIG1faW5zcGVjdGVkUGFnZS0+
dWlDbGllbnQoKS5kaWRBdHRhY2hJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOwot
Ci0gICAgLy8gQmFpbCBvdXQgaWYgdGhlIGNsaWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBmcm9t
IHRoZSBkZWxlZ2F0ZSBtZXRob2QuCi0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBt
X3VuZGVyVGVzdCA/IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDog
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpvcGVuKCkKLXsKLSAgICBpZiAobV91bmRlclRlc3QpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTZXRGb3JTY29wZTxib29sPiBpc09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOwotICAgIG1f
aXNWaXNpYmxlID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKLQotICAgIGlmIChtX2lz
QXR0YWNoZWQpCi0gICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7Ci0gICAgZWxzZQotICAgICAgICBw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCk7Ci0KLSAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpkaWRDbG9zZSgpCi17Ci0gICAgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOwotICAgIG1faXNQ
cm9maWxpbmdQYWdlID0gZmFsc2U7Ci0gICAgbV9zaG93TWVzc2FnZVNlbnQgPSBmYWxzZTsKLSAg
ICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Ci0KLSAgICB1bnRyYWNrSW5zcGVj
dG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0gICAg
bV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBh
Z2UtPmlkZW50aWZpZXIoKSk7Ci0KLSAgICBpZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7Ci0gICAg
ICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IGZhbHNlOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotICAgIH0K
LQotICAgIGlmIChtX2lzQXR0YWNoZWQpCi0gICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci0KLSAg
ICAvLyBOdWxsIG91dCBtX2luc3BlY3RvclBhZ2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28g
dGhlIHZpZXdzIGNhbiBiZSBjbGVhbmVkIHVwIGNvcnJlY3RseS4KLSAgICBtX2luc3BlY3RvclBh
Z2UgPSBudWxscHRyOwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0gICAgbV9jYW5BdHRh
Y2ggPSBmYWxzZTsKLSAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOwotCi0gICAgcGxhdGZvcm1DbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpz
ZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdl
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQotewotICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byog
YXV0b21hdGlvblNlc3Npb24gPSBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9v
bCgpLmF1dG9tYXRpb25TZXNzaW9uKCkpCi0gICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5pbnNw
ZWN0b3JGcm9udGVuZExvYWRlZCgqbV9pbnNwZWN0ZWRQYWdlKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsIHRlbGxzIHVzIHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0
bwotICAgIC8vIGlnbm9yZSBpdCBvbmNlIGlmIHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRo
aXMgYWxsb3dzIHRoZSBJbnNwZWN0b3IgdG8gbGF0ZXIKLSAgICAvLyByZXF1ZXN0IHRvIGJlIGJy
b3VnaHQgdG8gdGhlIGZyb250IHdoZW4gYSBicmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVy
IGFjdGlvbi4KLSAgICBpZiAobV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCkgewotICAgICAgICBt
X2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7
Ci0gICAgZWxzZQotICAgICAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFp
bGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotewotICAgIGJvb2wgcHJldmlvdXNDYW5B
dHRhY2ggPSBtX2NhbkF0dGFjaDsKLQotICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRh
Y2goYXZhaWxhYmxlKTsKLQotICAgIGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFj
aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRl
clRlc3QpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKLQotICAgIHBsYXRm
b3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCi17Ci0gICAgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
ZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2Vs
ZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3Rp
dmUgPSBhY3RpdmU7Ci0KLSAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7
Ci0gICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOwotICAgICAg
ICBpZiAoIW1faXNWaXNpYmxlKQotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChhY3RpdmUpCi0gICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpOwotICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCi0gICAgICAgIGJy
aW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3Rp
dmU7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQotewotI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCi0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRl
KGVuYWJsZWQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUo
Ym9vbCBhdmFpbGFibGUpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAg
bV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKQotewotICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0
RW5jb2RlZCwgZm9yY2VTYXZlQXMpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBl
bmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAg
IHBsYXRmb3JtQXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVkKCkKLXsKLSAgICByZXR1cm4gaW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsK
LX0KLQotLy8gVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJv
dmlkZWQgaGVyZS4KLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShXSU4pCi0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZy
b250ZW5kV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bURpZENsb3NlRm9yQ3Jhc2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmlj
YXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWln
aHQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2ln
bmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxv
YXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5n
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShXSU4pCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDJiMWZkZmNhMWRmLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJJbnNwZWN0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNpbmNs
dWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQot
I2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgotCi1PQkpDX0NMQVNTIE5TVVJMOwotT0JKQ19DTEFTUyBOU1Zp
ZXc7Ci1PQkpDX0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXS1dlYkluc3BlY3RvclByb3h5
T2JqQ0FkYXB0ZXI7Ci1PQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0jZWxp
ZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRpZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFdlYkZyYW1lUHJveHk7Ci1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dDsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlByZWZlcmVuY2VzOwotCi1lbnVtIGNs
YXNzIEF0dGFjaG1lbnRTaWRlIHsKLSAgICBCb3R0b20sCi0gICAgUmlnaHQsCi0gICAgTGVmdCwK
LX07Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5Ci0gICAgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpJbnNwZWN0b3I+Ci0gICAgLCBwdWJsaWMgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKLSAgICAsIHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAotI2lm
IFBMQVRGT1JNKFdJTikKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVu
ZXIKLSNlbmRpZgotewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yUHJveHk+
IGNyZWF0ZShXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JQcm94eShpbnNwZWN0ZWRQYWdlKSk7Ci0gICAg
fQotCi0gICAgfldlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsK
LQotICAgIC8vIFB1YmxpYyBBUElzCi0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlOyB9Ci0gICAgV2ViUGFnZVByb3h5KiBpbnNw
ZWN0b3JQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JQYWdlOyB9Ci0KLSAgICBib29s
IGlzQ29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gISFtX2luc3BlY3RvclBhZ2U7IH0KLSAgICBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXNpYmxlOyB9Ci0gICAgYm9vbCBp
c0Zyb250KCk7Ci0KLSAgICB2b2lkIGNvbm5lY3QoKTsKLQotICAgIHZvaWQgc2hvdygpOwotICAg
IHZvaWQgaGlkZSgpOwotICAgIHZvaWQgY2xvc2UoKTsKLSAgICB2b2lkIGNsb3NlRm9yQ3Jhc2go
KTsKLSAgICB2b2lkIHJlb3BlbigpOwotICAgIHZvaWQgcmVzZXRTdGF0ZSgpOwotCi0gICAgdm9p
ZCByZXNldCgpOwotICAgIHZvaWQgdXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5
Kik7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgZW51bSBjbGFzcyBJbnNwZWN0aW9uVGFyZ2V0
VHlwZSB7IExvY2FsLCBSZW1vdGUgfTsKLSAgICBzdGF0aWMgUmV0YWluUHRyPE5TV2luZG93PiBj
cmVhdGVGcm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRh
cmdldFR5cGUpOwotCi0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0
OwotICAgIHZvaWQgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgPSAwKTsKLSAg
ICB2b2lkIHdpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgdm9pZCB3aW5kb3dGdWxsU2NyZWVu
RGlkQ2hhbmdlKCk7Ci0gICAgTlNXaW5kb3cqIGluc3BlY3RvcldpbmRvdygpIGNvbnN0IHsgcmV0
dXJuIG1faW5zcGVjdG9yV2luZG93LmdldCgpOyB9Ci0KLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQ
YWdlKCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgp
OwotCi0gICAgdm9pZCBhdHRhY2htZW50Vmlld0RpZENoYW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5T
VmlldyAqbmV3Vmlldyk7Ci0gICAgdm9pZCBhdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5T
V2luZG93ICpvbGRXaW5kb3cpOwotICAgIHZvaWQgYXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhO
U1dpbmRvdyAqbmV3V2luZG93KTsKLQotICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hl
ZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oR1RLKQotICAgIEd0a1dpZGdldCogaW5zcGVjdG9yVmlldygpIGNvbnN0IHsgcmV0dXJu
IG1faW5zcGVjdG9yVmlldzsgfTsKLSAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8
V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+JiYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNob3dDb25z
b2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBzaG93TWFpblJlc291
cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSopOwotCi0gICAgQXR0YWNobWVudFNpZGUgYXR0YWNo
bWVudFNpZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dGFjaG1lbnRTaWRlOyB9Ci0gICAgYm9vbCBp
c0F0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0F0dGFjaGVkOyB9Ci0gICAgdm9pZCBhdHRh
Y2hSaWdodCgpOwotICAgIHZvaWQgYXR0YWNoTGVmdCgpOwotICAgIHZvaWQgYXR0YWNoQm90dG9t
KCk7Ci0gICAgdm9pZCBhdHRhY2goQXR0YWNobWVudFNpZGUgPSBBdHRhY2htZW50U2lkZTo6Qm90
dG9tKTsKLSAgICB2b2lkIGRldGFjaCgpOwotCi0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVk
KTsKLQotICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwot
Ci0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKTsKLQotICAgIGJvb2wgaXNQcm9maWxpbmdQYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pc1Byb2ZpbGluZ1BhZ2U7IH0KLSAgICB2b2lkIHRvZ2dsZVBh
Z2VQcm9maWxpbmcoKTsKLQotICAgIGJvb2wgaXNFbGVtZW50U2VsZWN0aW9uQWN0aXZlKCkgY29u
c3QgeyByZXR1cm4gbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlOyB9Ci0gICAgdm9pZCB0b2dnbGVF
bGVtZW50U2VsZWN0aW9uKCk7Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1
cm4gbV91bmRlclRlc3Q7IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUoYm9vbCk7Ci0KLSAgICAvLyBQcm92aWRlZCBieSBwbGF0Zm9ybSBXZWJJbnNwZWN0b3JQcm94
eSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JQYWdlVVJMKCk7
Ci0gICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIHN0YXRpYyBT
dHJpbmcgaW5zcGVjdG9yQmFzZVVSTCgpOwotICAgIHN0YXRpYyBib29sIGlzTWFpbk9yVGVzdElu
c3BlY3RvclBhZ2UoY29uc3QgVVJMJik7Ci0gICAgc3RhdGljIERlYnVnZ2FibGVJbmZvRGF0YSBp
bmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWlu
aW11bVdpbmRvd1dpZHRoOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2luZG93
SGVpZ2h0OwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dXaWR0aDsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd0hlaWdodDsKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkqKTsKLQotICAg
IHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpOwotCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwot
Ci0gICAgLy8gSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOwotICAgIENvbm5lY3Rp
b25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29ubmVjdGlv
blR5cGU6OkxvY2FsOyB9Ci0KLSAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRQYWdlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCk7Ci0gICAg
dm9pZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0KLSAgICB2b2lkIHBs
YXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpOwotICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7
Ci0gICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJpbmdU
b0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsK
LSAgICB2b2lkIHBsYXRmb3JtSGlkZSgpOwotICAgIGJvb2wgcGxhdGZvcm1Jc0Zyb250KCk7Ci0g
ICAgdm9pZCBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsK
LSAgICB1bnNpZ25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpOwotICAgIHVuc2ln
bmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKTsKLSAgICB2b2lkIHBsYXRmb3JtQXR0
YWNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybURldGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93V2lkdGgodW5zaWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93
RHJhZygpOwotICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFN0cmluZyYgY29udGVudCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgYm9vbCBwbGF0Zm9y
bUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpOwotI2Vsc2UKLSAgICBib29sIHBs
YXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkgeyByZXR1cm4gd2ViUHJv
Y2Vzc0NhbkF0dGFjaDsgfQotI2VuZGlmCi0KLSAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9y
UHJveHkgbWVzc2FnZXMKLSAgICB2b2lkIG9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wg
Y2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCk7Ci0gICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rp
b24oSVBDOjpBdHRhY2htZW50KTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJik7Ci0gICAgdm9pZCBmcm9udGVuZExvYWRlZCgpOwotICAgIHZvaWQgZGlkQ2xv
c2UoKTsKLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgYnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpOwotICAgIHZvaWQgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsK
LSAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBz
aG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0gICAgdm9p
ZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIHRpbWVsaW5lUmVjb3Jk
aW5nQ2hhbmdlZChib29sKTsKLSAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRP
dmVycmlkZShPcHRpb25hbDxib29sPik7Ci0KLSAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlQXMpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudCk7Ci0KLSAgICBib29sIGNhbkF0dGFjaCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FuQXR0YWNoOyB9Ci0gICAgYm9vbCBzaG91bGRPcGVuQXR0YWNoZWQoKTsKLQotICAg
IHZvaWQgb3BlbigpOwotCi0gICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Q7Ci0K
LSAgICBXZWJQcmVmZXJlbmNlcyYgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3Q7Ci0K
LSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKLSAgICB2b2lkIHVwZGF0ZUluc3Bl
Y3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyB3bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKLSAgICBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICB2b2lkIHdpbmRvd1Jl
Y2VpdmVkTWVzc2FnZShIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSkgb3ZlcnJpZGU7Ci0jZW5k
aWYKLQotICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0ZWRQYWdlIHsgbnVsbHB0ciB9OwotICAg
IFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9OwotCi0gICAgYm9vbCBt
X3VuZGVyVGVzdCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2lzQXR0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9jYW5BdHRhY2ggeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9pc1Byb2ZpbGluZ1BhZ2UgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9zaG93TWVzc2FnZVNlbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pZ25vcmVGaXJzdEJyaW5n
VG9Gcm9udCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faXNPcGVuaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNBY3RpdmVG
cm9udGVuZCB7IGZhbHNlIH07Ci0KLSAgICBBdHRhY2htZW50U2lkZSBtX2F0dGFjaG1lbnRTaWRl
IHtBdHRhY2htZW50U2lkZTo6Qm90dG9tfTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRh
aW5QdHI8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
cjsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1faW5zcGVjdG9yV2luZG93OwotICAgIFJldGFp
blB0cjxXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAg
SGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxN
YXA7Ci0gICAgUnVuTG9vcDo6VGltZXI8V2ViSW5zcGVjdG9yUHJveHk+IG1fY2xvc2VGcm9udGVu
ZEFmdGVySW5hY3Rpdml0eVRpbWVyOwotICAgIFN0cmluZyBtX3VybFN0cmluZzsKLSAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgbV9zaGVldFJlY3Q7Ci0gICAgYm9vbCBtX2lzT2JzZXJ2aW5nQ29udGVu
dExheW91dFJlY3QgeyBmYWxzZSB9OwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4gbV9jbGllbnQ7Ci0gICAgR3RrV2lkZ2V0
KiBtX2luc3BlY3RvclZpZXcgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX2luc3BlY3Rv
cldpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1faGVhZGVyQmFyIHsgbnVsbHB0
ciB9OwotICAgIFN0cmluZyBtX2luc3BlY3RlZFVSTFN0cmluZzsKLSNlbGlmIFBMQVRGT1JNKFdJ
TikKLSAgICBIV05EIG1faW5zcGVjdGVkVmlld1dpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05E
IG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05EIG1faW5z
cGVjdG9yVmlld1dpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBIV05EIG1faW5zcGVjdG9yRGV0YWNo
V2luZG93IHsgbnVsbHB0ciB9OwotICAgIFJlZlB0cjxXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7
Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiNzc1NTNjNmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2
L251bGwKQEAgLTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0j
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAgT3Blbkxv
Y2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotICAg
IFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZp
ZXIpCi0KLSAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkKLQotICAgIEZy
b250ZW5kTG9hZGVkKCkKLSAgICBEaWRDbG9zZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLSAgICBC
cmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLSAgICBSZW9wZW4oKQotICAgIFJlc2V0U3RhdGUo
KQotCi0gICAgSW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJpbmcgdXJsU3RyaW5nKQotICAgIFNob3dD
ZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQotICAg
IEVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQotICAgIFRpbWVsaW5lUmVjb3Jk
aW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLSAgICBTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
T3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVu
YW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KQotICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAgQXR0
YWNoQm90dG9tKCkKLSAgICBBdHRhY2hSaWdodCgpCi0gICAgQXR0YWNoTGVmdCgpCi0gICAgRGV0
YWNoKCkKLQotICAgIEF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCi0K
LSAgICBTZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi0gICAgU2V0QXR0
YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLQotICAgIFNldFNoZWV0UmVjdChXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKLQotICAgIFN0YXJ0V2luZG93RHJhZygpCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlYTE1ZWU2NTcuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgIkFQSVByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxX
ZWJQYWdlUHJveHkqLCB1bnNpZ25lZD4gUGFnZUxldmVsTWFwOwotCi1zdGF0aWMgUGFnZUxldmVs
TWFwJiBwYWdlTGV2ZWxNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQYWdlTGV2
ZWxNYXA+IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi11bnNpZ25lZCBpbnNwZWN0b3JMZXZl
bEZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKQotewotICAgIGlmIChwYWdlKSB7Ci0gICAgICAg
IGF1dG8gZmluZFJlc3VsdCA9IHBhZ2VMZXZlbE1hcCgpLmZpbmQocGFnZSk7Ci0gICAgICAgIGlm
IChmaW5kUmVzdWx0ICE9IHBhZ2VMZXZlbE1hcCgpLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotU3Ry
aW5nIGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFn
ZSkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiX19XZWJJbnNwZWN0b3JQYWdlR3JvdXBMZXZl
bCIsIGluc3BlY3RvckxldmVsRm9yUGFnZShwYWdlKSwgIl9fIik7Ci19Ci0KLXZvaWQgdHJhY2tJ
bnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBp
bnNwZWN0ZWRQYWdlKQotewotICAgIHBhZ2VMZXZlbE1hcCgpLnNldChpbnNwZWN0b3JQYWdlLCBp
bnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSkpOwotfQotCi12b2lkIHVudHJhY2tJ
bnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSkKLXsKLSAgICBwYWdlTGV2
ZWxNYXAoKS5yZW1vdmUoaW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXN0YXRpYyBXZWJQcm9jZXNzUG9v
bCogc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7Ci1zdGF0aWMgV2ViUHJvY2Vzc1Bvb2wqIHNf
bmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7Ci0KLVdlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQ
cm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCi17Ci0gICAgLy8gSGF2aW5nIG91
ciBvd24gcHJvY2VzcyBwb29sIHJlbW92ZXMgdXMgZnJvbSB0aGUgbWFpbiBwcm9jZXNzIHBvb2wg
YW5kCi0gICAgLy8gZ3VhcmFudGVlcyBubyBwcm9jZXNzIHNoYXJpbmcgZm9yIG91ciB1c2VyIGlu
dGVyZmFjZS4KLSAgICBXZWJQcm9jZXNzUG9vbComIHBvb2wgPSAoaW5zcGVjdGlvbkxldmVsID09
IDEpID8gc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgOiBzX25lc3RlZEluc3BlY3RvclByb2Nl
c3NQb29sOwotICAgIGlmICghcG9vbCkgewotICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBB
UEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIHBvb2wgPSAm
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uLmdldCgpKS5sZWFrUmVmKCk7Ci0g
ICAgICAgIC8vIERvIG5vdCBkZWxheSBwcm9jZXNzIGxhdW5jaCBmb3IgaW5zcGVjdG9yIHBhZ2Vz
IGFzIGluc3BlY3RvciBwYWdlcyBkbyBub3Qga25vdyBob3cgdG8gdHJhbnNpdGlvbiBmcm9tIGEg
dGVybWluYXRlZCBwcm9jZXNzLgotICAgICAgICBwb29sLT5kaXNhYmxlRGVsYXllZFdlYlByb2Nl
c3NMYXVuY2goKTsKLSAgICB9Ci0gICAgcmV0dXJuICpwb29sOwotfQotCi1ib29sIGlzSW5zcGVj
dG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQotewotICAgIHJldHVy
biAoc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bv
b2wgPT0gJnByb2Nlc3NQb29sKQotICAgICAgICB8fCAoc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNz
UG9vbCAmJiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9jZXNzUG9vbCk7Ci19
Ci0KLWJvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKLXsKLSAgICBy
ZXR1cm4gcGFnZUxldmVsTWFwKCkuY29udGFpbnMoJndlYlBhZ2UpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3Bl
Y3RvclV0aWxpdGllcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRp
bGl0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOWVhNzU4OGNjLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRp
ZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7Ci0KLS8v
IFRoZSBpbnNwZWN0b3IgcGFnZSBncm91cHMgYXJlIHVzZWQgdG8gZ2l2ZSBkaWZmZXJlbnQgcHJl
ZmVyZW5jZXMgdG8gZWFjaAotLy8gaW5zcGVjdG9yIGxldmVsIGJ5IHNldHRpbmcgYSBwZXItbGV2
ZWwgcGFnZSBncm91cCBpZGVudGlmaWVyLgotdW5zaWduZWQgaW5zcGVjdG9yTGV2ZWxGb3JQYWdl
KFdlYlBhZ2VQcm94eSopOwotU3RyaW5nIGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQ
YWdlKFdlYlBhZ2VQcm94eSopOwotdm9pZCB0cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5
KiBpbnNwZWN0b3JQYWdlLCBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpOwotdm9pZCB1bnRy
YWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UpOwotCi1XZWJQcm9j
ZXNzUG9vbCYgaW5zcGVjdG9yUHJvY2Vzc1Bvb2wodW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKTsK
LWJvb2wgaXNJbnNwZWN0b3JQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYpOwotYm9vbCBpc0lu
c3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5Jik7Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YmViYmRmODdhY2UuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VEZWJ1Z2dhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYlBhZ2VEZWJ1Z2dhYmxlLmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotV2ViUGFn
ZURlYnVnZ2FibGU6OldlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotewotfQotCi1TdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6Om5hbWUoKSBj
b25zdAotewotICAgIGlmICghbV9uYW1lT3ZlcnJpZGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBtX25hbWVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLT50aXRs
ZSgpOwotfQotCi1TdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6OnVybCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3BhZ2UubWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCku
c3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgdXJsID0gbV9wYWdlLm1haW5GcmFtZSgpLT51cmwoKS5z
dHJpbmcoKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6Ymxh
bmtVUkwoKS5zdHJpbmcoKTsKLQotICAgIHJldHVybiB1cmw7Ci19Ci0KLWJvb2wgV2ViUGFnZURl
YnVnZ2FibGU6Omhhc0xvY2FsRGVidWdnZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2Uu
aW5zcGVjdG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKTsKLX0KLQotdm9pZCBXZWJQ
YWdlRGVidWdnYWJsZTo6Y29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwsIGJvb2wgaXNB
dXRvbWF0aWNDb25uZWN0aW9uLCBib29sIGltbWVkaWF0ZWx5UGF1c2UpCi17Ci0gICAgbV9wYWdl
Lmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoY2hhbm5lbCwgaXNBdXRvbWF0
aWNDb25uZWN0aW9uLCBpbW1lZGlhdGVseVBhdXNlKTsKLX0KLQotdm9pZCBXZWJQYWdlRGVidWdn
YWJsZTo6ZGlzY29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCi17Ci0gICAgbV9wYWdl
Lmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7Ci19Ci0K
LXZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlz
cGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1
Z2dhYmxlOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKLXsKLSAgICBtX3BhZ2UuaW5z
cGVjdG9yQ29udHJvbGxlcigpLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Ci19Ci0KLXZvaWQg
V2ViUGFnZURlYnVnZ2FibGU6OnNldE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgbV9uYW1lT3ZlcnJpZGUgPSBuYW1lOwotICAgIHVwZGF0ZSgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhmODQ4ZGUxMTZhLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7
Ci0KLWNsYXNzIFdlYlBhZ2VEZWJ1Z2dhYmxlIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVt
b3RlSW5zcGVjdGlvblRhcmdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZURlYnVnZ2FibGUpOwotcHVibGljOgotICAgIFdl
YlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYpOwotICAgIH5XZWJQYWdlRGVidWdnYWJsZSgp
ID0gZGVmYXVsdDsKLQotICAgIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpU
eXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xs
YWJsZVRhcmdldDo6VHlwZTo6V2ViUGFnZTsgfQotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBm
aW5hbDsKLSAgICBTdHJpbmcgdXJsKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBoYXNMb2NhbERl
YnVnZ2VyKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGlt
bWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSkgZmluYWw7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJikgZmluYWw7Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VG
cm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRJbmRp
Y2F0aW5nKGJvb2wpIGZpbmFsOwotCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUoKSBj
b25zdCB7IHJldHVybiBtX25hbWVPdmVycmlkZTsgfQotICAgIHZvaWQgc2V0TmFtZU92ZXJyaWRl
KGNvbnN0IFN0cmluZyYpOwotCi1wcml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwot
ICAgIFN0cmluZyBtX25hbWVPdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NPTlRST0xMQUJMRV9UQVJHRVQoV2ViS2l0OjpXZWJQ
YWdlRGVidWdnYWJsZSwgV2ViUGFnZSk7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVlMjhiZjcx
NjMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRl
ICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRCYXNlLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0VGFyZ2V0SUQoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJv
eHkmIHByb3Zpc2lvbmFsUGFnZSkKLXsKLSAgICByZXR1cm4gV2ViUGFnZUluc3BlY3RvclRhcmdl
dDo6dG9UYXJnZXRJRChwcm92aXNpb25hbFBhZ2Uud2ViUGFnZUlEKCkpOwotfQotCi1XZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVBy
b3h5JiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2Zyb250ZW5kUm91dGVyKEZy
b250ZW5kUm91dGVyOjpjcmVhdGUoKSkKLSAgICAsIG1fYmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShtX2Zyb250ZW5kUm91dGVyLmNvcHlSZWYoKSkpCi17Ci0gICAg
YXV0byB0YXJnZXRBZ2VudCA9IG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0QWdlbnQ+KG1fZnJv
bnRlbmRSb3V0ZXIuZ2V0KCksIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwotCi0gICAgbV90
YXJnZXRBZ2VudCA9IHRhcmdldEFnZW50LmdldCgpOwotCi0gICAgbV9hZ2VudHMuYXBwZW5kKFdU
Rk1vdmUodGFyZ2V0QWdlbnQpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5pdCgpCi17Ci0gICAgU3RyaW5nIHBhZ2VUYXJnZXRJZCA9IFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQ6OnRvVGFyZ2V0SUQobV9wYWdlLndlYlBhZ2VJRCgpKTsKLSAgICBjcmVhdGVJbnNwZWN0
b3JUYXJnZXQocGFnZVRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBh
Z2UpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpwYWdlQ2xvc2VkKCkK
LXsKLSAgICBkaXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7Ci0KLSAgICBtX2FnZW50cy5kaXNjYXJk
VmFsdWVzKCk7Ci19Ci0KLWJvb2wgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0xvY2Fs
RnJvbnRlbmQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Zyb250ZW5kUm91dGVyLT5oYXNMb2Nh
bEZyb250ZW5kKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5l
Y3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYgZnJvbnRlbmRDaGFubmVsLCBi
b29sLCBib29sKQotewotICAgIGJvb2wgY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQgPSAhbV9mcm9u
dGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLT5jb25u
ZWN0RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVsKTsKLQotICAgIGlmIChjb25uZWN0aW5nRmlyc3RG
cm9udGVuZCkKLSAgICAgICAgbV9hZ2VudHMuZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKCZt
X2Zyb250ZW5kUm91dGVyLmdldCgpLCAmbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7Ci0KLSAg
ICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVy
LT5mcm9udGVuZENvdW50KCkpOwotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAg
aWYgKGhhc0xvY2FsRnJvbnRlbmQoKSkKLSAgICAgICAgbV9wYWdlLnJlbW90ZUluc3BlY3Rvcklu
Zm9ybWF0aW9uRGlkQ2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKEZyb250ZW5kQ2hhbm5lbCYgZnJvbnRlbmRD
aGFubmVsKQotewotICAgIG1fZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RGcm9udGVuZChmcm9u
dGVuZENoYW5uZWwpOwotCi0gICAgYm9vbCBkaXNjb25uZWN0aW5nTGFzdEZyb250ZW5kID0gIW1f
ZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpOwotICAgIGlmIChkaXNjb25uZWN0aW5nTGFz
dEZyb250ZW5kKQotICAgICAgICBtX2FnZW50cy53aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChEaXNjb25uZWN0UmVhc29uOjpJbnNwZWN0b3JEZXN0cm95ZWQpOwotCi0gICAgbV9wYWdlLmRp
ZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRD
b3VudCgpKTsKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIGlmIChkaXNjb25u
ZWN0aW5nTGFzdEZyb250ZW5kKQotICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3Jt
YXRpb25EaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpkaXNjb25uZWN0QWxsRnJvbnRlbmRzKCkKLXsKLSAgICAvLyBGSVhNRTogSGFuZGxl
IGEgbG9jYWwgaW5zcGVjdG9yIGNsaWVudC4KLQotICAgIGlmICghbV9mcm9udGVuZFJvdXRlci0+
aGFzRnJvbnRlbmRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5vdGlmeSBhZ2VudHMg
Zmlyc3QsIHNpbmNlIHRoZXkgbWF5IG5lZWQgdG8gdXNlIEluc3BlY3RvckNsaWVudC4KLSAgICBt
X2FnZW50cy53aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uOjpJ
bnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQpOwotCi0gICAgLy8gRGlzY29ubmVjdCBhbnkgcmVtYWlu
aW5nIHJlbW90ZSBmcm9udGVuZHMuCi0gICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEFs
bEZyb250ZW5kcygpOwotCi0gICAgbV9wYWdlLmRpZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291
bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsKLQotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENo
YW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRp
c3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+ZGlzcGF0Y2gobWVzc2FnZSk7Ci19Ci0KLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldElu
ZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5nKQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIG1fcGFnZS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOwotI2Vsc2UKLSAgICBpZiAoaW5k
aWNhdGluZykKLSAgICAgICAgbV9wYWdlLnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Ci0gICAg
ZWxzZQotICAgICAgICBtX3BhZ2UuaGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKLSNlbmRpZgot
fQotI2VuZGlmCi0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZUluc3Bl
Y3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUgdHlwZSkKLXsKLSAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNy
ZWF0ZShtX3BhZ2UsIHRhcmdldElkLCB0eXBlKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCkKLXsKLSAgICBhdXRvIGl0ID0gbV90YXJnZXRzLmZpbmQodGFyZ2V0SWQpOwotICAgIGlmIChp
dCA9PSBtX3RhcmdldHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3RhcmdldEFnZW50
LT50YXJnZXREZXN0cm95ZWQoKml0LT52YWx1ZSk7Ci0gICAgbV90YXJnZXRzLnJlbW92ZShpdCk7
Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9JbnNw
ZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgbV90YXJnZXRBZ2VudC0+c2VuZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVu
ZCh0YXJnZXRJZCwgbWVzc2FnZSk7Ci19Ci0KLWJvb2wgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXI6OnNob3VsZFBhdXNlTG9hZGluZyhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlz
aW9uYWxQYWdlKSBjb25zdAotewotICAgIGlmICghbV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRl
bmRzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8qIHRhcmdldCA9IG1fdGFy
Z2V0cy5nZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci0gICAgQVNTRVJUKHRhcmdl
dCk7Ci0gICAgcmV0dXJuIHRhcmdldC0+aXNQYXVzZWQoKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0Q29udGludWVMb2FkaW5nQ2FsbGJhY2soY29uc3QgUHJvdmlz
aW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2FsbGJhY2spCi17Ci0gICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldChnZXRUYXJnZXRJ
RChwcm92aXNpb25hbFBhZ2UpKTsKLSAgICBBU1NFUlQodGFyZ2V0KTsKLSAgICB0YXJnZXQtPnNl
dFJlc3VtZUNhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFn
ZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCi17Ci0gICAgYWRkVGFyZ2V0KEluc3BlY3RvclRhcmdl
dFByb3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLCBnZXRUYXJnZXRJRChwcm92aXNpb25hbFBh
Z2UpLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2UpKTsKLX0KLQotdm9pZCBX
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29u
c3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKLXsKLSAgICBkZXN0cm95
SW5zcGVjdG9yVGFyZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOwotfQotCi12b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIgb2xkV2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBuZXdXZWJQYWdlSUQpCi17Ci0gICAgU3RyaW5nIG9sZElEID0gV2ViUGFnZUluc3BlY3RvclRh
cmdldDo6dG9UYXJnZXRJRChvbGRXZWJQYWdlSUQpOwotICAgIFN0cmluZyBuZXdJRCA9IFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQobmV3V2ViUGFnZUlEKTsKLSAgICBhdXRvIG5l
d1RhcmdldCA9IG1fdGFyZ2V0cy50YWtlKG5ld0lEKTsKLSAgICBBU1NFUlQobmV3VGFyZ2V0KTsK
LSAgICBuZXdUYXJnZXQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7Ci0gICAgbV90YXJn
ZXRBZ2VudC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQob2xkSUQsIG5ld0lEKTsKLQotICAg
IC8vIFdlJ3ZlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBvbGQgcGFnZSBhbmQgd2lsbCBub3QgcmVj
ZWl2ZSBhbnkgbWVzc2FnZSBmcm9tIGl0LCBzbwotICAgIC8vIHdlIGRlc3Ryb3kgZXZlcnl0aGlu
ZyBidXQgdGhlIG5ldyB0YXJnZXQgaGVyZS4KLSAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzIwMjkzNz4gZG8gbm90IGRlc3Ryb3kgdGFyZ2V0cyB0aGF0IGJlbG9uZyB0byB0aGUg
Y29tbWl0dGVkIHBhZ2UuCi0gICAgZm9yIChhdXRvJiB0YXJnZXQgOiBtX3RhcmdldHMudmFsdWVz
KCkpCi0gICAgICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3llZCgqdGFyZ2V0KTsKLSAg
ICBtX3RhcmdldHMuY2xlYXIoKTsKLSAgICBtX3RhcmdldHMuc2V0KG5ld1RhcmdldC0+aWRlbnRp
ZmllcigpLCBXVEZNb3ZlKG5ld1RhcmdldCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5
PiYmIHRhcmdldCkKLXsKLSAgICBtX3RhcmdldEFnZW50LT50YXJnZXRDcmVhdGVkKCp0YXJnZXQp
OwotICAgIG1fdGFyZ2V0cy5zZXQodGFyZ2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUodGFyZ2V0
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc4Y2FlZGYwYzBjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5Lmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2VJZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci1jbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKLWNsYXNzIEZy
b250ZW5kQ2hhbm5lbDsKLWNsYXNzIEZyb250ZW5kUm91dGVyOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKTsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihX
ZWJQYWdlUHJveHkmKTsKLQotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgcGFnZUNsb3NlZCgp
OwotCi0gICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGNvbm5l
Y3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNJ
bnNwZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKLSAgICB2
b2lkIGRpc2Nvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwotICAg
IHZvaWQgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOwotCi0gICAgdm9pZCBkaXNwYXRjaE1lc3Nh
Z2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKLSNlbmRpZgotCi0g
ICAgdm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JU
YXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvSW5z
cGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKLQotICAgIGJvb2wgc2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFn
ZVByb3h5JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25z
dCBQcm92aXNpb25hbFBhZ2VQcm94eSYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKLQotICAg
IHZvaWQgZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQ
cm94eSYpOwotICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFn
ZUlEKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yVGFyZ2V0UHJveHk+JiYpOwotCi0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAg
UmVmPEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7Ci0gICAgUmVm
PEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci0gICAg
SW5zcGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwotICAgIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6
dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xp
Yi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xp
Yi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkOWQ1MGRjMjg2Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCi0KLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZv
LmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JVdGlscy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRGVidWdnYWJsZVR5cGUuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0g
ICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JD
bGllbnQsIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCi0gICAgICAg
IDogbV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCi0gICAgICAgICwg
bV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQotICAgICAgICAsIG1fY29ubmVjdGlv
bklEKGNvbm5lY3Rpb25JRCkKLSAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQotICAgIHsK
LSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgIH0KLQotICAgIH5SZW1vdGVJ
bnNwZWN0b3JQcm94eSgpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0
cik7Ci0gICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxv
YWQoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUz
Nj46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRh
cmdldC4KLSAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0g
QVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7
Ci0gICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShJbnNwZWN0b3I6OkRl
YnVnZ2FibGVUeXBlOjpXZWJQYWdlKTsKLSAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRl
YnVnZ2FibGVJbmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOwot
ICAgIH0KLQotICAgIHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zaG93KCk7
Ci0gICAgfQotCi0gICAgdm9pZCBzZXRUYXJnZXROYW1lKGNvbnN0IENTdHJpbmcmIG5hbWUpCi0g
ICAgewotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgbV9wcm94eS0+dXBkYXRlV2luZG93VGl0
bGUobmFtZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBt
X2luc3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25JRCwgbV90
YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgp
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9u
dGVuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKLSAgICBSZW1vdGVJbnNwZWN0
b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OwotICAgIHVpbnQ2NF90IG1fY29ubmVjdGlvbklE
OwotICAgIHVpbnQ2NF90IG1fdGFyZ2V0SUQ7Ci19OwotCi1jb25zdCBTb2NrZXRDb25uZWN0aW9u
OjpNZXNzYWdlSGFuZGxlcnMmIFJlbW90ZUluc3BlY3RvckNsaWVudDo6bWVzc2FnZUhhbmRsZXJz
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU29ja2V0Q29ubmVjdGlvbjo6
TWVzc2FnZUhhbmRsZXJzPiBtZXNzYWdlSGFuZGxlcnMgPSBTb2NrZXRDb25uZWN0aW9uOjpNZXNz
YWdlSGFuZGxlcnMoewotICAgIHsgIkRpZENsb3NlIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tl
dENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyB7IH0sCi0gICAgICAgIFtdKFNvY2tldENv
bm5lY3Rpb24mLCBHVmFyaWFudCosIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBh
dXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRh
dGEpOwotICAgICAgICAgICAgY2xpZW50LmNvbm5lY3Rpb25EaWRDbG9zZSgpOwotICAgICAgICB9
fQotICAgIH0sCi0gICAgeyAiRGlkU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBzdGQ6OnBhaXI8Q1N0
cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIoYXkpIiwKLSAgICAg
ICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1
c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90
ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIEdSZWZQdHI8R1Zhcmlh
bnQ+IGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQ7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBh
cmFtZXRlcnMsICIoQGF5KSIsICZiYWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigpKTsKLSAg
ICAgICAgICAgIGNsaWVudC5zZXRCYWNrZW5kQ29tbWFuZHMoZ192YXJpYW50X2dldF9ieXRlc3Ry
aW5nKGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQuZ2V0KCkpKTsKLSAgICAgICAgfX0KLSAgICB9LAot
ICAgIHsgIlNldFRhcmdldExpc3QiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlv
bjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodGEodHNzc2IpKSIsCi0gICAgICAgIFtdKFNvY2tldENv
bm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAg
ICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGll
bnQqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsKLSAgICAg
ICAgICAgIEdVbmlxdWVPdXRQdHI8R1ZhcmlhbnRJdGVyPiBpdGVyOwotICAgICAgICAgICAgZ192
YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHRhKHRzc3NiKSkiLCAmY29ubmVjdGlvbklELCAmaXRl
ci5vdXRQdHIoKSk7Ci0gICAgICAgICAgICBzaXplX3QgdGFyZ2V0Q291bnQgPSBnX3ZhcmlhbnRf
aXRlcl9uX2NoaWxkcmVuKGl0ZXIuZ2V0KCkpOwotICAgICAgICAgICAgVmVjdG9yPFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6VGFyZ2V0PiB0YXJnZXRMaXN0OwotICAgICAgICAgICAgdGFyZ2V0TGlz
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRhcmdldENvdW50KTsKLSAgICAgICAgICAgIGd1aW50
NjQgdGFyZ2V0SUQ7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB0eXBlOwotICAgICAgICAgICAg
Y29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybDsKLSAgICAgICAg
ICAgIGdib29sZWFuIGhhc0xvY2FsRGVidWdnZXI7Ci0gICAgICAgICAgICB3aGlsZSAoZ192YXJp
YW50X2l0ZXJfbG9vcChpdGVyLmdldCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwgJnR5cGUs
ICZuYW1lLCAmdXJsLCAmaGFzTG9jYWxEZWJ1Z2dlcikpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWdfc3RyY21wMCh0eXBlLCAiV2ViIikgfHwgIWdfc3RyY21wMCh0eXBlLCAiSmF2YVNjcmlwdCIp
KQotICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFwcGVuZCh7IHRhcmdl
dElELCB0eXBlLCBuYW1lLCB1cmwgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGll
bnQuc2V0VGFyZ2V0TGlzdChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOwotICAg
ICAgICB9fQotICAgIH0sCi0gICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgc3RkOjpwYWly
PENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0cykiLAot
ICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2lu
dGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8
UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgZ3VpbnQ2NCBj
b25uZWN0aW9uSUQsIHRhcmdldElEOwotICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsK
LSAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCZzKSIsICZjb25uZWN0
aW9uSUQsICZ0YXJnZXRJRCwgJm1lc3NhZ2UpOwotICAgICAgICAgICAgY2xpZW50LnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKLSAgICAgICAg
fX0KLSAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuIG1lc3NhZ2VIYW5kbGVyczsKLX0KLQotUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRk
cmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQot
ICAgIDogbV9ob3N0QW5kUG9ydChTdHJpbmc6OmZyb21VVEY4KGFkZHJlc3MpICsgJzonICsgU3Ry
aW5nOjpudW1iZXIocG9ydCkpCi0gICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQotICAgICwgbV9j
YW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCi17Ci0gICAgR1JlZlB0
cjxHU29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50
X25ldygpKTsKLSAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tl
dENsaWVudC5nZXQoKSwgbV9ob3N0QW5kUG9ydC51dGY4KCkuZGF0YSgpLCAwLCBtX2NhbmNlbGxh
YmxlLmdldCgpLAotICAgICAgICBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOwotICAgICAgICAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChH
X1NPQ0tFVF9DTElFTlQob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAg
ICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfQ0FOQ0VMTEVEKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBh
dXRvKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0
YSk7Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbikKLSAgICAgICAgICAgICAgICBjbGllbnQt
PnNldHVwQ29ubmVjdGlvbihTb2NrZXRDb25uZWN0aW9uOjpjcmVhdGUoV1RGTW92ZShjb25uZWN0
aW9uKSwgbWVzc2FnZUhhbmRsZXJzKCksIGNsaWVudCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmFpbGVk
IHRvIGNvbm5lY3QgdG8gaW5zcGVjdG9yIHNlcnZlcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0g
ICAgICAgICAgICAgICAgY2xpZW50LT5tX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKmNsaWVu
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgfSwgdGhpcyk7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNs
aWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCi17Ci0gICAgZ19jYW5jZWxsYWJsZV9jYW5j
ZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXR1cENvbm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKLXsK
LSAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOwotICAgIG1fc29j
a2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwSW5zcGVjdG9yQ2xpZW50IiwgZ192YXJp
YW50X25ldygiKEBheSkiLCBnX3ZhcmlhbnRfbmV3X2J5dGVzdHJpbmcoSW5zcGVjdG9yOjpiYWNr
ZW5kQ29tbWFuZHNIYXNoKCkuZGF0YSgpKSkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKLXsK
LSAgICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7Ci0gICAg
ICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoYmFj
a2VuZENvbW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7Ci0gICAg
bV9iYWNrZW5kQ29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIgKyBi
YXNlNjREYXRhOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkRp
ZENsb3NlKCkKLXsKLSAgICBtX3RhcmdldHMuY2xlYXIoKTsKLSAgICBtX2luc3BlY3RvclByb3h5
TWFwLmNsZWFyKCk7Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICBtX29i
c2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElE
KQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3Rk
OjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQs
IHRhcmdldElEXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclBy
b3h5PigqdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCk7Ci0gICAgfSk7Ci0gICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5zaG93KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3NvY2tldENvbm5lY3Rp
b24tPnNlbmRNZXNzYWdlKCJTZXR1cCIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9u
SUQsIHRhcmdldElEKSk7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOwot
fQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQodWlu
dDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNzYWdl
VG9CYWNrZW5kIiwgZ192YXJpYW50X25ldygiKHR0cykiLCBjb25uZWN0aW9uSUQsIHRhcmdldElE
LCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OmNsb3NlRnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFy
Z2V0SUQpCi17Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUHJveHlNYXAuY29udGFpbnMoc3RkOjpt
YWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpKTsKLSAgICBtX3NvY2tldENvbm5lY3Rp
b24tPnNlbmRNZXNzYWdlKCJGcm9udGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygiKHR0KSIs
IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLSAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92
ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwg
VmVjdG9yPFRhcmdldD4mJiB0YXJnZXRMaXN0KQotewotICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdl
dHMgdG8gcmVtb3ZlIHRoZW0uCi0gICAgVmVjdG9yPHVpbnQ2NF90LCA0PiB0YXJnZXRzVG9SZW1v
dmU7Ci0gICAgZm9yIChhdXRvJiBjb25uZWN0aW9uVGFyZ2V0UGFpciA6IG1faW5zcGVjdG9yUHJv
eHlNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0UGFpci5maXJzdCAh
PSBjb25uZWN0aW9uSUQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3Qp
IHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gY29ubmVjdGlvblRhcmdldFBhaXIuc2Vj
b25kKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoY29ubmVjdGlv
blRhcmdldFBhaXIpLT5zZXRUYXJnZXROYW1lKHRhcmdldC5uYW1lKTsKLSAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRhcmdldHNUb1JlbW92
ZS5hcHBlbmQoY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKTsKLSAgICB9Ci0gICAgZm9yIChh
dXRvIHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQotICAgICAgICBtX2luc3BlY3RvclByb3h5
TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0KLSAg
ICBtX3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7Ci0gICAg
bV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklE
LCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBhdXRvIHBy
b3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklE
LCB0YXJnZXRJRCkpOwotICAgIEFTU0VSVChwcm94eSk7Ci0gICAgaWYgKCFwcm94eSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nOjpmcm9t
VVRGOChtZXNzYWdlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWRlZTAyY2U1ZDYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGli
L0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9Tb2NrZXRDb25uZWN0aW9uLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9HQ2FuY2VsbGFi
bGUgR0NhbmNlbGxhYmxlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OwotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7Ci1jbGFzcyBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgewotcHVi
bGljOgotICAgIHZpcnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQm
KSA9IDA7Ci19OwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNv
bnN0IGNoYXIqIGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVy
Jik7Ci0gICAgflJlbW90ZUluc3BlY3RvckNsaWVudCgpOwotCi0gICAgc3RydWN0IFRhcmdldCB7
Ci0gICAgcHVibGljOgotICAgICAgICB1aW50NjRfdCBpZDsKLSAgICAgICAgQ1N0cmluZyB0eXBl
OwotICAgICAgICBDU3RyaW5nIG5hbWU7Ci0gICAgICAgIENTdHJpbmcgdXJsOwotICAgIH07Ci0K
LSAgICBjb25zdCBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4mIHRhcmdldHMoKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldHM7IH0KLSAgICBjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0
KCkgY29uc3QgeyByZXR1cm4gbV9ob3N0QW5kUG9ydDsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFj
a2VuZENvbW1hbmRzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0K
LQotICAgIHZvaWQgaW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdl
dElEKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25J
RCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgY2xvc2VGcm9t
RnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCk7Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVy
cyYgbWVzc2FnZUhhbmRsZXJzKCk7Ci0gICAgdm9pZCBzZXR1cENvbm5lY3Rpb24oUmVmPFNvY2tl
dENvbm5lY3Rpb24+JiYpOwotICAgIHZvaWQgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0KLSAgICB2
b2lkIHNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKik7Ci0gICAgdm9pZCBzZXRUYXJnZXRM
aXN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4mJik7Ci0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJn
ZXRJRCwgY29uc3QgY2hhciopOwotCi0gICAgU3RyaW5nIG1faG9zdEFuZFBvcnQ7Ci0gICAgU3Ry
aW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOwotICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBt
X29ic2VydmVyOwotICAgIFJlZlB0cjxTb2NrZXRDb25uZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rp
b247Ci0gICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgSGFzaE1h
cDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPHN0ZDo6
cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9y
UHJveHk+PiBtX2luc3BlY3RvclByb3h5TWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OWM0NDY1NzY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5
OwotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+V2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCBib29s
IG9wZW5XaW5kb3coV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENsb3NlKFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBicmluZ1Rv
RnJvbnQoV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rl
ZFVSTENoYW5nZWQoV2ViSW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGRldGFjaChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBo
ZWlnaHQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJ
bnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIHdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eShXZWJJbnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxh
YmxlKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjZmRlMzQ5YmI3MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDUzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9y
b25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdh
dGlvbi5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKLSNpbmNsdWRlICJXS0Fy
cmF5LmgiCi0jaW5jbHVkZSAiV0tDb250ZXh0TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJXS011dGFi
bGVBcnJheS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9y
VUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgotI2luY2x1
ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0d0a1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB2b2lkIGluc3BlY3RvclZp
ZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViSW5z
cGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJv
eHkqPih1c2VyRGF0YSk7Ci0KLSAgICAvLyBJbmZvcm0gV2ViUHJvY2VzcyBhYm91dCB3ZWJpbnNw
ZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAotICAgIC8vIHJlc3VsdHMgaW4gZmFpbHVyZSBv
ZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9yLgotICAgIGluc3BlY3RvclBy
b3h5LT5jbG9zZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRDbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmIGNsaWVudCkKLXsKLSAgICBt
X2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luc3Bl
Y3RvcldpbmRvdyk7Ci0gICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lU
X0lOU1BFQ1RPUl9XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCAhbV9pbnNwZWN0ZWRVUkxTdHJp
bmcuaXNFbXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSA6IG51bGxw
dHIpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VlZGVkRGF0YWJhc2VRdW90
YShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdLU3RyaW5nUmVm
LCBXS1N0cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVu
c2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25n
IGV4cGVjdGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQotewotICAgIHJldHVybiBzdGQ6Om1heDx1bnNp
Z25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnREYXRhYmFzZVVzYWdlICogMS4y
NSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3Rv
clByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0PHZvaWQq
PihjbGllbnRJbmZvKSk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLSAgICB3ZWJJ
bnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOwotfQotCi1zdGF0aWMgdm9pZCBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25B
Y3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxp
c3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgLy8g
QWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgotICAgIEFQSTo6RnJh
bWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNl
RnJhbWUoKTsKLSAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFt
ZSgpKSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3Rv
clByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZv
KTsKLSAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotCi0gICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3Qo
KTsKLQotICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCi0g
ICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVl
c3QudXJsKCkpKSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJv
bSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgotICAgIHRvSW1wbChsaXN0ZW5lclJl
ZiktPmlnbm9yZSgpOwotCi0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVj
dGVkIHBhZ2UuCi0gICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJl
cXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldENvbnRleHRNZW51
RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tBcnJheVJlZiBwcm9wb3NlZE1l
bnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVzdFJlc3VsdFJlZiwgV0tUeXBl
UmVmLCBjb25zdCB2b2lkKikKLXsKLSAgICBXS011dGFibGVBcnJheVJlZiBtZW51SXRlbXMgPSBX
S011dGFibGVBcnJheUNyZWF0ZSgpOwotCi0gICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNp
emUocHJvcG9zZWRNZW51UmVmKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgY29udGV4dE1lbnVJdGVtID0gc3Rh
dGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChwcm9w
b3NlZE1lbnVSZWYsIGkpKTsKLSAgICAgICAgc3dpdGNoIChXS0NvbnRleHRNZW51SXRlbUdldFRh
Zyhjb250ZXh0TWVudUl0ZW0pKSB7Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFn
T3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdP
cGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdP
cGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdP
cGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZExpbmtUb0Rpc2s6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0ZW1zLCBjb250ZXh0TWVudUl0ZW0p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqbmV3TWVudVJl
ZiA9IG1lbnVJdGVtczsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkp
OwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3KTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMg
PSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4i
KTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0
byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5n
aW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVk
KHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25z
b2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0
UnVudGltZUZsYWdzKHsKLSAgICB9KTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91
cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBh
Z2UoKSkpOwotCi0gICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgm
aW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLSAgICBtX2luc3BlY3Rv
clZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJh
dGlvbi5wdHIoKSkpOwotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9p
bnNwZWN0b3JWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcp
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NB
TExCQUNLKGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKLQotICAgIFdLUGFnZVVJQ2xp
ZW50VjIgdWlDbGllbnQgPSB7Ci0gICAgICAgIHsgMiwgdGhpcyB9LAotICAgICAgICBudWxscHRy
LCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0
ciwgLy8gc2hvd1BhZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdlCi0gICAgICAgIG51
bGxwdHIsIC8vIHRha2VGb2N1cwotICAgICAgICBudWxscHRyLCAvLyBmb2N1cwotICAgICAgICBu
dWxscHRyLCAvLyB1bmZvY3VzCi0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVy
dAotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQotICAgICAgICBudWxs
cHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0Ci0gICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1
c1RleHQKLSAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVj
YXRlZEZvclVzZVdpdGhWMAotICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9u
Q2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5v
dEhhbmRsZUtleUV2ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZl
bnQKLSAgICAgICAgbnVsbHB0ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCi0gICAgICAgIG51bGxw
dHIsIC8vIHNldFRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJW
aXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51
bGxwdHIsIC8vIGlzU3RhdHVzQmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0
dXNCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCi0gICAgICAgIG51
bGxwdHIsIC8vIHNldFJlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFt
ZSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIs
IC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAotICAgICAgICBudWxscHRyLCAvLyBkaWRE
cmF3Ci0gICAgICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwKLSAgICAgICAgZXhjZWVkZWRE
YXRhYmFzZVF1b3RhLAotICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwsCi0gICAgICAg
IG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QK
LSAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0Ci0gICAgICAgIG51bGxwdHIsIC8vIGZv
b3RlckhlaWdodAotICAgICAgICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCi0gICAgICAgIG51bGxw
dHIsIC8vIGRyYXdGb290ZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRGcmFtZQotICAgICAg
ICBudWxscHRyLCAvLyBydW5Nb2RhbAotICAgICAgICBudWxscHRyLCAvLyB1bnVzZWQKLSAgICAg
ICAgbnVsbHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgotICAgICAgICBu
dWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Ci0gICAgICAgIG51bGxwdHIsIC8v
IGNyZWF0ZVBhZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQK
LSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlj
a2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9y
UGlja2VyCi0gICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgotICAgICAgICBudWxs
cHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKLSAgICB9OwotCi0gICAgV0tQ
YWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQgPSB7Ci0gICAgICAgIHsgMCwg
dGhpcyB9LAotICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAotICAgICAg
ICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKLSAgICAgICAg
bnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAotICAgICAgICBudWxscHRyLCAv
LyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAv
LyBkaWRDb21taXROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmln
YXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24KLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKLSAgICAgICAgbnVsbHB0
ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NE
aWRDaGFuZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UKLSAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAotICAgICAgICBudWxscHRyLCAv
LyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5Ci0KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5O
YXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdl
c3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAotICAgIH07
Ci0KLSAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51Q2xpZW50ID0gewot
ICAgICAgICB7IDMsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVG
cm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwg
Ly8gY3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gY29u
dGV4dE1lbnVEaXNtaXNzZWQKLSAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51
LAotICAgICAgICBudWxscHRyLCAvLyBzaG93Q29udGV4dE1lbnUKLSAgICAgICAgbnVsbHB0ciwg
Ly8gaGlkZUNvbnRleHRNZW51Ci0gICAgfTsKLQotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9y
UGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2lu
c3BlY3RvclZpZXcpKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0KLSAgICBXS1BhZ2VT
ZXRQYWdlVUlDbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVudC5iYXNlKTsKLSAg
ICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5h
dmlnYXRpb25DbGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50
KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7Ci0KLSAgICBy
ZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50
LT5vcGVuV2luZG93KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBp
bnNwZWN0ZWRWaWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoaW5zcGVjdGVkUGFn
ZSgpLT52aWV3V2lkZ2V0KCkpOwotICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRv
cGxldmVsV2luZG93KGluc3BlY3RlZFZpZXdQYXJlbnQpKQotICAgICAgICBpbnNwZWN0ZWRWaWV3
UGFyZW50ID0gbnVsbHB0cjsKLQotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwotICAg
IG1faW5zcGVjdG9yV2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KGluc3BlY3RlZFZp
ZXdQYXJlbnQgPyBHVEtfV0lORE9XKGluc3BlY3RlZFZpZXdQYXJlbnQpIDogbnVsbHB0cik7Ci0g
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1f
aW5zcGVjdG9yVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci0K
LSAgICBpZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgdXBkYXRl
SW5zcGVjdG9yV2luZG93VGl0bGUoKTsKLQotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIo
R19PQkpFQ1QobV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1f
aW5zcGVjdG9yV2luZG93KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV9p
bnNwZWN0b3JXaW5kb3cpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yVmlldykg
ewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0
b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwg
dGhpcyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAg
aWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2xvc2UoKnRoaXMpOwotCi0gICAg
aWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2lu
c3BlY3RvcldpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFz
aCgpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgp
Ci17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1S
ZXNldFN0YXRlKCkKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Ccmlu
Z1RvRnJvbnQoKQotewotICAgIGlmIChtX2lzT3BlbmluZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5icmluZ1RvRnJvbnQoKnRoaXMpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxl
dmVsKG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5U
b3BsZXZlbFdpbmRvdyhwYXJlbnQpKQotICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJ
TkRPVyhwYXJlbnQpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Ccmlu
Z0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1i
b29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIEd0a1dpZGdl
dCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKLSAg
ICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0g
ICAgICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lO
RE9XKHBhcmVudCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQotewot
ICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJsOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAg
ICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMsIHVybCk7Ci0KLSAgICBpZiAo
bV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbCIpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RvclRlc3RQYWdlVVJMKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcv
d2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbCIpOwotfQotCi1TdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIHJldHVybiBTdHJp
bmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvIik7Ci19
Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVi
dWdnYWJsZSgpCi17Ci0gICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46
IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdl
dC4KLSAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25l
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewot
ICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2Uo
KS0+dmlld1dpZGdldCgpKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9h
bGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgR1JlZlB0cjxHdGtX
aWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYgKG1faW5zcGVj
dG9yV2luZG93KSB7Ci0gICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIo
bV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwotICAgICAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9
IDA7Ci0gICAgfQotCi0gICAgLy8gU2V0IGEgZGVmYXVsdCBzaXplcyBiYXNlZCBvbiBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0
QXR0YWNoZWRTaXplID0gMzAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0
YWNoZWRXaWR0aCA9IDc1MDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFj
aGVkSGVpZ2h0ID0gMjUwOwotCi0gICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVu
dFNpZGU6OkJvdHRvbSkgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQg
PSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0
LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1T
ZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6
Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0dGFjaCgqdGhpcykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9X
RUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JW
aWV3LCBtX2F0dGFjaG1lbnRTaWRlKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JW
aWV3KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewot
ICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVj
dG9yVmlldzsKLSAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVudC0+ZGV0YWNoKCp0aGlzKSkg
ewotICAgICAgICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9pc0F0dGFjaGVkIGlzIHRydWUs
IGJ1dCBpdCBjb3VsZCBjYWxsZWQgYmVmb3JlCi0gICAgICAgIC8vIHRoZSBpbnNwZWN0b3IgaXMg
b3BlbmVkIGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2VkIHF1aWNrbHkuIFNvLAotICAg
ICAgICAvLyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQuCi0gICAgICAgIGlmIChHdGtX
aWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtX2luc3BlY3RvclZpZXcpKQot
ICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBt
X2luc3BlY3RvclZpZXcpOwotICAgIH0KLQotICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUg
bm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0
dGFjaGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNw
ZWN0b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zpc2libGUpIHsKLSAgICAgICAgLy8gVGhlIGlu
c3BlY3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3Rp
ZnkgdGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRoZQotICAgICAgICAvLyBpbnNwZWN0b3IgaW4g
dGhpcyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0gICAgICAgIG1faW5z
cGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBvcGVu
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRD
aGFuZ2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKLSAgICB3ZWJraXRXZWJWaWV3QmFz
ZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2Uo
KS0+dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlm
ICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKCp0aGlzLCB3aWR0aCk7Ci0g
ICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdpZHRoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotc3RhdGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3Qq
IHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQot
ewotICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7Ci0gICAgaWYgKCFnX2Zp
bGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRy
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBh
Z2VQcm94eSo+KHVzZXJEYXRhKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dl
dF9wYXRoKGZpbGUpKTsKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSksIHBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBm
b3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7Ci0K
LSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVj
dG9yVmlldyk7Ci0gICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5k
b3cocGFyZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtGaWxlQ2hvb3Nl
ck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfbmF0aXZlX25ldygi
U2F2ZSBGaWxlIiwKLSAgICAgICAgR1RLX1dJTkRPVyhwYXJlbnQpLCBHVEtfRklMRV9DSE9PU0VS
X0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7Ci0KLSAgICBHdGtGaWxlQ2hvb3Nlciog
Y2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKLSAgICBndGtfZmlsZV9j
aG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOwotCi0g
ICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1
c3RvbSBVUkkgc2NoZW1lLCBzdWNoCi0gICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2Fu
J3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCi0gICAgLy8gdW5m
b3J0dW5hdGVseS4KLSAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOwotICAgIC8vIFN0
cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCi0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVu
dF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cu
Z2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQotICAgICAgICByZXR1cm47Ci0KLSAgICBW
ZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKLSAgICBDU3RyaW5nIGRhdGFTdHJpbmc7Ci0gICAgaWYg
KGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0
YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOwotICAgIH0gZWxzZQotICAgICAgICBkYXRh
U3RyaW5nID0gY29udGVudC51dGY4KCk7Ci0KLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFT
dHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOwot
ICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5n
Lmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9
IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKLSAgICBHVW5p
cXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKLSAgICBnX2Zp
bGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBu
dWxscHRyLCBmYWxzZSwKLSAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9O
LCBudWxscHRyLCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wg
YXZhaWxhYmxlKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZENo
YW5nZUF0dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywgYXZhaWxhYmxlKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2Vi
S2l0SW5zcGVjdG9yV2luZG93LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJL
aXRJbnNwZWN0b3JXaW5kb3cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDkw
ZjBlNmYzMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dl
YktpdEluc3BlY3RvcldpbmRvdy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCi0KLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5j
bHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
Ci1zdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvdyB7Ci0gICAgR3RrV2luZG93IHBhcmVudDsK
LQotICAgIEd0a1dpZGdldCogaGVhZGVyQmFyOwotfTsKLQotc3RydWN0IF9XZWJLaXRJbnNwZWN0
b3JXaW5kb3dDbGFzcyB7Ci0gICAgR3RrV2luZG93Q2xhc3MgcGFyZW50OwotfTsKLQotR19ERUZJ
TkVfVFlQRShXZWJLaXRJbnNwZWN0b3JXaW5kb3csIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93LCBH
VEtfVFlQRV9XSU5ET1cpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2Ns
YXNzX2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MqKQotewotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvdyogd2lu
ZG93KQotewotICAgIHdpbmRvdy0+aGVhZGVyQmFyID0gZ3RrX2hlYWRlcl9iYXJfbmV3KCk7Ci0g
ICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3RpdGxlKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVy
QmFyKSwgXygiV2ViIEluc3BlY3RvciIpKTsKLSAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc2hvd19j
bG9zZV9idXR0b24oR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBUUlVFKTsKLSAg
ICBndGtfd2luZG93X3NldF90aXRsZWJhcihHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+aGVh
ZGVyQmFyKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93LT5oZWFkZXJCYXIpOwotfQotCi1H
dGtXaWRnZXQqIHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhHdGtXaW5kb3cqIHBhcmVudCkKLXsK
LSAgICByZXR1cm4gR1RLX1dJREdFVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSU5TUEVDVE9S
X1dJTkRPVywgInR5cGUiLCBHVEtfV0lORE9XX1RPUExFVkVMLCAidHJhbnNpZW50LWZvciIsIHBh
cmVudCwKLSAgICAgICAgImRlZmF1bHQtd2lkdGgiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlh
bFdpbmRvd1dpZHRoLCAiZGVmYXVsdC1oZWlnaHQiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlh
bFdpbmRvd0hlaWdodCwgbnVsbHB0cikpOwotfQotCi12b2lkIHdlYmtpdEluc3BlY3RvcldpbmRv
d1NldFN1YnRpdGxlKFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93LCBjb25zdCBjaGFyKiBz
dWJ0aXRsZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19JTlNQRUNUT1JfV0lO
RE9XKHdpbmRvdykpOwotCi0gICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3N1YnRpdGxlKEdUS19IRUFE
RVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgc3VidGl0bGUpOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlYmRjMjhkMTA5Zi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XICAgICAgICAg
ICAgKHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9J
TlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIFdlYktpdEluc3BlY3Rvcldp
bmRvdykpCi0jZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9X
SU5ET1cpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1Jf
V0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19J
TlNQRUNUT1JfV0lORE9XX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQotI2RlZmluZSBXRUJLSVRfSU5T
UEVDVE9SX1dJTkRPV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5k
b3dDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgV2ViS2l0
SW5zcGVjdG9yV2luZG93OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0Ns
YXNzIFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzOwotCi1HVHlwZSB3ZWJraXRfaW5zcGVjdG9y
X3dpbmRvd19nZXRfdHlwZSh2b2lkKTsKLQotR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5k
b3dOZXcoR3RrV2luZG93KiBwYXJlbnQpOwotdm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRT
dWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cqLCBjb25zdCBjaGFyKiBzdWJ0aXRsZSk7Ci0K
LUdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJ
bnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmJhNjk1ZTZiYS4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVS
ZWNvZ25pemVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29n
bml6ZXIuaD4KLQotQGludGVyZmFjZSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2du
aXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKLS0gKENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJ
VmlldyAqKXZpZXc7Ci1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVS
ZWNvZ25pemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjdmZTdiY2NkYi4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9y
Tm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0
b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0KLSNpbXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29nbml6ZXJTdWJjbGFzcy5oPgotI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JOb2Rl
U2VhcmNoR2VzdHVyZVJlY29nbml6ZXIgewotICAgIFJldGFpblB0cjxVSVRvdWNoPiBfdG91Y2g7
Ci19Ci0KLS0gKENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJVmlldyAqKXZpZXcKLXsKLSAgICBy
ZXR1cm4gW190b3VjaCBsb2NhdGlvbkluVmlldzp2aWV3XTsKLX0KLQotLSAodm9pZClfcHJvY2Vz
c1RvdWNoZXM6KE5TU2V0ICopdG91Y2hlcyBzdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
KW5ld1N0YXRlCi17Ci0gICAgQVNTRVJUKF90b3VjaCk7Ci0gICAgaWYgKFt0b3VjaGVzIGNvbnRh
aW5zT2JqZWN0Ol90b3VjaC5nZXQoKV0pCi0gICAgICAgIHNlbGYuc3RhdGUgPSBuZXdTdGF0ZTsK
LX0KLQotLSAodm9pZCl0b3VjaGVzQmVnYW46KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJ
RXZlbnQgKilldmVudAotewotICAgIGlmIChzZWxmLnN0YXRlICE9IFVJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZVBvc3NpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIV90b3VjaCk7
Ci0gICAgX3RvdWNoID0gW3RvdWNoZXMgYW55T2JqZWN0XTsKLQotICAgIFtzZWxmIF9wcm9jZXNz
VG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuXTsKLX0K
LQotLSAodm9pZCl0b3VjaGVzTW92ZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZl
bnQgKilldmVudAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWRdOwotfQotCi0tICh2b2lkKXRvdWNoZXNFbmRl
ZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3Nl
bGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRl
RW5kZWRdOwotfQotCi0tICh2b2lkKXRvdWNoZXNDYW5jZWxsZWQ6KE5TU2V0ICopdG91Y2hlcyB3
aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0
b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZF07Ci19Ci0KLS0g
KHZvaWQpcmVzZXQKLXsKLSAgICBfdG91Y2ggPSBuaWw7Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYmRlYjVmNmQw
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLQotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2lt
cG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV0tGcmFtZUlu
Zm8uaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldL
TmF2aWdhdGlvbkFjdGlvbi5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKLSNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5o
IgotI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNp
bXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8
U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
Q2VydGlmaWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotQGludGVy
ZmFjZSBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNX
aW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7Ci0gICAg
V2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OwotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyCi0KLS0gKE5TUmVjdCl3
aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNo
ZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQot
ICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgp
LmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAg
IHJldHVybiByZWN0OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJv
eHkKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRD
cmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVy
Ci17Ci0gICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOwotfQotCi0tIChCT09M
KWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIHJldHVybiBf
aW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV0tXZWJWaWV3ICpSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6d2ViVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9y
Vmlldy5nZXQoKS53ZWJWaWV3OwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbV9v
YmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0
ZXIgYWxsb2NdIGluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOwotCi0gICAg
bV9pbnNwZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTpudWxscHRyXSk7Ci0gICAgW21faW5zcGVjdG9yVmll
dy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgIG1fd2luZG93
ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdl
Ykluc3BlY3RvclByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlKTsKLSAgICBbbV93
aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0gICAgW21fd2luZG93IHNl
dEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JXaW5kb3dGcmFtZSJdOwot
Ci0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgpLmNvbnRlbnRWaWV3Owot
ICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRzXTsKLSAgICBbY29udGVu
dFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOwotCi0gICAgcmV0dXJuIHdlYlZpZXcoKS0+X3Bh
Z2UuZ2V0KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX3dpbmRvdykgewotICAgICAg
ICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21fd2luZG93IGNsb3NlXTsK
LSAgICAgICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yVmll
dykgewotICAgICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0g
ICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmpDQWRh
cHRlcikKLSAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAgICBbTlNXaW5kb3cgcmVt
b3ZlRnJhbWVVc2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3NhdmVOYW1lXV07Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAg
ICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLSAgICBbbV93aW5kb3cgbWFr
ZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQot
ewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFjLgotCi0gICAg
QVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZv
cm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgp
OwotICAgIGlmICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNv
bmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAg
Zm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3Jt
VVJMKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBO
ZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29w
eSA9IHN1Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OwotCi0g
ICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJU
KGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3Vn
Z2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkg
ewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0
RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRl
bnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVu
Z3RoOm91dC5zaXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFj
dHVhbFVSTCBhdG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW2Nv
bnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFn
ZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZl
KFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQo
KSk7Ci0gICAgfTsKLQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7Ci0gICAgICAgIHNhdmVU
b1VSTChwbGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQ
YW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKLSAgICBwYW5lbC5uYW1lRmll
bGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OwotCi0gICAgLy8g
SWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEg
cGF0aCBhbmQKLSAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90
aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRo
ZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRm
b3JtVVJMLmlzRmlsZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3Jt
VVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0KLSAgICBhdXRvIGNvbXBsZXRp
b25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0g
TlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NF
UlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAgICAgc2F2ZVRvVVJMKHBhbmVs
LlVSTCk7Ci0gICAgfTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2lu
ZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAg
W3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6
Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
W3BhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpCi17Ci0gICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMu
Ci0KLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIFJldGFp
blB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3Vn
Z2VzdGVkVVJMKTsKLSAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxy
ZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxV
UkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmls
ZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpO
VUxMXTsKLSAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURh
dGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAg
ICBbaGFuZGxlIGNsb3NlRmlsZV07Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2Ug
PSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOwotICAgIGluc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwg
YWJzb2x1dGVTdHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgd2Vi
VmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewot
ICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOnVybF1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykK
LXsKLSAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWlu
UHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNl
cnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIEFTU0VSVChtX3dpbmRvdyk7Ci0j
aWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBi
ZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVu
ZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8u
dHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVn
aW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRT
ZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICop
Y2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKLSNlbmRp
ZgotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFz
IGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlz
dCBiZWZvcmVoYW5kLgotICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBb
Y2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcg
c2V0RGlzcGxheVRydXN0OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRy
dXN0Ok5PXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107Ci0g
ICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwOGJkMDhmZjlkNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8d3RmL05ha2VkUHRyLmg+Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0KLU9CSkNfQ0xBU1MgV0tXZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLX0KLQotQHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZTsKLQotTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KLQotQGludGVyZmFj
ZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIDogTlNPYmplY3QKLQotQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXcgKndlYlZpZXc7Ci1AcHJvcGVydHkgKG5vbmF0b21p
Yywgd2VhaykgaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEluc3BlY3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktp
dDo6V2ViUGFnZVByb3h5PilpbnNwZWN0ZWRQYWdlOwotCi0rIChCT09MKXZpZXdJc0luc3BlY3Rv
cldlYlZpZXc6KE5TVmlldyAqKXZpZXc7Ci0KLUBlbmQKLQotQHByb3RvY29sIFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotLSAoQk9PTClpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7Ci0tICh2b2lkKWluc3BlY3Rv
clZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci1AZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VO
RAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDkyNjNlMGZkNmUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLQotI2lmIFBMQVRGT1JNKE1B
QykKLQotI2ltcG9ydCAiQVBJTmF2aWdhdGlvbi5oIgotI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5o
IgotI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3
LmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlv
bkRlbGVnYXRlLmgiCi0jaW1wb3J0ICJXS09wZW5QYW5lbFBhcmFtZXRlcnMuaCIKLSNpbXBvcnQg
IldLUHJlZmVyZW5jZXNQcml2YXRlLmgiCi0jaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0jaW1w
b3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yVXRpbGl0aWVz
LmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5o
PgotCi1AaW50ZXJmYWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKCkgPFdLVUlEZWxlZ2F0
ZSwgV0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+Ci1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHsKLSAgICBO
YWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX2luc3BlY3RlZFBhZ2U7Ci0gICAgUmV0YWlu
UHRyPFdLSW5zcGVjdG9yV0tXZWJWaWV3PiBfd2ViVmlldzsKLSAgICBXZWFrT2JqQ1B0cjxpZCA8
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPj4gX2RlbGVnYXRlOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBh
Z2VQcm94eT4paW5zcGVjdGVkUGFnZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gVGhlIChsb2NhbCkgaW5zcGVjdGVkIHBh
Z2UgaXMgbmlsIGlmIHRoZSBjb250cm9sbGVyIGlzIGhvc3RpbmcgYSBSZW1vdGUgV2ViIEluc3Bl
Y3RvciB2aWV3LgotICAgIF9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKLQotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAoX3dlYlZpZXcpIHsK
LSAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW193ZWJWaWV3
IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbX3dlYlZpZXcgc2V0SW5zcGVj
dG9yV0tXZWJWaWV3RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgX3dlYlZpZXcgPSBuaWw7Ci0gICAg
fQotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChpZCA8V0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0QXV0
b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKFdLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICAvLyBDb25z
dHJ1Y3QgbGF6aWx5IHNvIHRoZSBjbGllbnQgY2FuIHNldCB0aGUgZGVsZWdhdGUgYmVmb3JlIHRo
ZSBXZWJWaWV3IGlzIGNyZWF0ZWQuCi0gICAgaWYgKCFfd2ViVmlldykgewotICAgICAgICBOU1Jl
Y3QgaW5pdGlhbEZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5Ojppbml0aWFsV2luZG93V2lkdGgsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRp
YWxXaW5kb3dIZWlnaHQpOwotICAgICAgICBfd2ViVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3Rv
cldLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTppbml0aWFsRnJhbWUgY29uZmlndXJhdGlv
bjpbc2VsZiBjb25maWd1cmF0aW9uXV0pOwotICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0
ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpzZWxmXTsK
LSAgICAgICAgW193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOnNlbGZdOwot
ICAgICAgICBbX3dlYlZpZXcgX3NldEF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0czpO
T107Ci0gICAgICAgIFtfd2ViVmlldyBfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTpZRVNdOwotICAg
ICAgICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBO
U1ZpZXdIZWlnaHRTaXphYmxlXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gX3dlYlZpZXcuZ2V0KCk7
Ci19Ci0KLS0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
RGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0g
KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCi17Ci0gICAgYXV0byBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKLQotICAgIFdLUHJlZmVyZW5jZXMgKnByZWZlcmVuY2VzID0gY29uZmlndXJhdGlvbi5nZXQo
KS5wcmVmZXJlbmNlczsKLSAgICBwcmVmZXJlbmNlcy5fYWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzID0gWUVTOwotICAgIFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMczpZRVNdOwotICAgIHByZWZlcmVuY2VzLl9zdG9yYWdlQmxvY2tpbmdQb2xpY3kg
PSBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lBbGxvd0FsbDsKLSAgICBwcmVmZXJlbmNlcy5famF2
YVNjcmlwdFJ1bnRpbWVGbGFncyA9IDA7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gQWxsb3cg
ZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3
aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLl9kZXZlbG9wZXJFeHRy
YXNFbmFibGVkID0gWUVTOwotICAgIHByZWZlcmVuY2VzLl9sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0
ZW1Db25zb2xlRW5hYmxlZCA9IFlFUzsKLSNlbmRpZgotCi0gICAgcHJlZmVyZW5jZXMuX2RpYWdu
b3N0aWNMb2dnaW5nRW5hYmxlZCA9IFlFUzsKLQotICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDopXSkgewotICAgICAgICBpZiAoW19kZWxlZ2F0ZSBpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OnNlbGZdKSB7Ci0gICAgICAg
ICAgICBwcmVmZXJlbmNlcy5faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBO
TzsKLSAgICAgICAgICAgIHByZWZlcmVuY2VzLl9wYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1
cHByZXNzaW9uRW5hYmxlZCA9IE5POwotICAgICAgICB9Ci0gICAgfQotCi0gICAgW2NvbmZpZ3Vy
YXRpb24gc2V0UHJvY2Vzc1Bvb2w6d3JhcHBlcihXZWJLaXQ6Omluc3BlY3RvclByb2Nlc3NQb29s
KFdlYktpdDo6aW5zcGVjdG9yTGV2ZWxGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKSkpXTsKLSAgICBb
Y29uZmlndXJhdGlvbiBfc2V0R3JvdXBJZGVudGlmaWVyOldlYktpdDo6aW5zcGVjdG9yUGFnZUdy
b3VwSWRlbnRpZmllckZvclBhZ2UoX2luc3BlY3RlZFBhZ2UpXTsKLQotICAgIHJldHVybiBjb25m
aWd1cmF0aW9uLmF1dG9yZWxlYXNlKCk7Ci19Ci0KLSsgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2Vi
VmlldzooTlNWaWV3ICopdmlldwotewotICAgIHJldHVybiBbdmlldyBpc0tpbmRPZkNsYXNzOltX
S0luc3BlY3RvcldLV2ViVmlldyBjbGFzc11dOwotfQotCi0vLyBNQVJLOiBXS1VJRGVsZWdhdGUg
bWV0aG9kcwotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGdldFdpbmRv
d0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShDR1JlY3QpKWNvbXBsZXRpb25I
YW5kbGVyCi17Ci0gICAgaWYgKCFfd2ViVmlldy5nZXQoKS53aW5kb3cpCi0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENHUmVjdFplcm8pOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoTlNSZWN0VG9DR1JlY3QoW3dlYlZpZXcgZnJhbWVdKSk7Ci19Ci0KLS0gKHZvaWQpX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2V0V2luZG93RnJhbWU6KENHUmVjdClmcmFtZQot
ewotICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBbX3dlYlZpZXcuZ2V0KCkud2luZG93IHNldEZyYW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUp
IGRpc3BsYXk6WUVTXTsKLX0KLQotLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IHJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOihXS09wZW5QYW5lbFBhcmFtZXRlcnMgKilwYXJh
bWV0ZXJzIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNVUkwgKj4gKlVSTHMpKWNvbXBsZXRpb25IYW5kbGVy
Ci17Ci0gICAgTlNPcGVuUGFuZWwgKm9wZW5QYW5lbCA9IFtOU09wZW5QYW5lbCBvcGVuUGFuZWxd
OwotICAgIG9wZW5QYW5lbC5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbiA9IHBhcmFtZXRlcnMuYWxs
b3dzTXVsdGlwbGVTZWxlY3Rpb247Ci0KLSAgICBhdXRvIHJlcG9ydFNlbGVjdGVkRmlsZXMgPSBe
KE5TSW50ZWdlciByZXN1bHQpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9u
c2VPSykKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG9wZW5QYW5lbC5VUkxzKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICB9Owot
Ci0gICAgaWYgKF93ZWJWaWV3LmdldCgpLndpbmRvdykKLSAgICAgICAgW29wZW5QYW5lbCBiZWdp
blNoZWV0TW9kYWxGb3JXaW5kb3c6X3dlYlZpZXcuZ2V0KCkud2luZG93IGNvbXBsZXRpb25IYW5k
bGVyOnJlcG9ydFNlbGVjdGVkRmlsZXNdOwotICAgIGVsc2UKLSAgICAgICAgcmVwb3J0U2VsZWN0
ZWRGaWxlcyhbb3BlblBhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOihX
S1NlY3VyaXR5T3JpZ2luICopc2VjdXJpdHlPcmlnaW4gY3VycmVudFF1b3RhOih1bnNpZ25lZCBs
b25nIGxvbmcpY3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZToodW5zaWduZWQgbG9uZyBs
b25nKWN1cnJlbnRPcmlnaW5Vc2FnZSBjdXJyZW50RGF0YWJhc2VVc2FnZToodW5zaWduZWQgbG9u
ZyBsb25nKWN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpZXhw
ZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKHVuc2lnbmVkIGxvbmcgbG9uZyBu
ZXdRdW90YSkpZGVjaXNpb25IYW5kbGVyCi17Ci0gICAgZGVjaXNpb25IYW5kbGVyKHN0ZDo6bWF4
PHVuc2lnbmVkIGxvbmcgbG9uZz4oZXhwZWN0ZWRVc2FnZSwgY3VycmVudFVzYWdlICogMS4yNSkp
OwotfQotCi0tIChOU01lbnUgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjb250ZXh0
TWVudTooTlNNZW51ICopbWVudSBmb3JFbGVtZW50OihfV0tDb250ZXh0TWVudUVsZW1lbnRJbmZv
ICopZWxlbWVudAotewotICAgIGZvciAoTlNJbnRlZ2VyIGkgPSBtZW51Lm51bWJlck9mSXRlbXMg
LSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBOU01lbnVJdGVtICppdGVtID0gW21lbnUgaXRl
bUF0SW5kZXg6aV07Ci0gICAgICAgIHN3aXRjaCAoaXRlbS50YWcpIHsKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkOgotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgotICAgICAgICBjYXNl
IGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKLSAgICAgICAgY2FzZSBr
V0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgotICAgICAgICAgICAgW21l
bnUgcmVtb3ZlSXRlbUF0SW5kZXg6aV07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBtZW51OwotfQotCi0vLyBNQVJLOiBXS05hdmlnYXRpb25EZWxl
Z2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWlu
YXRlOihXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckluc3BlY3RvckRpZENyYXNoOildKQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdD
b250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6c2VsZl07Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05h
dmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAo
XikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSlkZWNpc2lvbkhhbmRsZXIKLXsKLSAgICAvLyBB
bGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgaWYgKCFuYXZp
Z2F0aW9uQWN0aW9uLnRhcmdldEZyYW1lLmlzTWFpbkZyYW1lKSB7Ci0gICAgICAgIGRlY2lzaW9u
SGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxl
LgotICAgIGlmIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0
b3JQYWdlKG5hdmlnYXRpb25BY3Rpb24ucmVxdWVzdC5VUkwpKSB7Ci0gICAgICAgIGRlY2lzaW9u
SGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZS4KLSAgICBkZWNpc2lvbkhh
bmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5Q2FuY2VsKTsKLSAgICAKLSAgICAvLyBBbmQg
aW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICBpZiAoX2luc3BlY3Rl
ZFBhZ2UpCi0gICAgICAgIF9pbnNwZWN0ZWRQYWdlLT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uQWN0
aW9uLnJlcXVlc3QpOwotfQotCi0vLyBNQVJLOiBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRl
IG1ldGhvZHMKLQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9y
V0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlmICghX2luc3BlY3RlZFBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIE9wdGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRpb24+IHJlbG9hZE9w
dGlvbnM7Ci0gICAgaWYgKFdlYktpdDo6bGlua2VkT25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lv
bjo6Rmlyc3RXaXRoRXhwaXJlZE9ubHlSZWxvYWRCZWhhdmlvcikpCi0gICAgICAgIHJlbG9hZE9w
dGlvbnMuYWRkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOwotCi0gICAgX2lu
c3BlY3RlZFBhZ2UtPnJlbG9hZChyZWxvYWRPcHRpb25zKTsKLX0KLQotLSAodm9pZClpbnNwZWN0
b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZp
ZXcKLXsKLSAgICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBf
aW5zcGVjdGVkUGFnZS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RnJvbU9yaWdpbik7
Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAq
KXdlYlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBp
ZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KGluc3BlY3RvclZpZXdDb250cm9sbGVyOndpbGxNb3ZlVG9XaW5kb3c6KV0pCi0gICAgICAgIFtf
ZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5l
d1dpbmRvd107Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93
OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoISFfZGVsZWdhdGUg
JiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdD
b250cm9sbGVyRGlkTW92ZVRvV2luZG93OildKQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3Rv
clZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OnNlbGZdOwotfQotCi1AZW5kCi0KLSNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTdl
NzdjZmU3Zi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dL
SW5zcGVjdG9yV0tXZWJWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLQot
I2lmIFBMQVRGT1JNKE1BQykKLQotQHByb3RvY29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdh
dGU7Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JXS1dlYlZpZXcgOiBXS1dlYlZpZXcKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4g
aW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlCi1AcmVxdWlyZWQKLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3
UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7Ci0tICh2b2lkKWluc3BlY3Rv
cldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmll
dzsKLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdl
YlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7Ci0tICh2b2lkKWlu
c3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3
ZWJWaWV3OwotQGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0YmZlZjRhMDFiYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCisrKyAvZGV2L251
bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2lt
cG9ydCAiV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgiCi0jaW1wb3J0IDx3dGYvV2Vha09iakNQdHIu
aD4KLQotQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yV0tXZWJWaWV3IHsKLSAgICBXZWFrT2Jq
Q1B0cjxpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4+IF9pbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZTsKLX0KLQotLSAoTlNSZWN0KV9vcGFxdWVSZWN0Rm9yV2luZG93TW92ZVdoZW5J
blRpdGxlYmFyCi17Ci0gICAgLy8gVGhpcyBjb252aW5jZXMgQXBwS2l0IHRvIGFsbG93IHdpbmRv
dyBtb3ZlcyB3aGVuIGNsaWNraW5nIGFueXdoZXJlIGluIHRoZSB0aXRsZWJhciAodG9wIDIycHQp
Ci0gICAgLy8gd2hlbiB0aGlzIHZpZXcncyBjb250ZW50cyBjb3ZlciB0aGUgZW50aXJlIHdpbmRv
dydzIGNvbnRlbnRzLCBpbmNsdWRpbmcgdGhlIHRpdGxlYmFyLgotICAgIHJldHVybiBOU1plcm9S
ZWN0OwotfQotCi0tIChOU0ludGVnZXIpdGFnCi17Ci0gICAgcmV0dXJuIFdLSW5zcGVjdG9yVmll
d1RhZzsKLX0KLQotLSAoaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+KWluc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0KLQotLSAodm9pZClzZXRJbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZTooaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+KWRlbGVnYXRlCi17
Ci0gICAgX2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0gKElC
QWN0aW9uKXJlbG9hZDooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3
RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOnNlbGZdOwotfQotCi0tIChJQkFjdGlv
bilyZWxvYWRGcm9tT3JpZ2luOihpZClzZW5kZXIKLXsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dl
YlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOnNlbGZdOwot
fQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwot
ewotICAgIFtzdXBlciB2aWV3V2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOwotICAgIFtzZWxm
Lmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlldzpzZWxmIHdpbGxN
b3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93
Ci17Ci0gICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9XaW5kb3ddOwotICAgIFtzZWxmLmluc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzpzZWxm
XTsKLX0KLQotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmJlNzI4ZDQzNWMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYklu
c3BlY3RvclByb3h5LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIldLSW5zcGVj
dG9yUHJpdmF0ZU1hYy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgot
I2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgi
Ci0jaW1wb3J0ICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQYWdlR3Jv
dXAuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50
ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3RvcldpbmRvdy5oIgotI2ltcG9ydCA8U2VjdXJp
dHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+Ci0jaW1wb3J0IDxTZWN1cml0eUludGVy
ZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUlu
Zm8uaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9C
YXNlNjQuaD4KLQotc3RhdGljIGNvbnN0IE5TVUludGVnZXIgd2luZG93U3R5bGVNYXNrID0gTlNX
aW5kb3dTdHlsZU1hc2tUaXRsZWQgfCBOU1dpbmRvd1N0eWxlTWFza0Nsb3NhYmxlIHwgTlNXaW5k
b3dTdHlsZU1hc2tNaW5pYXR1cml6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrUmVzaXphYmxlIHwg
TlNXaW5kb3dTdHlsZU1hc2tGdWxsU2l6ZUNvbnRlbnRWaWV3OwotCi0vLyBUaGUgdGltZSB3ZSBr
ZWVwIG91ciBXZWJWaWV3IGFsaXZlIGJlZm9yZSBjbG9zaW5nIGl0IGFuZCBpdHMgcHJvY2Vzcy4K
LS8vIFJldXNpbmcgdGhlIFdlYlZpZXcgaW1wcm92ZXMgc3RhcnQgdXAgdGltZSBmb3IgcGVvcGxl
IHRoYXQganVtcCBpbiBhbmQgb3V0IG9mIHRoZSBJbnNwZWN0b3IuCi1zdGF0aWMgY29uc3QgU2Vj
b25kcyB3ZWJWaWV3Q2xvc2VUaW1lb3V0IHsgMV9taW4gfTsKLQotc3RhdGljIHZvaWQqIGtXaW5k
b3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0ID0gJmtXaW5kb3dDb250ZW50TGF5b3V0T2Jz
ZXJ2ZXJDb250ZXh0OwotCi1AaW50ZXJmYWNlIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRl
ciAoKSA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRl
PgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpX
ZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHk7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciB7
Ci0gICAgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotCi0t
IChXS0luc3BlY3RvclJlZilpbnNwZWN0b3JSZWYKLXsKLSAgICByZXR1cm4gdG9BUEkoX2luc3Bl
Y3RvclByb3h5KTsKLX0KLQotLSAoX1dLSW5zcGVjdG9yICopaW5zcGVjdG9yCi17Ci0gICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXIoKl9pbnNwZWN0b3JQcm94
eSk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5z
cGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5Ci17
Ci0gICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JQcm94eSwgaW5zcGVjdG9yUHJveHkpOwotCi0gICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAv
LyBVbnJldGFpbmVkIHRvIGF2b2lkIGEgcmVmZXJlbmNlIGN5Y2xlLgotICAgIF9pbnNwZWN0b3JQ
cm94eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQp
aW52YWxpZGF0ZQotewotICAgIF9pbnNwZWN0b3JQcm94eSA9IG51bGxwdHI7Ci19Ci0KLS0gKE5T
UmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRv
dyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclBy
b3h5KQotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0
UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDAp
OwotICAgIHJldHVybiByZWN0OwotfQotCi0tICh2b2lkKXdpbmRvd0RpZE1vdmU6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAg
ICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lk
KXdpbmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBp
ZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1l
RGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlv
biAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxT
Y3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0
b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hh
bmdlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxTY3JlZW46KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAg
X2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZv
aWQpaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgotewotICAgIC8vIFJlc2l6aW5nIHRoZSB2aWV3cyB3aGlsZSBpbnNpZGUgdGhpcyBub3Rp
ZmljYXRpb24gY2FuIGxlYWQgdG8gYmFkIHJlc3VsdHMgd2hlbiBlbnRlcmluZwotICAgIC8vIG9y
IGV4aXRpbmcgZnVsbCBzY3JlZW4uIFRvIGF2b2lkIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIHRo
ZSB3b3JrIGFmdGVyIGEgZGVsYXkuIFdlIG9ubHkKLSAgICAvLyBkZXBlbmQgb24gdGhpcyBmb3Ig
ZW5mb3JjaW5nIHRoZSBoZWlnaHQgY29uc3RyYWludHMsIHNvIGEgc21hbGwgZGVsYXkgaXNuJ3Qg
dGVycmlibGUuIE1vc3QKLSAgICAvLyBvZiB0aGUgdGltZSB0aGUgdmlld3Mgd2lsbCBhbHJlYWR5
IGhhdmUgdGhlIGNvcnJlY3QgZnJhbWVzIGJlY2F1c2Ugb2YgYXV0b3Jlc2l6aW5nIG1hc2tzLgot
Ci0gICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgICAgICBf
aW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwotICAgIH0pOwot
fQotCi0tICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBv
Zk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VL
ZXksIGlkPiAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29udGV4dAotewotICAgIGlmIChjb250
ZXh0ICE9IGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgIFtz
dXBlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtleVBhdGggb2ZPYmplY3Q6b2JqZWN0IGNoYW5n
ZTpjaGFuZ2UgY29udGV4dDpjb250ZXh0XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IE5TV2luZG93ICp3aW5kb3cgPSBvYmplY3Q7Ci0gICAgQVNTRVJUKFt3aW5kb3cgaXNLaW5kT2ZD
bGFzczpbTlNXaW5kb3cgY2xhc3NdXSk7Ci0gICAgaWYgKHdpbmRvdy5pbkxpdmVSZXNpemUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5
KQotICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFu
Z2UoKTsKLSAgICB9KTsKLX0KLQotLy8gTUFSSzogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRl
bGVnYXRlIG1ldGhvZHMKLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
ckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJv
eHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5ID8gX2luc3Bl
Y3RvclByb3h5LT5pc1VuZGVyVGVzdCgpIDogZmFsc2U7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAg
IGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVu
dFdpbGxNb3ZlRnJvbVdpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRv
dyk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6
KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewot
ICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNo
bWVudERpZE1vdmVUb1dpbmRvdyhpbnNwZWN0b3JWaWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRv
dyk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudFZpZXdEaWRDaGFuZ2Uo
TlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpCi17Ci0gICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgp
IG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om9sZFZpZXddOwot
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9v
YmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlk
Q2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmV3
Vmlld107Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBhdHRhY2gobV9hdHRhY2ht
ZW50U2lkZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRXaWxsTW92
ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdykKLXsKLSAgICBpZiAobV9pc09ic2Vydmlu
Z0NvbnRlbnRMYXlvdXRSZWN0KSB7Ci0gICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0
UmVjdCA9IGZhbHNlOwotICAgICAgICBbb2xkV2luZG93IHJlbW92ZU9ic2VydmVyOm1fb2JqQ0Fk
YXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBjb250ZXh0OmtXaW5k
b3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dpbmRv
dykKLXsKLSAgICBpZiAobV9pc0F0dGFjaGVkICYmICEhbmV3V2luZG93KSB7Ci0gICAgICAgIG1f
aXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IHRydWU7Ci0gICAgICAgIFtuZXdXaW5kb3cg
YWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExheW91
dFJlY3QiIG9wdGlvbnM6MCBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250
ZXh0XTsKLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdW5zaWduZWQgbGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWwoKTsKLSAgICBpZiAobGV2ZWwgPiAx
KSB7Ci0gICAgICAgIE5TU3RyaW5nICpkZWJ1Z1RpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciBbJWRdIOKAlCAlQCIsICJXZWIgSW5z
cGVjdG9yIHdpbmRvdyB0aXRsZSB3aGVuIGluc3BlY3RpbmcgV2ViIEluc3BlY3RvciIpLCBsZXZl
bCwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cg
c2V0VGl0bGU6ZGVidWdUaXRsZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNTdHJpbmcgKnRp
dGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3Bl
Y3RvciDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5nICop
bV91cmxTdHJpbmddOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6dGl0bGVd
OwotICAgIH0KLX0KLQotUmV0YWluUHRyPE5TV2luZG93PiBXZWJJbnNwZWN0b3JQcm94eTo6Y3Jl
YXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJn
ZXRUeXBlIHRhcmdldFR5cGUpCi17Ci0gICAgTlNSZWN0IHdpbmRvd0ZyYW1lID0gIU5TSXNFbXB0
eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkgPyBzYXZlZFdpbmRvd0ZyYW1lIDogTlNNYWtlUmVjdCgw
LCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQpOwotICAgIGF1dG8g
d2luZG93ID0gYWRvcHROUyhbW19XS0luc3BlY3RvcldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250
ZW50UmVjdDp3aW5kb3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5bGVNYXNrIGJhY2tpbmc6TlNC
YWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT10pOwotICAgIFt3aW5kb3cgc2V0TWluU2l6ZTpO
U01ha2VTaXplKG1pbmltdW1XaW5kb3dXaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOwotICAg
IFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKLSAgICBbd2luZG93IHNldENvbGxl
Y3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xs
ZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuUHJpbWFyeSldOwotCi0gICAgYm9vbCBmb3JSZW1vdGVU
YXJnZXQgPSB0YXJnZXRUeXBlID09IEluc3BlY3Rpb25UYXJnZXRUeXBlOjpSZW1vdGU7Ci0gICAg
W3dpbmRvdyBzZXRGb3JSZW1vdGVUYXJnZXQ6Zm9yUmVtb3RlVGFyZ2V0XTsKLQotICAgIENHRmxv
YXQgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplID0gKFt3aW5kb3cgc2NyZWVuXS5mcmFtZS5z
aXplLndpZHRoIC8gMikgLSA0OwotICAgIENHRmxvYXQgbWluaW11bUZ1bGxTY3JlZW5XaWR0aCA9
IHN0ZDo6bWF4PENHRmxvYXQ+KDYzNiwgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXplKTsKLSAg
ICBbd2luZG93IHNldE1pbkZ1bGxTY3JlZW5Db250ZW50U2l6ZTpOU01ha2VTaXplKG1pbmltdW1G
dWxsU2NyZWVuV2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKLSAgICBbd2luZG93IHNldENv
bGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dD
b2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuQWxsb3dzVGlsaW5nKV07Ci0KLSAgICBbd2luZG93
IHNldFRpdGxlYmFyQXBwZWFyc1RyYW5zcGFyZW50OllFU107Ci0KLSAgICAvLyBDZW50ZXIgdGhl
IHdpbmRvdyBpZiB0aGUgc2F2ZWQgZnJhbWUgd2FzIGVtcHR5LgotICAgIGlmIChOU0lzRW1wdHlS
ZWN0KHNhdmVkV2luZG93RnJhbWUpKQotICAgICAgICBbd2luZG93IGNlbnRlcl07Ci0KLSAgICBy
ZXR1cm4gd2luZG93OwotfQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7
Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOwotCi0gICAgbV9jbG9zZUZyb250ZW5kQWZ0
ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fb2JqQ0FkYXB0ZXIpOwotICAgICAgICByZXR1cm4g
W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOwotICAgIH0K
LQotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tXZWJJbnNwZWN0b3JQcm94eU9iakNB
ZGFwdGVyIGFsbG9jXSBpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsKLSAgICBOU1Zp
ZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRW
aWV3KCk7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNl
cnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3
RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9i
amVjdDppbnNwZWN0ZWRWaWV3XTsKLQotICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBh
ZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0
ZWRQYWdlOmluc3BlY3RlZFBhZ2UoKV0pOwotICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVy
LmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAgV2ViUGFnZVBy
b3h5ICppbnNwZWN0b3JQYWdlID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10t
Pl9wYWdlLmdldCgpOwotICAgIEFTU0VSVChpbnNwZWN0b3JQYWdlKTsKLQotICAgIHJldHVybiBp
bnNwZWN0b3JQYWdlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKLQot
ICAgIE5TU3RyaW5nICpzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nID0gaW5zcGVjdGVkUGFnZSgpLT5w
YWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Ci0gICAgTlNS
ZWN0IHNhdmVkV2luZG93RnJhbWUgPSBOU1JlY3RGcm9tU3RyaW5nKHNhdmVkV2luZG93RnJhbWVT
dHJpbmcpOwotCi0gICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBXZWJJbnNwZWN0b3JQcm94eTo6Y3Jl
YXRlRnJvbnRlbmRXaW5kb3coc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdldFR5cGU6
OkxvY2FsKTsKLSAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRl
ci5nZXQoKV07Ci0KLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLSAgICBOU1ZpZXcgKmNvbnRlbnRWaWV3ID0gW21faW5z
cGVjdG9yV2luZG93IGNvbnRlbnRWaWV3XTsKLSAgICBpbnNwZWN0b3JWaWV3LmZyYW1lID0gW2Nv
bnRlbnRWaWV3IGJvdW5kc107Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9y
Vmlld107Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lz
QXR0YWNoZWQgfHwgIW1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmIChtX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgp
IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBu
aWw7Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqQ0FkYXB0ZXIpIHsKLSAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVy
LmdldCgpXTsKLQotICAgICAgICBbbV9vYmpDQWRhcHRlciBpbnZhbGlkYXRlXTsKLSAgICAgICAg
bV9vYmpDQWRhcHRlciA9IG5pbDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCkKLXsKLSAgICBjbG9zZUZy
b250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsK
LSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFtt
X2luc3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmls
OwotICAgIH0KLQotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0YXJ0
T25lU2hvdCh3ZWJWaWV3Q2xvc2VUaW1lb3V0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG1f
Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGNsb3NlRnJv
bnRlbmRQYWdlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgp
Ci17Ci0gICAgaWYgKG1faXNBdHRhY2hlZCkgewotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0g
ICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9p
bnNwZWN0b3JXaW5kb3cgY2xvc2VdOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsK
LSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgp
Ci17Ci0gICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmRlbGV0
ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICAvLyBJZiB0aGUgV2ViIEluc3BlY3RvciBpcyBu
byBsb25nZXIgaW4gdGhlIHNhbWUgd2luZG93IGFzIHRoZSBpbnNwZWN0ZWQgdmlldywKLSAgICAv
LyB0aGVuIHdlIG5lZWQgdG8gcmVvcGVuIHRoZSBJbnNwZWN0b3IgdG8gZ2V0IGl0IGF0dGFjaGVk
IHRvIHRoZSByaWdodCB3aW5kb3cuCi0gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZHJhZ2dp
bmcgdGFicyB0byBhbm90aGVyIHdpbmRvdyBpbiBTYWZhcmkuCi0gICAgaWYgKG1faXNBdHRhY2hl
ZCAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgIT0gaW5zcGVj
dGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpKSB7Ci0gICAgICAgIG9wZW4oKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46
IHRoaXMgd2lsbCBub3QgYnJpbmcgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmkgdG8gdGhlIGZy
b250LCBvbmx5IGl0cyB3aW5kb3cuCi0gICAgW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdl
YlZpZXddLndpbmRvdyBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwotICAgIFtbbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOlttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBbaW5zcGVj
dGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpIG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci19
Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgLy8g
RklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCByZXR1cm4gZmFs
c2UgZm9yIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpLCBvbmx5IGEgYmFja2dyb3VuZCB3aW5k
b3cuCi0gICAgcmV0dXJuIG1faXNWaXNpYmxlICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVy
IHdlYlZpZXddLndpbmRvdy5pc01haW5XaW5kb3c7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCkKLXsKLSAgICBO
U1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1l
bnRWaWV3KCk7Ci0gICAgaWYgKFtXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIHZpZXdJc0luc3Bl
Y3RvcldlYlZpZXc6aW5zcGVjdGVkVmlld10pCi0gICAgICAgIHJldHVybiB3ZWJQcm9jZXNzQ2Fu
QXR0YWNoOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9
IDI1MDsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8g
PSAwLjc1OwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDUw
MDsKLQotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1l
OwotCi0gICAgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gTlNIZWlnaHQoaW5zcGVjdGVk
Vmlld0ZyYW1lKSAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOwotICAgIHJldHVybiBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPD0gbWF4aW11bUF0dGFjaGVkSGVpZ2h0ICYmIG1pbmltdW1BdHRh
Y2hlZFdpZHRoIDw9IE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZh
aWxhYmxlKQotewotICAgIC8vIERvIG5vdGhpbmcuCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
LXsKLSAgICBtX3VybFN0cmluZyA9IHVybFN0cmluZzsKLQotICAgIHVwZGF0ZUluc3BlY3Rvcldp
bmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAg
IEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1wdHkoKSk7Ci0KLSAgICBSZXRhaW5QdHI8U0ZD
ZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNh
dGVQYW5lbCBhbGxvY10gaW5pdF0pOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdzsKLSAgICBpZiAo
bV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHdpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93Lmdl
dCgpOwotICAgIGVsc2UKLSAgICAgICAgd2luZG93ID0gW1ttX2luc3BlY3RvclZpZXdDb250cm9s
bGVyIHdlYlZpZXddIHdpbmRvd107Ci0KLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgd2luZG93
ID0gW05TQXBwIGtleVdpbmRvd107Ci0KLSNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9O
KQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFs
RGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVz
dDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2Nl
cnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0ZTpu
aWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczoo
TlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllF
U107Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0
IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRv
ZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNh
dGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2VydGlm
aWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0
RWRpdGFibGVUcnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWls
czpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5
KCkpOwotICAgIAotICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxV
UkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkgewot
ICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVSTF07
Ci0gICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9yZSB3
ZSBjYW4gc2F2ZSB0byB0aGVtLgotICAgICAgICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVlOwotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQocGxhdGZvcm1VUkwpOwotICAgIGlmICghcGxhdGZvcm1VUkwp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJlbG93
LgotICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2VzdGVkVVJMOwotICAgIFN0cmlu
ZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7Ci0KLSAgICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNVUkwg
KmFjdHVhbFVSTCkgewotICAgICAgICBBU1NFUlQoYWN0dWFsVVJMKTsKLQotICAgICAgICBtX3N1
Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwot
Ci0gICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
b3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91dCwgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2Nd
IGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOwotICAgICAgICAg
ICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxV
UkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVM
TF07Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLSAgICB9OwotCi0gICAgaWYgKCFmb3JjZVNhdmVE
aWFsb2cpIHsKLSAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJMKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFu
ZWxdOwotICAgIHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBh
dGhDb21wb25lbnQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFk
eSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAotICAgIC8vIGNhbiBwcm92aWRlIGEgZ29v
ZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3RlbSdzCi0gICAgLy8g
ZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhl
IGRpYWxvZy4KLSAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJMKQotICAgICAgICBwYW5lbC5k
aXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50
XTsKLQotICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsK
LSAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOwot
ICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsKLSAgICB9OwotCi0gICAgTlNXaW5kb3cgKndp
bmRvdyA9IG1faW5zcGVjdG9yV2luZG93ID8gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCkgOiBbTlNB
cHAga2V5V2luZG93XTsKLSAgICBpZiAod2luZG93KQotICAgICAgICBbcGFuZWwgYmVnaW5TaGVl
dE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxl
cl07Ci0gICAgZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9kYWxd
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBBU1NFUlQo
IXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIFJldGFpblB0cjxOU1VSTD4gYWN0
dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKLSAg
ICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQg
dGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxVUkwpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFu
ZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKLSAgICBbaGFu
ZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbaGFuZGxlIGNsb3Nl
RmlsZV07Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7Ci0g
ICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwot
Ci0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1N0cmluZyAqZnJhbWVTdHJpbmcgPSBOU1N0
cmluZ0Zyb21SZWN0KFttX2luc3BlY3RvcldpbmRvdyBmcmFtZV0pOwotICAgIGluc3BlY3RlZFBh
Z2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JXaW5kb3dGcmFtZShm
cmFtZVN0cmluZyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd0Z1bGxTY3Jl
ZW5EaWRDaGFuZ2UoKQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKLSAgICBBU1NFUlQo
bV9pc1Zpc2libGUpOwotICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAo
bV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQocGxhdGZvcm1DYW5B
dHRhY2goY2FuQXR0YWNoKCkpKTsgICAgCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0IGN1cnJlbnREaW1lbnNpb24pCi17Ci0g
ICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzQXR0
YWNoZWQpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGF0dGFjaCBhdmFpbGFiaWxpdHkgY2hh
bmdlZC4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgaW4gY2FzZQotICAgICAgICAvLyB0aGUgYXR0
YWNobWVudCB2aWV3IGlzIG5vdCB0aGUgV0tWaWV3LgotICAgICAgICBhdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JB
dHRhY2htZW50VmlldygpOwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOwotCi0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdG
cmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7Ci0gICAgTlNSZWN0IG9sZEluc3BlY3RvclZpZXdG
cmFtZSA9IGluc3BlY3RvclZpZXcuZnJhbWU7Ci0gICAgTlNSZWN0IG5ld0luc3BlY3RvclZpZXdG
cmFtZSA9IE5TWmVyb1JlY3Q7Ci0gICAgTlNSZWN0IHBhcmVudEJvdW5kcyA9IGluc3BlY3RlZFZp
ZXcuc3VwZXJ2aWV3LmJvdW5kczsKLSAgICBDR0Zsb2F0IGluc3BlY3RlZFZpZXdUb3AgPSBOU01h
eFkoaW5zcGVjdGVkVmlld0ZyYW1lKTsKLQotICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkg
ewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewotICAgICAgICBpZiAoIWN1cnJl
bnREaW1lbnNpb24pCi0gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNIZWlnaHQob2xk
SW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudEhlaWdodCA9IE5T
SGVpZ2h0KHBhcmVudEJvdW5kcyk7Ci0gICAgICAgIENHRmxvYXQgaW5zcGVjdG9ySGVpZ2h0ID0g
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hl
aWdodChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRIZWlnaHQpOwotCi0gICAgICAgIC8vIFByZXNl
cnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4g
U2FmYXJpIHN0aWxsIHdvcmsuCi0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJl
Y3QoMCwgaW5zcGVjdG9ySGVpZ2h0LCBOU1dpZHRoKHBhcmVudEJvdW5kcyksIGluc3BlY3RlZFZp
ZXdUb3AgLSBpbnNwZWN0b3JIZWlnaHQpOwotICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUg
PSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlld0ZyYW1lKSwgaW5zcGVjdG9y
SGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBdHRhY2htZW50U2lk
ZTo6UmlnaHQ6IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAg
Y3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAg
ICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOwotICAgICAg
ICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6
Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdp
ZHRoKTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNw
ZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNl
IHRoYXQKLSAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2lu
Y2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3
LgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIHBhcmVudFdp
ZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOwotICAgICAgICBuZXdJbnNw
ZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgs
IDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKLQotICAgICAgICBp
ZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7Ci0g
ICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBl
cnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21W
aWV3Om5pbF07Ci0gICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2Vj
dGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
TGVmdDogewotICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCi0gICAgICAgICAgICBjdXJy
ZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOwotCi0gICAgICAg
IENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7Ci0gICAgICAgIENH
RmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25z
dHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwgcGFyZW50V2lkdGgp
OwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3Rl
ZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBkb24ndCB1c2UgdGhh
dAotICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3IgdmlldyBzaW5jZSB0
aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVjdGVkIHZpZXcuCi0g
ICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoaW5zcGVjdG9yV2lkdGgsIDAs
IHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3RlZFZpZXdUb3ApOwotICAgICAg
ICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIGluc3BlY3RvcldpZHRo
LCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKLQotICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3Bl
Y3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2luZG93KSB7Ci0gICAgICAgICAgICBOU1JlY3Qg
Y29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6
aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3Om5pbF07Ci0gICAgICAg
ICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVj
dG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIH0KLQotICAgIGlmIChOU0VxdWFsUmVjdHMob2xkSW5zcGVjdG9yVmll
d0ZyYW1lLCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUpICYmIE5TRXF1YWxSZWN0cyhbaW5zcGVjdGVk
VmlldyBmcmFtZV0sIGluc3BlY3RlZFZpZXdGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgdG8gbWFrZSBzdXJlIHRoZSBsYXllcnMgZm9yIGJv
dGggdmlld3MgcmVzaXplIGluIHN5bmMuCi0gICAgW2luc3BlY3RvclZpZXcud2luZG93IGRpc2Fi
bGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07Ci0KLSAgICBbaW5zcGVjdG9yVmlldyBzZXRGcmFt
ZTpuZXdJbnNwZWN0b3JWaWV3RnJhbWVdOwotICAgIFtpbnNwZWN0ZWRWaWV3IHNldEZyYW1lOmlu
c3BlY3RlZFZpZXdGcmFtZV07Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3
ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIE5TUmVj
dCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUuaGVpZ2h0KTsKLX0K
LQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lk
dGgoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5z
cGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBb
aW5zcGVjdGVkVmlldyBmcmFtZV07Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihp
bnNwZWN0ZWRWaWV3UmVjdC5zaXplLndpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3Bl
Y3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmlu
c3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0
RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAg
ICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgW2luc3BlY3RvclZpZXcg
cmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBDR0Zsb2F0IGN1cnJlbnREaW1lbnNpb247Ci0g
ICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
Qm90dG9tOgotICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmll
d1dpZHRoU2l6YWJsZSB8IE5TVmlld01heFlNYXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5z
aW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAg
ICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0U2l6YWJs
ZSB8IE5TVmlld01pblhNYXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVj
dG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICBbaW5zcGVjdG9y
VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNYXhY
TWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGN1cnJlbnREaW1lbnNpb24pOwotCi0g
ICAgW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9yVmlldyBwb3Np
dGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzppbnNwZWN0ZWRWaWV3XTsKLSAgICBbaW5z
cGVjdG9yVmlldy53aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOmluc3BlY3RvclZpZXddOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17Ci0gICAgTlNWaWV3
ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50Vmll
dygpOwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250
cm9sbGVyIHdlYlZpZXddOwotCi0gICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmll
d107Ci0KLSAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRo
U2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQg
d2Ugc2l6ZSB0aGUgaW5zcGVjdGVkIHZpZXcncyBmcmFtZSBhZnRlciBkZXRhY2hpbmcgc28gdGhh
dCBpdCB0YWtlcyB1cCB0aGUgc3BhY2UgdGhhdCB0aGUKLSAgICAvLyBhdHRhY2hlZCBpbnNwZWN0
b3IgdXNlZCB0by4gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZp
ZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KLQotICAgIGluc3BlY3RlZFZpZXcu
ZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcu
Ym91bmRzKSwgTlNNYXhZKGluc3BlY3RlZFZpZXcuZnJhbWUpKTsKLQotICAgIC8vIFJldHVybiBl
YXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMg
Y2xvc2VkIHdoaWxlIGF0dGFjaGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFu
ZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG9wZW4oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAg
aWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZShoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgaWYgKCFt
X2lzQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURp
ZENoYW5nZSh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3NoZWV0UmVjdCA9IHJl
Y3Q7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFn
KCkKLXsKLSAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UtPnN0
YXJ0V2luZG93RHJhZygpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clBhZ2VVUkwoKQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0
aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRs
ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbYnVu
ZGxlIHBhdGhGb3JSZXNvdXJjZTpAIk1haW4iIG9mVHlwZTpAImh0bWwiXTsKLSAgICBBU1NFUlQo
cGF0aCAmJiBwYXRoLmxlbmd0aCk7Ci0gICAgaWYgKCFwYXRoKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0
b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRs
ZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAg
IGlmICghYnVuZGxlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBXZSBtaWdo
dCBub3QgaGF2ZSBhIFRlc3QuaHRtbCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KLSAgICBOU1N0cmlu
ZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiVGVzdCIgb2ZUeXBlOkAiaHRtbCJd
OwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJu
IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJp
bmc7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCi17
Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpA
ImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVuZGxlKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IGJ1bmRsZS5yZXNvdXJjZVBh
dGg7Ci0gICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOwotCi0gICAgcmV0dXJuIFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpZRVNdLmFic29sdXRlU3RyaW5nOwot
fQotCi1zdGF0aWMgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uUGxpc3QoKQotewotICAgIE5T
U3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtOU1NlYXJjaFBhdGhGb3JEaXJlY3Rvcmllc0lu
RG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TU3lzdGVtRG9tYWluTWFzaywgWUVTKSBvYmpl
Y3RBdEluZGV4OjBdOwotICAgIE5TU3RyaW5nICpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoID0gW3N5
c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkNvcmVTZXJ2
aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Il07Ci0gICAgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJz
aW9uSW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDb250ZW50c09mRmlsZTpzeXN0
ZW1WZXJzaW9uUGxpc3RQYXRoXTsKLSAgICByZXR1cm4gc3lzdGVtVmVyc2lvbkluZm87Ci19Ci0K
LURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdn
YWJsZSgpCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpwbGlzdCA9IHN5c3RlbVZlcnNpb25QbGlzdCgp
OwotCi0gICAgRGVidWdnYWJsZUluZm9EYXRhIHJlc3VsdDsKLSAgICByZXN1bHQuZGVidWdnYWJs
ZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotICAgIHJlc3VsdC50
YXJnZXRQbGF0Zm9ybU5hbWUgPSAibWFjT1MiX3M7Ci0gICAgcmVzdWx0LnRhcmdldEJ1aWxkVmVy
c2lvbiA9IHBsaXN0W0AiUHJvZHVjdEJ1aWxkVmVyc2lvbiJdOwotICAgIHJlc3VsdC50YXJnZXRQ
cm9kdWN0VmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lvbiJdOwotICAg
IHJlc3VsdC50YXJnZXRJc1NpbXVsYXRvciA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmVlNWNkZmYzOC4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQ
SURlYnVnZ2FibGVJbmZvLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIK
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmlu
YWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVt
b3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0
aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVn
Z2FibGVUeXBlKQotICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNy
ZWF0ZSgpKQotICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAg
ICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJ
RCh0YXJnZXRJRCkKLSAgICAgICAgLCBtX2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQot
ICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgIH0KLQotICAgIH5S
ZW1vdGVJbnNwZWN0b3JQcm94eSgpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQo
bnVsbHB0cik7Ci0gICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGxvYWQoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIwNTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRl
YnVnIHRhcmdldC4KLSAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJ
bmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1w
dHkoKSk7Ci0gICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVn
Z2FibGVUeXBlKTsKLSAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZv
KSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOwotICAgIH0KLQotICAg
IHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zaG93KCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAg
IHsKLSAgICAgICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAg
IH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VU
b0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQot
ICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9p
bnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0
SUQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+
IG1fcHJveHk7Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsK
LSAgICBDb25uZWN0aW9uSUQgbV9jb25uZWN0aW9uSUQ7Ci0gICAgVGFyZ2V0SUQgbV90YXJnZXRJ
RDsKLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIG1fZGVidWdnYWJsZVR5cGU7Ci19Owot
Ci1SZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCi0gICAgOiBtX29ic2VydmVyKG9ic2Vy
dmVyKQotewotICAgIGlmICghdXJsLmhvc3QoKSB8fCAhdXJsLnBvcnQoKSkgewotICAgICAgICBM
T0dfRVJST1IoIkludmFsaWQgaW5zcGVjdG9yIHVybDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb25JRCA9
IGNvbm5lY3RJbmV0KHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgp
KTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbklEKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW5zcGVj
dG9yIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXJ0SW5pdGlhbENvbW11
bmljYXRpb24oKTsKLX0KLQotUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9y
Q2xpZW50KCkKLXsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNw
ZWN0b3JFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOwotICAgIGF1dG8g
bWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKLSAgICBzZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2Fn
ZS5sZW5ndGgoKSk7Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpkaXNwYXRjaE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3Ry
aW5nLCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5k
bGVyPih7Ci0gICAgICAgIHsgIkJhY2tlbmRDb21tYW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhh
bmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcykgfSwKLSAg
ICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNz
YWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKLSAgICB9KTsKLQotICAgIHJldHVy
biBkaXNwYXRjaE1hcDsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5p
dGlhbENvbW11bmljYXRpb24oKQotewotICAgIGF1dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JD
bGllbnQiX3MpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgp
Ci17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVh
cigpOwotICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Ci0gICAgbV9vYnNl
cnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpkaWRDbG9zZShDb25uZWN0aW9uSUQpCi17Ci0gICAgY2FsbE9uTWFpblRocmVhZChb
dGhpc10gewotICAgICAgICBjb25uZWN0aW9uQ2xvc2VkKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQs
IFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVU
eXBlKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9u
SUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZV0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRl
YnVnZ2FibGVUeXBlKTsKLSAgICB9KTsKLQotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOwot
ICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklE
KTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwot
ICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0K
LSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Ci19Ci0KLXZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVj
dGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IGF1dG8gYmFja2VuZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBiYWNrZW5k
RXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7Ci0g
ICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25J
RCk7Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQp
OwotICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKLSAg
ICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0
aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKLXsKLSAgICBhdXRvIGNsb3Nl
ZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBjbG9zZWRFdmVudC0+c2V0U3Ry
aW5nKCJldmVudCJfcywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOwotICAgIGNsb3NlZEV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAgY2xvc2VkRXZl
bnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7Ci0gICAgc2VuZFdlYkluc3Bl
Y3RvckV2ZW50KGNsb3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBtX2luc3BlY3Rv
clByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29u
c3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNz
YWdlLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2VuZENvbW1hbmRz
VVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZShldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZl
bnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVl
OjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBp
ZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OwotICAgIGZvciAoYXV0byYgaXRlbVZh
bHVlIDogKm1lc3NhZ2VBcnJheSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVt
T2JqZWN0OwotICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBUYXJnZXQgdGFyZ2V0OwotICAgICAgICBp
ZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCi0gICAg
ICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkK
LSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVy
bCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdl
dC50eXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHRhcmdldExpc3QuYXBw
ZW5kKFdURk1vdmUodGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgYXV0byBjb25uZWN0aW9uSUQgPSBl
dmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKLQotICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMg
dG8gcmVtb3ZlIHRoZW0uCi0gICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7
Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKLSAg
ICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIHRh
cmdldCA6IHRhcmdldExpc3QpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5z
ZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvdW5kKQot
ICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7Ci0gICAgfQot
ICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCi0gICAgICAgIG1faW5z
cGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQpKTsKLQotICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExp
c3QpKTsKLSAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKLX0KLQotdm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVu
dCYgZXZlbnQpCi17Ci0gICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdl
dElEIHx8ICFldmVudC5tZXNzYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3h5
ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlv
bklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKLSAgICBpZiAoIXByb3h5KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUx
ZDYzZGVhMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0
L1JlbW90ZUluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNs
aWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVidWdnYWJsZVR5cGUuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBSZW1vdGVJ
bnNwZWN0b3JQcm94eTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIgewotcHVibGlj
OgotICAgIHZpcnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9
IDA7Ci19OwotCi11c2luZyBDb25uZWN0aW9uSUQgPSBJbnNwZWN0b3I6OkNvbm5lY3Rpb25JRDsK
LXVzaW5nIFRhcmdldElEID0gSW5zcGVjdG9yOjpUYXJnZXRJRDsKLQotY2xhc3MgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29u
bmVjdGlvbkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKLXB1YmxpYzoK
LSAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQoVVJMLCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYp
OwotICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgdXBkYXRlIHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgdG8gdXNlIERlYnVnZ2FibGVUeXBlIGlu
c3RlYWQgb2YgU3RyaW5nIGZvciB0aGUgdGFyZ2V0IHR5cGUuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjA0NwotICAgIHN0cnVjdCBUYXJnZXQgewot
ICAgICAgICBUYXJnZXRJRCBpZDsKLSAgICAgICAgU3RyaW5nIHR5cGU7Ci0gICAgICAgIFN0cmlu
ZyBuYW1lOwotICAgICAgICBTdHJpbmcgdXJsOwotICAgIH07Ci0KLSAgICBjb25zdCBIYXNoTWFw
PENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXRzOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQotCi0gICAgdm9pZCBpbnNwZWN0KENv
bm5lY3Rpb25JRCwgVGFyZ2V0SUQsIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUpOwotICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQsIFRhcmdldElE
KTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5z
cGVjdG9yQ2xpZW50PjsKLQotICAgIHZvaWQgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOwot
ICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZCgpOwotCi0gICAgdm9pZCBzZXRUYXJnZXRMaXN0KGNv
bnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQm
KTsKLSAgICB2b2lkIHNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBFdmVudCYpOwotCi0gICAgdm9p
ZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpIGZpbmFsOwotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxs
SGFuZGxlcj4mIGRpc3BhdGNoTWFwKCkgZmluYWw7Ci0KLSAgICB2b2lkIHNlbmRXZWJJbnNwZWN0
b3JFdmVudChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VS
TDsKLSAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgbV9vYnNlcnZlcjsKLSAgICBPcHRpb25h
bDxDb25uZWN0aW9uSUQ+IG1fY29ubmVjdGlvbklEOwotICAgIEhhc2hNYXA8Q29ubmVjdGlvbklE
LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOwotICAgIEhhc2hNYXA8c3RkOjpwYWlyPENvbm5l
Y3Rpb25JRCwgVGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yUHJveHk+
PiBtX2luc3BlY3RvclByb3h5TWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQ1NWQzZTYyLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
Ci0jaW5jbHVkZSAiQVBJTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5o
IgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50V29ybGQuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHRNZXNz
YWdlSGFuZGxlci5oIgotI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Lmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFNjcmlwdE1lc3NhZ2VDbGllbnQg
ZmluYWwgOiBwdWJsaWMgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OkNsaWVudCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgU2NyaXB0TWVzc2FnZUNsaWVudChS
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIGluc3BlY3RvclByb3RvY29sSGFuZGxlcikK
LSAgICAgICAgOiBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIpIHsgfQotCi0gICAgflNjcmlwdE1lc3NhZ2VDbGllbnQoKSB7IH0KLQotICAgIHZvaWQg
ZGlkUG9zdE1lc3NhZ2UoV2ViUGFnZVByb3h5JiBwYWdlLCBGcmFtZUluZm9EYXRhJiYsIFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2VyaWFsaXplZFNjcmlwdFZhbHVlKSBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgYXV0byB0b2tlbnMgPSBzZXJpYWxpemVkU2NyaXB0VmFsdWUudG9T
dHJpbmcoKS5zcGxpdCgiOiIpOwotICAgICAgICBpZiAodG9rZW5zLnNpemUoKSAhPSAzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFVSTCByZXF1ZXN0VVJMIHsgeyB9LCBwYWdlLnBh
Z2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAgICBtX2luc3BlY3RvclByb3RvY29sSGFuZGxl
ci5pbnNwZWN0KHJlcXVlc3RVUkwuaG9zdEFuZFBvcnQoKSwgdG9rZW5zWzBdLnRvVUludFN0cmlj
dCgpLCB0b2tlbnNbMV0udG9VSW50U3RyaWN0KCksIHRva2Vuc1syXSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciYgbV9pbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXI7Ci19OwotCi1jbGFzcyBMb2FkZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJ
OjpMb2FkZXJDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIExvYWRlckNsaWVudChGdW5jdGlvbjx2b2lkKCk+JiYgbG9hZGVkQ2FsbGJhY2spCi0gICAg
ICAgIDogbV9sb2FkZWRDYWxsYmFjayB7IFdURk1vdmUobG9hZGVkQ2FsbGJhY2spIH0geyB9Ci0K
LSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdl
YktpdDo6V2ViRnJhbWVQcm94eSYsIEFQSTo6TmF2aWdhdGlvbiosIEFQSTo6T2JqZWN0KikgZmlu
YWwKLSAgICB7Ci0gICAgICAgIG1fbG9hZGVkQ2FsbGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2xvYWRlZENhbGxiYWNrOwotfTsKLQotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU+IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgZGVidWdnYWJsZVR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKGRl
YnVnZ2FibGVUeXBlU3RyaW5nID09ICJqYXZhc2NyaXB0Il9zKQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6SmF2YVNjcmlwdDsKLSAgICBpZiAoZGVidWdnYWJsZVR5
cGVTdHJpbmcgPT0gInBhZ2UiX3MpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2Fi
bGVUeXBlOjpQYWdlOwotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAic2VydmljZS13
b3JrZXIiX3MpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpTZXJ2
aWNlV29ya2VyOwotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAid2ViLXBhZ2UiX3Mp
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotCi0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXI6Omluc3BlY3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklE
IGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgdHlwZSkKLXsK
LSAgICBhdXRvIGRlYnVnZ2FibGVUeXBlID0gcGFyc2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmco
dHlwZSk7Ci0gICAgaWYgKCFkZWJ1Z2dhYmxlVHlwZSkgewotICAgICAgICBMT0dfRVJST1IoIlVu
a25vd24gZGVidWdnYWJsZSB0eXBlOiBcIiVzXCIiLCB0eXBlLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yQ2xpZW50KQotICAgICAg
ICBtX2luc3BlY3RvckNsaWVudC0+aW5zcGVjdChjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1
Z2dhYmxlVHlwZS52YWx1ZSgpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXI6OnJ1blNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBtX3BhZ2UucnVu
SmF2YVNjcmlwdEluTWFpbkZyYW1lKHsgc2NyaXB0LCBmYWxzZSwgV1RGOjpudWxsb3B0LCBmYWxz
ZSB9LCAKLSAgICAgICAgW10oQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBPcHRpb25hbDxX
ZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzPiBleGNlcHRpb25EZXRhaWxzLCBDYWxsYmFja0Jhc2U6
OkVycm9yKSB7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBydW5uaW5nIHNjcmlwdCBcIiVzXCIiLCBleGNlcHRp
b25EZXRhaWxzLT5tZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0pOwotfQotCi12b2lkIFJl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6dGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5z
cGVjdG9yQ2xpZW50JiBjbGllbnQpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBodG1sOwotICAgIGlm
IChjbGllbnQudGFyZ2V0cygpLmlzRW1wdHkoKSkKLSAgICAgICAgaHRtbC5hcHBlbmQoIjxwPk5v
IHRhcmdldHMgZm91bmQ8L3A+Il9zKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaHRtbC5hcHBlbmQo
Ijx0YWJsZT4iKTsKLSAgICAgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uSUQgOiBjbGllbnQudGFy
Z2V0cygpLmtleXMoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjbGllbnQu
dGFyZ2V0cygpLmdldChjb25uZWN0aW9uSUQpKSB7Ci0gICAgICAgICAgICAgICAgaHRtbC5hcHBl
bmQobWFrZVN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgIjx0Ym9keT48dHI+IgotICAgICAg
ICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwiZGF0YVwiPjxkaXYgY2xhc3M9XCJ0YXJnZXRuYW1l
XCI+IiwgdGFyZ2V0Lm5hbWUsICI8L2Rpdj48ZGl2IGNsYXNzPVwidGFyZ2V0dXJsXCI+IiwgdGFy
Z2V0LnVybCwgIjwvZGl2PjwvdGQ+IgotICAgICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwi
aW5wdXRcIj48aW5wdXQgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiSW5zcGVjdFwiIG9uY2xpY2s9
XCJ3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5pbnNwZWN0b3IucG9zdE1lc3NhZ2UoXFwn
IiwgY29ubmVjdGlvbklELCAiOiIsIHRhcmdldC5pZCwgIjoiLCB0YXJnZXQudHlwZSwgIlxcJyk7
XCI+PC90ZD4iCi0gICAgICAgICAgICAgICAgICAgICI8L3RyPjwvdGJvZHk+IgotICAgICAgICAg
ICAgICAgICkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGh0bWwuYXBwZW5k
KCI8L3RhYmxlPiIpOwotICAgIH0KLSAgICBtX3RhcmdldExpc3RzSHRtbCA9IGh0bWwudG9TdHJp
bmcoKTsKLSAgICBpZiAobV9wYWdlTG9hZGVkKQotICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7
Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjp1cGRhdGVUYXJnZXRM
aXN0KCkKLXsKLSAgICBpZiAoIW1fdGFyZ2V0TGlzdHNIdG1sLmlzRW1wdHkoKSkgewotICAgICAg
ICBydW5TY3JpcHQobWFrZVN0cmluZygidXBkYXRlVGFyZ2V0cyhgIiwgbV90YXJnZXRMaXN0c0h0
bWwsICJgKTsiKSk7Ci0gICAgICAgIG1fdGFyZ2V0TGlzdHNIdG1sID0geyB9OwotICAgIH0KLX0K
LQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnBsYXRmb3JtU3RhcnRUYXNr
KFdlYlBhZ2VQcm94eSYgcGFnZVByb3h5LCBXZWJVUkxTY2hlbWVUYXNrJiB0YXNrKQotewotICAg
IGF1dG8mIHJlcXVlc3RVUkwgPSB0YXNrLnJlcXVlc3QoKS51cmwoKTsKLQotICAgIC8vIERlc3Ry
b3kgdGhlIGNsaWVudCBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgY29ubmVjdGlvbiBzbyBpdCBjYW4g
Y29ubmVjdCB0byB0aGUgc2FtZSBwb3J0Ci0gICAgbV9pbnNwZWN0b3JDbGllbnQgPSBudWxscHRy
OwotICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JDbGll
bnQ+KHJlcXVlc3RVUkwsICp0aGlzKTsKLQotICAgIC8vIFNldHVwIHRhcmdldCBwb3N0TWVzc2Fn
ZSBsaXN0ZW5lcgotICAgIGF1dG8gaGFuZGxlciA9IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpj
cmVhdGUobWFrZVVuaXF1ZTxTY3JpcHRNZXNzYWdlQ2xpZW50PigqdGhpcyksICJpbnNwZWN0b3Ii
LCBBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpOwotICAgIHBhZ2VQcm94eS5w
YWdlR3JvdXAoKS51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU2NyaXB0TWVzc2FnZUhh
bmRsZXIoaGFuZGxlci5nZXQoKSk7Ci0KLSAgICAvLyBTZXR1cCBsb2FkZXIgY2xpZW50IHRvIGdl
dCBub3RpZmllZCBvZiBwYWdlIGxvYWQKLSAgICBtX3BhZ2Uuc2V0TG9hZGVyQ2xpZW50KG1ha2VV
bmlxdWU8TG9hZGVyQ2xpZW50PihbdGhpc10gewotICAgICAgICBtX3BhZ2VMb2FkZWQgPSB0cnVl
OwotICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7Ci0gICAgfSkpOwotICAgIG1fcGFnZUxvYWRl
ZCA9IGZhbHNlOwotCi0gICAgU3RyaW5nQnVpbGRlciBodG1sQnVpbGRlcjsKLSAgICBodG1sQnVp
bGRlci5hcHBlbmQoCi0gICAgICAgICI8aHRtbD48aGVhZD48dGl0bGU+UmVtb3RlIEluc3BlY3Rv
cjwvdGl0bGU+IgotICAgICAgICAiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNv
bnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiAvPiIKLSAgICAgICAgIjxzdHlsZT4i
Ci0gICAgICAgICIgIGgxIHsgY29sb3I6ICNiYWJkYjY7IHRleHQtc2hhZG93OiAwIDFweCAwIHdo
aXRlOyBtYXJnaW4tYm90dG9tOiAwOyB9IgotICAgICAgICAiICBodG1sIHsgZm9udC1mYW1pbHk6
IC13ZWJraXQtc3lzdGVtLWZvbnQ7IGZvbnQtc2l6ZTogMTFwdDsgY29sb3I6ICMyZTM0MzY7IHBh
ZGRpbmc6IDIwcHggMjBweCAwIDIwcHg7IGJhY2tncm91bmQtY29sb3I6ICNmNmY2ZjQ7ICIKLSAg
ICAgICAgIiAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFy
LCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgI2VlZWVlYyksIGNvbG9yLXN0
b3AoMSwgI2Y2ZjZmNCkpOyIKLSAgICAgICAgIiAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAw
JSA1ZW07IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IH0iCi0gICAgICAgICIgIHRhYmxl
IHsgd2lkdGg6IDEwMCU7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHRhYmxlLWxheW91dDog
Zml4ZWQ7IH0iCi0gICAgICAgICIgIHRhYmxlLCB0ZCB7IGJvcmRlcjogMXB4IHNvbGlkICNkM2Q3
Y2Y7IGJvcmRlci1sZWZ0OiBub25lOyBib3JkZXItcmlnaHQ6IG5vbmU7IH0iCi0gICAgICAgICIg
IHAgeyBtYXJnaW4tYm90dG9tOiAzMHB4OyB9IgotICAgICAgICAiICB0ZCB7IHBhZGRpbmc6IDE1
cHg7IH0iCi0gICAgICAgICIgIHRkLmRhdGEgeyB3aWR0aDogMjAwcHg7IH0iCi0gICAgICAgICIg
IC50YXJnZXRuYW1lIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRl
LXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH0iCi0gICAgICAgICIgIC50
YXJnZXR1cmwgeyBjb2xvcjogI2JhYmRiNjsgYmFja2dyb3VuZDogI2VlZTsgd29yZC13cmFwOiBi
cmVhay13b3JkOyBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOyB9IgotICAgICAgICAiICB0ZC5p
bnB1dCB7IHdpZHRoOiA2NHB4OyB9IgotICAgICAgICAiICBpbnB1dCB7IHdpZHRoOiAxMDAlOyBw
YWRkaW5nOiA4cHg7IH0iCi0gICAgICAgICI8L3N0eWxlPiIKLSAgICAgICAgIjwvaGVhZD48Ym9k
eT48aDE+SW5zcGVjdGFibGUgdGFyZ2V0czwvaDE+IgotICAgICAgICAiPGRpdiBpZD1cInRhcmdl
dGxpc3RcIj48cD5ObyB0YXJnZXRzIGZvdW5kPC9wPjwvZGl2PjwvYm9keT4iCi0gICAgICAgICI8
c2NyaXB0PiIKLSAgICAgICAgImZ1bmN0aW9uIHVwZGF0ZVRhcmdldHMoc3RyKSB7IgotICAgICAg
ICAgICAgImxldCB0YXJnZXREaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0bGlz
dCcpOyIKLSAgICAgICAgICAgICJ0YXJnZXREaXYuaW5uZXJIVE1MID0gc3RyOyIKLSAgICAgICAg
In0iCi0gICAgICAgICI8L3NjcmlwdD4iKTsKLSAgICBodG1sQnVpbGRlci5hcHBlbmQoIjwvaHRt
bD4iKTsKLQotICAgIGF1dG8gaHRtbCA9IGh0bWxCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwot
ICAgIGF1dG8gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGh0bWwuZGF0YSgpLCBodG1sLmxl
bmd0aCgpKTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0
L2h0bWwiX3MsIGh0bWwubGVuZ3RoKCksICJVVEYtOCJfcyk7Ci0gICAgdGFzay5kaWRSZWNlaXZl
UmVzcG9uc2UocmVzcG9uc2UpOwotICAgIHRhc2suZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRh
KSk7Ci0gICAgdGFzay5kaWRDb21wbGV0ZShSZXNvdXJjZUVycm9yKCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
ZjYwMGVmZGVkNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29j
a2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCi0j
aW5jbHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxlci5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNz
IFVSTDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlVSTFNjaGVtZVRhc2s7
Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciBmaW5hbCA6IHB1YmxpYyBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlciwgcHVibGljIFdlYlVSTFNjaGVtZUhhbmRsZXIgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyPiBjcmVh
dGUoV2ViUGFnZVByb3h5JiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlcihwYWdlKSk7IH0KLQotICAgIHZvaWQgaW5zcGVjdChjb25zdCBT
dHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcm
IHR5cGUpOwotCi1wcml2YXRlOgotICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihX
ZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgICAgIDogbV9wYWdlKHBhZ2UpIHsgfQotCi0gICAgLy8g
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKLSAgICB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90
ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOwotICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1v
dGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0KLQotICAgIC8vIFdlYlVSTFNjaGVtZUhhbmRs
ZXIKLSAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVt
ZVRhc2smKSBmaW5hbDsKLSAgICB2b2lkIHBsYXRmb3JtU3RvcFRhc2soV2ViUGFnZVByb3h5Jiwg
V2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQotICAgIHZvaWQgcGxhdGZvcm1UYXNrQ29tcGxl
dGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgdXBkYXRlVGFyZ2V0
TGlzdCgpOwotCi0gICAgdm9pZCBydW5TY3JpcHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PiBtX2luc3BlY3RvckNsaWVudDsKLSAg
ICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAgICBib29sIG1fcGFnZUxvYWRlZCB7IGZhbHNlIH07
Ci0gICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNIdG1sOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4u
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTBjMmI5NGYyZi4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElQYWdl
Q29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
V2ViVmlldy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotc3RhdGljIExQQ1RTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJv
cCA9IFRFWFQoIlJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlciIpOwotY29uc3QgTFBDV1NU
UiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlDbGFzcyI7Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKLXsKLSAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7Ci0KLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNh
c2UgV01fU0laRToKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+c2l6ZUNoYW5nZSgpOwotICAgIGNh
c2UgV01fQ0xPU0U6Ci0gICAgICAgIHJldHVybiBjbGllbnQtPm9uQ2xvc2UoKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9j
KGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1zdGF0aWMgQVRPTSByZWdpc3Rlcldp
bmRvd0NsYXNzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
ID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6
ZW9mKFdORENMQVNTRVgpOwotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSAwOwotICAgIHdjZXgu
bHBmblduZFByb2MgICAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYzsKLSAgICB3
Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAg
ICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gMDsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsK
LSAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAg
IHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOwot
ICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFt
ZTsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKLQotICAgIGhhdmVSZWdpc3RlcmVkV2lu
ZG93Q2xhc3MgPSB0cnVlOwotICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19
Ci0KLUxSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNpemVDaGFuZ2UoKQotewotICAg
IGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJFQ1QgcmVjdDsKLSAg
ICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnJlY3QpOwotICAgIDo6U2V0V2lu
ZG93UG9zKG1fd2ViVmlldy0+d2luZG93KCksIDAsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUxSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9u
Q2xvc2UoKQotewotICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19ISURFKTsK
LSAgICBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYlBhZ2VQcm94
eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkKLXsKLSAgICBSZWZQdHI8V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzID0gV2Vi
UHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0g
ICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKLQot
I2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdl
c1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxXZWJQ
YWdlR3JvdXA+IHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VH
cm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3Vy
YXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rvckxl
dmVsRm9yUGFnZShudWxscHRyKSkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJl
bmNlcyhwcmVmZXJlbmNlcy5nZXQoKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VH
cm91cChwYWdlR3JvdXAuZ2V0KCkpOwotCi0gICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDYwLCAy
MDAsIDE1MDAsIDEwMDApOwotICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICBtX2Zyb250
ZW5kSGFuZGxlID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNs
YXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIDAsIDAsIDAsIDApOwotCi0gICAgOjpT
ZXRQcm9wKG1fZnJvbnRlbmRIYW5kbGUsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclBy
b3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgU2hvd1dpbmRvdyhtX2Zy
b250ZW5kSGFuZGxlLCBTV19TSE9XKTsKLQotICAgIFJFQ1QgcjsKLSAgICA6OkdldENsaWVudFJl
Y3QobV9mcm9udGVuZEhhbmRsZSwgJnIpOwotICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0
ZShyLCBwYWdlQ29uZmlndXJhdGlvbiwgbV9mcm9udGVuZEhhbmRsZSk7Ci0gICAgcmV0dXJuIG1f
d2ViVmlldy0+cGFnZSgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVJlc2V0U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Ci12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmlu
ZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlm
aWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgeyB9Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQot
ewotICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSGFuZGxlKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGVhYzk3MzE3OS4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUg
IkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5j
bHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5o
IgotI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBy
ZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNpbmNsdWRlICJXZWJW
aWV3LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2luLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlci5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1Bh
Z2UuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5z
cGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IEwiV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIjsKLXN0
YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJXZWJJbnNw
ZWN0b3JQcm94eUNsYXNzIjsKLQotc3RydWN0IEluc3BlY3RlZFdpbmRvd0luZm8gewotICAgIGlu
dCBsZWZ0OwotICAgIGludCB0b3A7Ci0gICAgaW50IHZpZXdXaWR0aDsKLSAgICBpbnQgdmlld0hl
aWdodDsKLSAgICBpbnQgcGFyZW50V2lkdGg7Ci0gICAgaW50IHBhcmVudEhlaWdodDsKLX07Ci0K
LXN0YXRpYyBJbnNwZWN0ZWRXaW5kb3dJbmZvIGdldEluc3BlY3RlZFdpbmRvd0luZm8oSFdORCBp
bnNwZWN0ZWRXaW5kb3csIEhXTkQgcGFyZW50V2luZG93KQotewotICAgIFJFQ1QgcmVjdDsKLSAg
ICA6OkdldENsaWVudFJlY3QoaW5zcGVjdGVkV2luZG93LCAmcmVjdCk7Ci0gICAgOjpNYXBXaW5k
b3dQb2ludHMoaW5zcGVjdGVkV2luZG93LCBwYXJlbnRXaW5kb3csIChMUFBPSU5UKSZyZWN0LCAy
KTsKLQotICAgIFJFQ1QgcGFyZW50UmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QocGFyZW50V2lu
ZG93LCAmcGFyZW50UmVjdCk7Ci0gICAgcmV0dXJuIHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVj
dC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgcGFyZW50UmVjdC5y
aWdodCAtIHBhcmVudFJlY3QubGVmdCwgcGFyZW50UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LnRv
cCB9OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2Uo
SFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQotewotICAgIHN3aXRj
aCAobXNnKSB7Ci0gICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzogewotICAgICAgICBpZiAo
IW1faXNBdHRhY2hlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIHdpbmRv
d1BvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0lORE9XUE9TKj4obFBhcmFtKTsKLQotICAgICAgICBp
ZiAod2luZG93UG9zLT5mbGFncyAmIFNXUF9OT1NJWkUpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgSFdORCBwYXJlbnQgPSBHZXRQYXJlbnQoaHduZCk7Ci0gICAgICAgIFJFQ1QgcGFy
ZW50UmVjdDsKLSAgICAgICAgR2V0Q2xpZW50UmVjdChwYXJlbnQsICZwYXJlbnRSZWN0KTsKLQot
ICAgICAgICBSRUNUIGluc3BlY3RvclJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3QobV9pbnNw
ZWN0b3JWaWV3V2luZG93LCAmaW5zcGVjdG9yUmVjdCk7Ci0KLSAgICAgICAgc3dpdGNoIChtX2F0
dGFjaG1lbnRTaWRlKSB7Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbTogewot
ICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChpbnNw
ZWN0b3JSZWN0LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wLCB3aW5kb3dQb3MtPmN5KTsKLSAg
ICAgICAgICAgIHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwotICAgICAgICAgICAg
OjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPngsIHdp
bmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdo
dCwgU1dQX05PWk9SREVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OlJpZ2h0OiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dX
aWR0aChpbnNwZWN0b3JSZWN0LnJpZ2h0IC0gaW5zcGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQb3Mt
PmN4KTsKLSAgICAgICAgICAgIHdpbmRvd1Bvcy0+Y3ggLT0gaW5zcGVjdG9yV2lkdGg7Ci0gICAg
ICAgICAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bv
cy0+eCArIHdpbmRvd1Bvcy0+Y3gsIHdpbmRvd1Bvcy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdpbmRv
d1Bvcy0+Y3ksIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
TFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JQcm94eTo6d25kUHJvYyhIV05EIGh3bmQsIFVJ
TlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFdlYkluc3BlY3Rv
clByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oOjpH
ZXRQcm9wKGh3bmQsIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKLSAgICBzd2l0Y2gg
KG1zZykgewotICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgOjpTZXRXaW5kb3dQb3MoY2xpZW50
LT5tX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIExPV09SRChsUGFyYW0pLCBISVdPUkQo
bFBhcmFtKSwgU1dQX05PWk9SREVSKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBXTV9D
TE9TRToKLSAgICAgICAgY2xpZW50LT5jbG9zZSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJv
Yyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94
eTo6cmVnaXN0ZXJXaW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVy
ZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwotCi0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xh
c3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3Mg
PSB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9m
KFdORENMQVNTRVgpOwotICAgIHdjZXguc3R5bGUgPSAwOwotICAgIHdjZXgubHBmblduZFByb2Mg
PSB3bmRQcm9jOwotICAgIHdjZXguY2JDbHNFeHRyYSA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJh
ID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0g
ICAgd2NleC5oSWNvbiA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yID0gTG9hZEN1cnNvcigwLCBJRENf
QVJST1cpOwotICAgIHdjZXguaGJyQmFja2dyb3VuZCA9IDA7Ci0gICAgd2NleC5scHN6TWVudU5h
bWUgPSAwOwotICAgIHdjZXgubHBzekNsYXNzTmFtZSA9IFdlYkluc3BlY3RvclByb3h5Q2xhc3NO
YW1lOwotICAgIHdjZXguaEljb25TbSA9IDA7Ci0gICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4
KCZ3Y2V4KTsKLX0KLQotc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rp
b25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0
byBuYXZpZ2F0ZSBhbnl3aGVyZS4KLSAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0
b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJj
ZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICB0b0ltcGwo
bGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNv
bnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKHdlYkluc3Bl
Y3RvclByb3h5KTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9J
bXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2Fk
aW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJJbnNwZWN0b3JQcm94
eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICB0
b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVj
dG9yJ3MgcGFnZS4KLSAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKLQotICAgIC8v
IEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3Bl
Y3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkp
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQ
cm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4o
Y2xpZW50SW5mbykpOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5z
cGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChp
bnNwZWN0ZWRQYWdlKCkpOwotCi0gICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2Vz
OjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShE
RVZFTE9QRVJfTU9ERSkKLSAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdl
YiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0g
ICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJl
ZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUp
OwotI2VuZGlmCi0gICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJM
cyh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7IH0p
OwotICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFn
ZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKSk7Ci0gICAgYXV0byBwYWdl
Q29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5z
cGVjdGlvbkxldmVsKCkpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMo
cHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAo
cGFnZUdyb3VwLnB0cigpKTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0
aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAgICAgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBs
dWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRp
b24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5h
dmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgotICAgICAg
ICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRp
ZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExv
YWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAot
ICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCi0gICAgICAgIG51
bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAgICAgIG51bGxwdHIsIC8v
IGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAgICAgIHdlYlByb2Nlc3NE
aWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQotCi0g
ICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVs
bHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRp
ZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmln
YXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgUkVDVCByID0geyAwLCAwLCBzdGF0
aWNfY2FzdDxMT05HPihpbml0aWFsV2luZG93V2lkdGgpLCBzdGF0aWNfY2FzdDxMT05HPihpbml0
aWFsV2luZG93SGVpZ2h0KSB9OwotICAgIGF1dG8gcGFnZSA9IGluc3BlY3RlZFBhZ2UoKTsKLSAg
ICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBwYWdlLT52aWV3V2lkZ2V0KCk7Ci0gICAgbV9pbnNw
ZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gOjpHZXRQYXJlbnQobV9pbnNwZWN0ZWRWaWV3V2luZG93
KTsKLSAgICBhdXRvIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24s
IG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gJnZp
ZXcubGVha1JlZigpOwotICAgIGF1dG8gaW5zcGVjdG9yUGFnZSA9IG1faW5zcGVjdG9yVmlldy0+
cGFnZSgpOwotICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IGluc3BlY3RvclBhZ2UtPnZpZXdX
aWRnZXQoKTsKLSAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0
b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9y
UGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpCi17Ci0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVy
OjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotICAgIG1faW5z
cGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLSAg
ICBpZiAobV9pbnNwZWN0b3JWaWV3V2luZG93KSB7Ci0gICAgICAgIDo6RGVzdHJveVdpbmRvdyht
X2luc3BlY3RvclZpZXdXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBu
dWxscHRyOwotICAgIH0KLSAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKLSAgICAg
ICAgOjpSZW1vdmVQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQcm94
eVBvaW50ZXJQcm9wKTsKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVjdG9yRGV0YWNo
V2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSBudWxscHRyOwotICAg
IH0KLSAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBudWxscHRyOwotICAgIG1faW5zcGVjdGVk
Vmlld1BhcmVudFdpbmRvdyA9IG51bGxwdHI7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0jaWYgVVNFKENGKQotICAgIFJldGFpblB0cjxDRlVS
TFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29y
ZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJNYWluIiksIENGU1RSKCJodG1sIiksIENGU1RSKCJX
ZWJJbnNwZWN0b3JVSSIpKSk7Ci0gICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYu
Z2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2VuZGlmCi19Ci0KLVN0cmluZyBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotI2lmIFVTRShDRikKLSAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJl
c291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiVGVzdCIpLCBDRlNUUigi
aHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0
cmluZyhodG1sVVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgot
fQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotI2lm
IFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGJhc2VVUkxSZWYgPSBhZG9wdENGKENG
QnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiV2Vi
SW5zcGVjdG9yVUkiKSwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBDRlVSTEdldFN0
cmluZyhiYXNlVVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgot
fQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERl
YnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+
OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhLgotICAgIHJldHVybiBEZWJ1Z2dh
YmxlSW5mb0RhdGE6OmVtcHR5KCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCi17Ci0gICAgUkVDVCByZWN0OwotICAgIDo6
R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKLSAgICByZXR1cm4g
cmVjdC5ib3R0b20gLSByZWN0LnRvcDsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6
OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7Ci0gICAgcmV0dXJu
IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXR0YWNoKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFj
aGVkU2l6ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVk
V2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhl
aWdodCA9IDI1MDsKLQotICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdyAmJiA6OkdldFBh
cmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cpID09IG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7
Ci0gICAgICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRW
aWV3UGFyZW50V2luZG93KTsKLSAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNo
V2luZG93LCBTV19ISURFKTsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJv
YWRjYXN0ZXI6OmFkZExpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAg
ICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRhY2htZW50U2lkZTo6Qm90dG9tKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IHBsYXRmb3JtSW5zcGVjdGVkV2lu
ZG93SGVpZ2h0KCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hl
aWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRh
Y2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdodCkpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93
V2lkdGgoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgo
c3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNp
emUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOwotICAgIH0KLSAgICA6OlNob3dXaW5kb3cobV9p
bnNwZWN0b3JWaWV3V2luZG93LCBTV19TSE9XKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5u
aW5nUHJvY2VzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yRGV0
YWNoV2luZG93KSB7Ci0gICAgICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKLSAgICAgICAgbV9p
bnNwZWN0b3JEZXRhY2hXaW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFdlYkluc3BlY3RvclBy
b3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAotICAgICAgICAgICAgQ1dfVVNF
REVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93
SGVpZ2h0LAotICAgICAgICAgICAgMCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7
Ci0gICAgICAgIDo6U2V0UHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9y
UHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKLSAgICB9
Ci0KLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVy
KG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpH
ZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCAmcmVjdCk7Ci0gICAgYXV0byB3
aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3cs
IG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0
b3JWaWV3V2luZG93LCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQ
b3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93
UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZv
LnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5m
by5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLQotICAgIGlm
IChtX2lzVmlzaWJsZSkKLSAgICAgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2lu
ZG93LCBTV19TSE9XKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgYXV0byB3aW5kb3dJ
bmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5z
cGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JW
aWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0g
aGVpZ2h0LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCBoZWlnaHQs
IFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93
LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdp
ZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0lu
Zm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0gICAgYXV0byB3
aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3cs
IG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2lkdGgsIHdpbmRv
d0luZm8udG9wLCB3aWR0aCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRv
cCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5k
b3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50
V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93
SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zy
b250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIC8qIHVybCAqLykKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFi
aWxpdHlDaGFuZ2VkKGJvb2wgLyogYXZhaWxhYmxlICovKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRX
aW5kb3coKQotewotICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ODRiMDkwZmRjNzIuLjk1ODJjY2VlMzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ0MjEsOCArNDQyMSw4IEBACiAJCUE1MTNGNTNG
MjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3Rv
cldLV2ViVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3RvcldLV2ViVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4QjVEMTFGRTFENTVCMDBGOUZBMjggLyogV0tJ
bnNwZWN0b3JXS1dlYlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3RvcldL
V2ViVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0MjkzQTIxOTVBNDND
NjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmg7IHBh
dGggPSBpb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5z
cGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3Mv
V0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUE1NDI5M0EyMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5v
ZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3Rvck5v
ZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3Rvck5vZGVTZWFy
Y2hHZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0
M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwNjIxNUFEMTJFMDAy
NzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjY1NCwxMCArNjY1NCw2
IEBACiAJCQkJRjREQjU0RTUyMzE5RTczMzAwOUUzMTU1IC8qIFdLSGlnaGxpZ2h0TG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCiAJCQkJOTMzREY4MkQxQjNCQzA5MDAwQUVBOUUzIC8q
IFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzNERjgyRjFCM0JDMEI0
MDBBRUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbSAqLywKLQkJCQkwRjND
NzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8sCi0J
CQkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5t
bSAqLywKLQkJCQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKLQkJCQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcg
LyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCiAJCQkJMkRE
NUUxMjcyMTBBREM3QTAwREI2MDEyIC8qIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICov
LAogCQkJCTJERDVFMTI2MjEwQURDN0EwMERCNjAxMiAvKiBXS0tleWJvYXJkU2Nyb2xsaW5nQW5p
bWF0b3IubW0gKi8sCiAJCQkJMkRCOTQyOTcyMzRFN0E3RjAwRTc3NkFEIC8qIFdLTW91c2VHZXN0
dXJlUmVjb2duaXplci5oICovLApAQCAtNzk4Myw2ICs3OTc5LDk5IEBACiAJCQlwYXRoID0gY29j
b2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk5MUQ5NzBENDIzREE2RDI1
MDA1N0RCQzMgLyogSW5zcGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk5MUQ5NzBENTIzREE2RDUwMDA1N0RCQzMgLyogQWdlbnRzICovLAorCQkJ
CTkxRDk3MEQ3MjNEQTZENUIwMDU3REJDMyAvKiBpb3MgKi8sCisJCQkJOTFEOTcwRDYyM0RBNkQ1
NTAwNTdEQkMzIC8qIG1hYyAqLywKKwkJCQlBNUUzOTFGQjIxODNDMUU5MDBDOEZCMzEgLyogSW5z
cGVjdG9yVGFyZ2V0UHJveHkuY3BwICovLAorCQkJCUE1RTM5MUZDMjE4M0MxRTkwMEM4RkIzMSAv
KiBJbnNwZWN0b3JUYXJnZXRQcm94eS5oICovLAorCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMz
RCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCisJCQkJQTU1QkE4MTkxQkEyNUIx
RTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCisJCQkJQTU1QkE4MUEx
QkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICov
LAorCQkJCTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAg
Ki8sCisJCQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5Lmgg
Ki8sCisJCQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1l
c3NhZ2VzLmluICovLAorCQkJCUE1NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0
b3JVdGlsaXRpZXMuY3BwICovLAorCQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuaCAqLywKKwkJCQlBNUVDNkFEMjIxNTFCRDY5MDA2NzdEMTcgLyog
V2ViUGFnZURlYnVnZ2FibGUuY3BwICovLAorCQkJCUE1RUM2QUQzMjE1MUJENjkwMDY3N0QxNyAv
KiBXZWJQYWdlRGVidWdnYWJsZS5oICovLAorCQkJCUE1MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAv
KiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTUxM0Y1M0UyMTU0QTVD
QzAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCisJCQkpOworCQkJ
cGF0aCA9IEluc3BlY3RvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTkx
RDk3MEQ1MjNEQTZENTAwMDU3REJDMyAvKiBBZ2VudHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJKTsKKwkJCXBhdGggPSBBZ2VudHM7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBENjIzREE2RDU1MDA1N0RCQzMgLyogbWFj
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBNUQzNTA0
RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCisJ
CQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICov
LAorCQkJCTk5NEJBREYxMUY3RDc3RUEwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyLmggKi8sCisJCQkJOTk0QkFERjIxRjdENzdFQjAwQjU3MUU3IC8qIFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIubW0gKi8sCisJCQkJQTUxOEI1RDAxRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5z
cGVjdG9yV0tXZWJWaWV3LmggKi8sCisJCQkJQTUxOEI1RDExRkUxRDU1QjAwRjlGQTI4IC8qIFdL
SW5zcGVjdG9yV0tXZWJWaWV3Lm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBtYWM7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBENzIzREE2RDVCMDA1N0RCQzMgLyog
aW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjND
NzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggKi8sCisJ
CQkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5t
bSAqLywKKwkJCQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKKwkJCQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcg
LyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCisJCQkpOwor
CQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTkxRDk3
MEUwMjNEQTZGQjEwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTkxRDk3MEU1MjNEQTcwNDcwMDU3REJDMyAvKiBtYWMg
Ki8sCisJCQkJQTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJ
LmNwcCAqLywKKwkJCQlBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVj
dG9yVUkuaCAqLywKKwkJCQlBNTVCQTgxNDFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5z
cGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8q
IFdlYkluc3BlY3Rvci5jcHAgKi8sCisJCQkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdl
Ykluc3BlY3Rvci5oICovLAorCQkJCTFDOEUyQTFDMTI3NzgzM0YwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3IubWVzc2FnZXMuaW4gKi8sCisJCQkJQkMxMTFBNTkxMTJGNEZCQjAwMzM3QkFCIC8qIFdl
Ykluc3BlY3RvckNsaWVudC5jcHAgKi8sCisJCQkJQkMwMzJENkQxMEY0Mzc4RDAwNThDMTVBIC8q
IFdlYkluc3BlY3RvckNsaWVudC5oICovLAorCQkJCUE1NUJBODMyMUJBM0U2RkEwMDdDRDMzRCAv
KiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwICovLAorCQkJCUE1NUJBODMz
MUJBM0U2RkEwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCAq
LywKKwkJCQlGRUU0M0ZEMDFFNjdBRkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJRkVFNDNGRDExRTY3QUZDNjAwNzdENkQxIC8qIFdlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCAqLywKKwkJCQlGRUU0M0ZEMjFFNjdBRkM2MDA3
N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiAqLywK
KwkJCQkxQzg5MUQ2MjE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuY3BwICovLAor
CQkJCTFDODkxRDYzMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5oICovLAorCQkJ
CTFDODkxRDY0MTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAq
LywKKwkJCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5jcHAgKi8sCisJCQkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQuaCAqLywKKwkJCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICovLAorCQkJCUE1NDNFMzBCMjE1QzhBODQwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICovLAorCQkJCUE1NDNF
MzA2MjE1QUQxMkUwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmNwcCAqLywKKwkJCQlBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBJbnNwZWN0
b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBFNTIzREE3MDQ3
MDA1N0RCQzMgLyogbWFjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkxQzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlNYWMubW0g
Ki8sCisJCQkpOworCQkJcGF0aCA9IG1hYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTkzOTI4OEUwMjE0MDRERjAwMEVCQkEzMyAvKiBJbmRleGVkREIgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtODE5Niw2ICs4Mjg1LDcgQEAKIAkJ
CQlCQzBFNUZDQjEyRDY5NkREMDAxMkE3MkEgLyogR2VvbG9jYXRpb24gKi8sCiAJCQkJMkQ3RTQz
QkYyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVSAqLywKIAkJCQlCQzIwNEVERjExQzgzRTcyMDA4RjMz
NzUgLyogSW5qZWN0ZWRCdW5kbGUgKi8sCisJCQkJOTFEOTcwRTAyM0RBNkZCMTAwNTdEQkMzIC8q
IEluc3BlY3RvciAqLywKIAkJCQkzM0QzQTNCRDEzMzk2MDk4MDA3MDlCRTQgLyogTWVkaWFDYWNo
ZSAqLywKIAkJCQk0QTQxMEY0MTE5QUY3QjI3MDAyRUJBQjUgLyogTWVkaWFTdHJlYW0gKi8sCiAJ
CQkJNTEwNUIwRDIxNjJGN0E1RTAwRTI3NzA5IC8qIE5ldHdvcmsgKi8sCkBAIC04MjQ2LDggKzgz
MzYsNiBAQAogCQkJCUJDMDMyRDZBMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJGcmFtZUxvYWRlckNs
aWVudC5oICovLAogCQkJCUJDMUJFMURGMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlv
bkNsaWVudC5jcHAgKi8sCiAJCQkJQkMxQkUxREUxMkQ1NEE0MTAwMDRBMjI4IC8qIFdlYkdlb2xv
Y2F0aW9uQ2xpZW50LmggKi8sCi0JCQkJQkMxMTFBNTkxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYklu
c3BlY3RvckNsaWVudC5jcHAgKi8sCi0JCQkJQkMwMzJENkQxMEY0Mzc4RDAwNThDMTVBIC8qIFdl
Ykluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTUxM0ZGQjhFMjAxNDU5QzIwMDI1OTZFQSAvKiBX
ZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAgKi8sCiAJCQkJNTEzRkZCOEYyMDE0NTlD
MjAwMjU5NkVBIC8qIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmggKi8sCiAJCQkJMzEw
OTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgKi8sCkBA
IC04Mjk2LDkgKzgzODQsNiBAQAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5k
Q29udHJvbGxlci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFu
bmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5o
ICovLAotCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAgKi8sCi0JCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclVJLmggKi8sCi0JCQkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAv
KiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3
NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLAogCQkJCTJE
ODE5QjlCMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1l
c3NhZ2VzLmluICovLApAQCAtODMxOCwxNyArODQwMyw2IEBACiAJCQkJMUE1QjFDNTMxODk4N0VE
RjAwNEZDRjlCIC8qIFdlYkRvY3VtZW50TG9hZGVyLmggKi8sCiAJCQkJQkMxMTFBREMxMTJGNUI5
MzAwMzM3QkFCIC8qIFdlYkZyYW1lLmNwcCAqLywKIAkJCQlCQzAzMkQ4OTEwRjQzN0EwMDA1OEMx
NUEgLyogV2ViRnJhbWUuaCAqLywKLQkJCQkxQzhFMjgxRjEyNzVEMTU0MDBCQzdCRDAgLyogV2Vi
SW5zcGVjdG9yLmNwcCAqLywKLQkJCQkxQzhFMjgxRTEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5z
cGVjdG9yLmggKi8sCi0JCQkJMUM4RTJBMUMxMjc3ODMzRjAwQkM3QkQwIC8qIFdlYkluc3BlY3Rv
ci5tZXNzYWdlcy5pbiAqLywKLQkJCQlBNTVCQTgzMjFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcCAqLywKLQkJCQlBNTVCQTgzMzFCQTNFNkZB
MDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmggKi8sCi0JCQkJ
RkVFNDNGRDAxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIuY3BwICovLAotCQkJCUZFRTQzRkQxMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLmggKi8sCi0JCQkJRkVFNDNGRDIxRTY3QUZDNjAwNzdENkQxIC8q
IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUM4
OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmNwcCAqLywKLQkJCQkxQzg5
MUQ2MzE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCAqLywKLQkJCQkxQzg5MUQ2
NDE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCiAJCQkJ
QkM4NTdGODQxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNw
cCAqLywKIAkJCQlCQzg1N0Y4MzEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIuaCAqLywKIAkJCQlCQzk2M0Q2QTExM0REMTkyMDA1NzRCRTIgLyogV2ViUGFnZS5j
cHAgKi8sCkBAIC04MzM2LDEyICs4NDEwLDYgQEAKIAkJCQlDMENFNzI1ODEyNDdFNERBMDBCQzBF
QzQgLyogV2ViUGFnZS5tZXNzYWdlcy5pbiAqLywKIAkJCQlCQzdCNjIxNDEyQTQyMTlBMDBEMTc0
QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuY3BwICovLAogCQkJCUJDN0I2MjEzMTJBNDIxOUEwMEQx
NzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5oICovLAotCQkJCUE1NDNFMzBBMjE1QzhBODQwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcCAqLywKLQkJCQlBNTQzRTMwODIxNUM4
QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5oICovLAotCQkJCUE1NDNFMzA5
MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAg
Ki8sCi0JCQkJQTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmggKi8sCi0JCQkJQTU0M0UzMDYyMTVBRDEyRTAwMjc5Q0Q5IC8qIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwICovLAotCQkJCUE1NDNFMzA1MjE1
QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgg
Ki8sCiAJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAq
LywKIAkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLywK
IAkJCQlCQ0EwRUY3RTEyMzMxRTc4MDA3RDNDRkIgLyogV2ViVW5kb1N0ZXAuY3BwICovLApAQCAt
ODM2NSw2ICs4NDMzLDcgQEAKIAkJCQkxQUI3RDRDNzEyODhBQTlBMDBDRkQwOEMgLyogRG93bmxv
YWRzICovLAogCQkJCTUxNUJFMTdCMUQ1NEVGNUEwMEREN0M2OCAvKiBHYW1lcGFkICovLAogCQkJ
CTJEN0U0M0JCMjM3NTJDQzQwMEVBNUNBMCAvKiBHUFUgKi8sCisJCQkJOTFEOTcwRDQyM0RBNkQy
NTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLywKIAkJCQkyREE5NDRBODE4ODRFOUFCMDBFRDg2REIg
LyogaW9zICovLAogCQkJCUJDMTExQjE4MTEyRjVGQjQwMDMzN0JBQiAvKiBMYXVuY2hlciAqLywK
IAkJCQlCQ0NGMDg1QzExM0YzQjc1MDBDNjUwQzUgLyogbWFjICovLApAQCAtODM5NCw4ICs4NDYz
LDYgQEAKIAkJCQkyREQ1QTcyQTFFQkYwOUE3MDA5QkE1OTcgLyogSGlkZGVuUGFnZVRocm90dGxp
bmdBdXRvSW5jcmVhc2VzQ291bnRlci5oICovLAogCQkJCTgzOUEyRjJGMUUyMDY3MzkwMDM5MDU3
RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5jcHAgKi8sCiAJCQkJODM5
QTJGMzAxRTIwNjczOTAwMzkwNTdFIC8qIEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1w
bGVyLmggKi8sCi0JCQkJQTVFMzkxRkIyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdl
dFByb3h5LmNwcCAqLywKLQkJCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaCAqLywKIAkJCQk1Q0VBQkEyQjIzMzMyNTE0MDA3OTc3OTcgLyogTGVnYWN5
R2xvYmFsU2V0dGluZ3MuY3BwICovLAogCQkJCTVDRUFCQTJBMjMzMzI0NzcwMDc5Nzc5NyAvKiBM
ZWdhY3lHbG9iYWxTZXR0aW5ncy5oICovLAogCQkJCTMxNjA3RjM4MTk2MjcwMDIwMDlCODdEQSAv
KiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKQEAgLTg0MTEsOSArODQ3OCw2IEBACiAJ
CQkJODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAq
LywKIAkJCQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHku
Y3BwICovLAogCQkJCTQ2ODM1NjlBMjFFODFDQzcwMDZFMjdBMyAvKiBQcm92aXNpb25hbFBhZ2VQ
cm94eS5oICovLAotCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUJDMTExQjA4MTEy
RjVFM0MwMDMzN0JBQiAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLywKIAkJCQkxQTMwMDY2
QzExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovLAogCQkJCTVDQTk4
NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8sCkBAIC04NDkz
LDExICs4NTU3LDYgQEAKIAkJCQlCQzFCRTFGMTEyRDU0REJEMDAwNEEyMjggLyogV2ViR2VvbG9j
YXRpb25Qcm92aWRlci5jcHAgKi8sCiAJCQkJQkMxQkUxRjAxMkQ1NERCRDAwMDRBMjI4IC8qIFdl
Ykdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLywKIAkJCQk1MUM4RTE5QjFGMjE2MTcyMDBCRjczMUIg
LyogV2ViSWNvbkRhdGFiYXNlLmggKi8sCi0JCQkJMUM4RTI4MzMxMjc1RDczODAwQkM3QkQwIC8q
IFdlYkluc3BlY3RvclByb3h5LmNwcCAqLywKLQkJCQkxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAg
LyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLywKLQkJCQkxQzc3QzE5NTEyODhBODcyMDA2QTc0MkYg
LyogV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJQTU1QkE4MjcxQkEzOEUx
RTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgKi8sCi0JCQkJQTU1QkE4Mjgx
QkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5oICovLAogCQkJCUM5OEM0
OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuY3BwICov
LAogCQkJCUM5OEM0OEE0MUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01h
bmFnZXIuaCAqLywKIAkJCQlDOUMxODMzNzFCNzNGRDZBMDA3MDM2QTcgLyogV2ViTWVkaWFTZXNz
aW9uRm9jdXNNYW5hZ2VyQ2xpZW50LmNwcCAqLywKQEAgLTg1MDgsMTYgKzg1NjcsMTIgQEAKIAkJ
CQk3Q0NDQzhGOTFBNUY1MEZEMDA4RkIwREEgLyogV2ViTmF2aWdhdGlvblN0YXRlLmggKi8sCiAJ
CQkJQkMxREZFQTMxMkIzMUY4NzAwNURGNzMwIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
UHJveHkuY3BwICovLAogCQkJCUJDMURGRUEyMTJCMzFGODcwMDVERjczMCAvKiBXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggKi8sCi0JCQkJQTVFQzZBRDIyMTUxQkQ2OTAwNjc3RDE3
IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLywKLQkJCQlBNUVDNkFEMzIxNTFCRDY5MDA2NzdE
MTcgLyogV2ViUGFnZURlYnVnZ2FibGUuaCAqLywKIAkJCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLywKIAkJCQk4MzcyREIy
NzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8s
CiAJCQkJQkM3QjYyMDUxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAgKi8sCiAJ
CQkJQkM3QjYyMDQxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oICovLAogCQkJCTJE
OUVBMzEwMUE5NkQ5RUIwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3Bw
ICovLAogCQkJCTJEOUVBMzBFMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5k
bGVDbGllbnQuaCAqLywKLQkJCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJCUE1MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAv
KiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oICovLAogCQkJCUJDMTExQjBCMTEyRjVFNEYw
MDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovLAogCQkJCUJDMDMyRENCMTBGNDM4OUYwMDU4
QzE1QSAvKiBXZWJQYWdlUHJveHkuaCAqLywKIAkJCQlCQ0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYg
LyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtOTE4Myw3ICs5MjM4LDYgQEAKIAkJ
CQk3QzZEMzdGQTE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSAqLywKIAkJCQkx
QUFGMjYzNzE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEu
aCAqLywKIAkJCQkxQUFGMjYzNjE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWEubW0gKi8sCi0JCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYklu
c3BlY3RvclVJTWFjLm1tICovLAogCQkJCUJDOTYzRDZEMTEzREQxQTUwMDU3NEJFMiAvKiBXZWJQ
YWdlTWFjLm1tICovLAogCQkJCTI5Q0Q1NUE4MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oICovLAogCQkJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4
NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5tbSAqLywKQEAgLTkyNjAsNyAr
OTMxNCw2IEBACiAJCQkJMUFGREU2NUIxOTU0RThENTAwQzQ4RkZBIC8qIExlZ2FjeVNlc3Npb25T
dGF0ZUNvZGluZy5jcHAgKi8sCiAJCQkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VD
bGllbnRJbXBsTWFjLmggKi8sCiAJCQkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VD
bGllbnRJbXBsTWFjLm1tICovLAotCQkJCUE1RDM1MDREMUQ3OEYwRDIwMDUxMjRBOSAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAqLywKIAkJCQlFMThFNjkwOTE2OUI1NjNGMDA5QjY2
NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5jcHAgKi8sCiAJCQkJRTE4RTY5MEExNjlCNTYzRjAwOUI2
NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCAqLywKIAkJCQlFMThFNjkwRDE2OUI1N0RGMDA5QjY2
NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTkyODEsNyArOTMzNCw2
IEBACiAJCQkJRjZENjMyQkExMzNEMTgxQjAwNzQzRDc3IC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94
eU1hYy5tbSAqLywKIAkJCQlFNTY4QjkyMDIwQTNBQzZBMDBFM0M4NTYgLyogV2ViRGF0YUxpc3RT
dWdnZXN0aW9uc0Ryb3Bkb3duTWFjLmggKi8sCiAJCQkJRTU2OEI5MjEyMEEzQUM2QTAwRTNDODU2
IC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5tbSAqLywKLQkJCQkxQ0E4Qjkz
NTEyN0M3NzRFMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCiAJCQkJQkM4
NTdFODUxMkI3MUVCQjAwRURFQjJFIC8qIFdlYlBhZ2VQcm94eU1hYy5tbSAqLywKIAkJCQlCQzU3
NTA5NTEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMuaCAqLywKIAkJCQlC
QzU3NTA5NjEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMubW0gKi8sCkBA
IC05MjkyLDEwICs5MzQ0LDYgQEAKIAkJCQlDRENBODVDNjEzMkFCQTRFMDBFOTYxREYgLyogV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAqLywKIAkJCQk5MzIxRDU4NTFBMzhFRTNDMDA4
MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMyMUQ1ODcx
QTM4RUU3NDAwODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSAqLywKLQkJ
CQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5o
ICovLAotCQkJCTk5NEJBREYyMUY3RDc3RUIwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyLm1tICovLAotCQkJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3Rv
cldLV2ViVmlldy5oICovLAotCQkJCUE1MThCNUQxMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3Bl
Y3RvcldLV2ViVmlldy5tbSAqLywKIAkJCQkwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQ
cmludGluZ1ZpZXcuaCAqLywKIAkJCQkwRkNCNEU1RDE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmlu
dGluZ1ZpZXcubW0gKi8sCiAJCQkJNTEzRTQ2MkIxQUQ4Mzc1NjAwMTYyMzRBIC8qIFdLU2hhcmlu
Z1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTU4ZDhmMGMyNDYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclVJLmNwcApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgorCisjaW5jbHVkZSAiUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3Bl
Y3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNp
bmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJPiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3Rl
V2ViSW5zcGVjdG9yVUkocGFnZSkpOworfQorCitSZW1vdGVXZWJJbnNwZWN0b3JVSTo6UmVtb3Rl
V2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6aW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywg
Y29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpCit7CisgICAgbV9kZWJ1Z2dhYmxlSW5m
byA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0g
YmFja2VuZENvbW1hbmRzVVJMOworCisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlzKTsKKworICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHRydWUpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3Ms
IHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBT
dHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1h
bmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sK
KyAgICBpZiAobV9mcm9udGVuZEhvc3QpCisgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25u
ZWN0Q2xpZW50KCk7CisKKyAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9z
dDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKKyAgICBtX2Zyb250ZW5kSG9zdC0+
YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBt
X2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOworCisgICAgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHRydWUpOwor
CisgICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNo
YW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZp
ZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJh
ZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
STo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1l
UmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7CisgICAgZnJh
bWVSZWN0Lm1vdmUoeCwgeSk7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdp
bmRvd1JlY3QoZnJhbWVSZWN0KTsKK30KKworV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvbiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5n
VG9Gcm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5n
VG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7CisKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBt
X3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVv
cGVuKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCks
IG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpy
ZXNldFN0YXRlKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVz
ZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpPcGVuSW5OZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50
aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQs
IGJvb2wgZm9yY2VTYXZlQXMpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwg
bV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFw
cGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29u
dGVudCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAg
IC8vIERvIG5vdGhpbmcuIFRoZSByZW1vdGUgc2lkZSBjYW4ga25vdyBpZiB0aGUgbWFpbiByZXNv
dXJjZSBjaGFuZ2VkLgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlm
aWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0
ZUluZm8pLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKworSW5zcGVjdG9yOjpEZWJ1Z2dhYmxl
VHlwZSBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGVidWdnYWJsZVR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLmRlYnVnZ2FibGVUeXBlOworfQorCitTdHJpbmcgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOworfQorCitTdHJpbmcgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOworfQorCitTdHJpbmcgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKK30KKworYm9vbCBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldElzU2ltdWxhdG9yOworfQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9URUxFTUVUUlkpCitib29sIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0
c0RpYWdub3N0aWNMb2dnaW5nKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNl
dHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwg
IGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25h
cnkpCit7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCku
bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90
ZSBXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91
bGRTYW1wbGU6Ok5vKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25v
c3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisgICAgLy8gSW5zcGVjdG9y
J3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3Mg
dGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCisgICAgQVNTRVJUKCFhdmFpbGFibGUg
fHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKKyAgICBtX2RpYWdub3N0aWNMb2dnaW5n
QXZhaWxhYmxlID0gYXZhaWxhYmxlOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlz
cGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZSk7Cit9CisjZW5kaWYKKworI2lmICFQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclVJLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1JlbW90ZVdlYkluc3BlY3RvclVJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmI0YWUxYzFkYWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCkBAIC0wLDAgKzEsMTE4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0Rh
dGEuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
Q2VydGlmaWNhdGVJbmZvOworY2xhc3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yVUkgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVXZWJJbnNwZWN0b3JVST4sIHB1YmxpYyBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2Vi
UGFnZSYpOworCisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBDYWxsZWQg
YnkgUmVtb3RlV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKKyAgICB2b2lkIGluaXRpYWxpemUoRGVi
dWdnYWJsZUluZm9EYXRhJiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKTsKKyAg
ICB2b2lkIGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgZGlkQXBwZW5kKGNv
bnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmKTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIHZvaWQgc2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7CisjZW5kaWYKKworICAgIC8vIFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50CisgICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVk
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOworICAgIHZv
aWQgY2hhbmdlU2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtb3ZlV2luZG93
QnkoZmxvYXQgeCwgZmxvYXQgeSkgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzUmVtb3RlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJM
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9CisgICAgSW5zcGVjdG9yOjpE
ZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmlu
ZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0
QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldFByb2R1Y3RW
ZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
biB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGJyaW5nVG9Gcm9udCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlb3BlbigpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzZXRTdGF0ZSgp
IG92ZXJyaWRlOworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpIG92
ZXJyaWRlOworICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQp
IG92ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisg
ICAgYm9vbCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBk
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGU7IH0KKyAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBT
dHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6
OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBib29sIGNhblNhdmUo
KSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gMTsgfQorICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERv
Y2tTaWRlKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lk
dGgodW5zaWduZWQpIG92ZXJyaWRlIHsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlbW90
ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmKTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBX
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7
CisgICAgUmVmUHRyPFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhv
c3Q7CisgICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87CisgICAgU3RyaW5n
IG1fYmFja2VuZENvbW1hbmRzVVJMOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkp
CisgICAgYm9vbCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKKyNlbmRp
ZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJmN2U0
Yzg3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzQgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSSB7CisgICAgSW5pdGlhbGl6ZShzdHJ1Y3QgV2ViS2l0OjpEZWJ1
Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwp
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisgICAgRGlkU2F2ZShTdHJp
bmcgdXJsKQorICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4zMzIyNWQxM2RkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcApAQCAtMCwwICsxLDMyMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3Rvci5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yUGFn
ZUFnZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0aW9uQWN0aW9uLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
V2luZG93RmVhdHVyZXMuaD4KKworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhl
aWdodCA9IDI1MDsKK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRp
byA9IDAuNzU7CitzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7
CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxX
ZWJJbnNwZWN0b3I+IFdlYkluc3BlY3Rvcjo6Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yKHBhZ2UpKTsKK30KKworV2ViSW5zcGVj
dG9yOjpXZWJJbnNwZWN0b3IoV2ViUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorewor
fQorCitXZWJJbnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQoreworICAgIGlmIChtX2Zyb250ZW5k
Q29ubmVjdGlvbikKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wg
dW5kZXJUZXN0KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpPcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5p
ZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2V0RnJvbnRlbmRDb25uZWN0
aW9uKElQQzo6QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAg
Ly8gV2UgbWlnaHQgcmVjZWl2ZSBtdWx0aXBsZSB1cGRhdGVzIGlmIHRoaXMgd2ViIHByb2Nlc3Mg
Z290IHN3YXBwZWQgaW50byBhIFdlYlBhZ2VQcm94eQorICAgIC8vIHNob3J0bHkgYWZ0ZXIgYW5v
dGhlciBwcm9jZXNzIGVzdGFibGlzaGVkIHRoZSBjb25uZWN0aW9uLgorICAgIGlmIChtX2Zyb250
ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0
ZSgpOworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisj
aWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlm
aWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5yZWxl
YXNlRmlsZURlc2NyaXB0b3IoKSk7CisjZWxpZiBPUyhEQVJXSU4pCisgICAgSVBDOjpDb25uZWN0
aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRl
bnRpZmllci5wb3J0KCkpOworI2VsaWYgT1MoV0lORE9XUykKKyAgICBJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlm
aWVyLmhhbmRsZSgpKTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47
CisjZW5kaWYKKworICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChj
b25uZWN0aW9uSWRlbnRpZmllcikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJvbnRlbmRD
b25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5l
Y3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7CisgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4o
KTsKKworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlv
bnMpCisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25z
LmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZUZyb250ZW5kQ29ubmVjdGlv
bigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFn
ZS0+aWRlbnRpZmllcigpKTsKKworICAgIC8vIElmIHdlIHRyaWVkIHRvIGNsb3NlIHRoZSBmcm9u
dGVuZCBiZWZvcmUgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gbm8gY29ubmVjdGlvbiBleGlzdHMgeWV0
LgorICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51
bGxwdHI7CisgICAgfQorCisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7
CisKKyAgICBtX2F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGZh
bHNlOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+aWRlbnRpZmll
cigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OndoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3Rh
Ymxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1fZnJvbnRl
bmRDb25uZWN0aW9uKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMuYXBwZW5kKFdURk1vdmUoY2Fs
bGJhY2spKTsKK30KKworLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvciBtZXNzYWdlcwordm9pZCBX
ZWJJbnNwZWN0b3I6OnNob3coKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5zaG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZSgpCit7CisgICAgaWYg
KCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENsb3NlIGNv
dWxkIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGVhcmRvd24uCisgICAgaWYgKCFt
X2Zyb250ZW5kQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xvc2VGcm9udGVu
ZENvbm5lY3Rpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Jbk5ld1RhYihjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0
b3IgeyBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfTsKKworICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2Ug
PSBtX3BhZ2UtPmNvcmVQYWdlKCk7CisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBGcmFtZSYgaW5zcGVjdGVkTWFpbkZyYW1lID0gaW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCk7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmlu
c3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBpbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0sICJfYmxh
bmsiX3MsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8sIE1heWJlU2Vu
ZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVu
ZXJQb2xpY3k6OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RB
bGxvdywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsKKworICAgIE5hdmlnYXRpb25B
Y3Rpb24gYWN0aW9uIHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBmcmFtZUxvYWRSZXF1ZXN0LmluaXRpYXRlZEJ5TWFp
bkZyYW1lKCksIE5hdmlnYXRpb25UeXBlOjpMaW5rQ2xpY2tlZCB9OworICAgIFBhZ2UqIG5ld1Bh
Z2UgPSBpbnNwZWN0ZWRQYWdlLT5jaHJvbWUoKS5jcmVhdGVXaW5kb3coaW5zcGVjdGVkTWFpbkZy
YW1lLCBmcmFtZUxvYWRSZXF1ZXN0LCB7IH0sIGFjdGlvbik7CisgICAgaWYgKCFuZXdQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBuZXdQYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2Fk
KFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZXZh
bHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0KQoreworICAgIGlmICghbV9w
YWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlw
dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93Q29uc29sZSgpCit7CisgICAgaWYgKCFt
X3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVuZENv
bm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dDb25zb2xlKCksIDApOworICAgIH0p
OworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291cmNlcygpCit7CisgICAgaWYgKCFt
X3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVuZENv
bm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dSZXNvdXJjZXMoKSwgMCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2Vi
Q29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikKK3sKKyAgICBXZWJGcmFtZSog
ZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIp
OworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWdlLT5j
b3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICBTdHJpbmcgaW5zcGVjdG9yRnJhbWVJ
ZGVudGlmaWVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZW5z
dXJlUGFnZUFnZW50KCkuZnJhbWVJZChmcmFtZS0+Y29yZUZyYW1lKCkpOworCisgICAgd2hlbkZy
b250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2hvd01haW5SZXNvdXJjZUZv
ckZyYW1lKGluc3BlY3RvckZyYW1lSWRlbnRpZmllciksIDApOworICAgIH0pOworfQorCit2b2lk
IFdlYkluc3BlY3Rvcjo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+
Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlv
bkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RhcnRQYWdlUHJvZmlsaW5nKCksIDApOworICAgIH0p
OworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c3RvcFBhZ2VQcm9maWxpbmcoKQoreworICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRl
bmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdG9wUGFnZVByb2ZpbGluZygpLCAw
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0RWxlbWVudFNlbGVjdGlv
bigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0RWxl
bWVudFNlbGVjdGlvbigpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0
b3BFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9
XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0
aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6dGlt
ZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5p
ZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2V0TW9ja0NhcHR1cmVEZXZp
Y2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCit7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlk
ZShlbmFibGVkKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCitib29sIFdlYkluc3BlY3Rv
cjo6Y2FuQXR0YWNoV2luZG93KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG9uJ3QgYWxsb3cgYXR0YWNoaW5nIHRvIGFu
b3RoZXIgaW5zcGVjdG9yIC0tIHR3byBpbnNwZWN0b3JzIGluIG9uZSB3aW5kb3cgaXMgdG9vIG11
Y2ghCisgICAgaWYgKG1fcGFnZS0+aXNJbnNwZWN0b3JQYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVkLCBhbGxvdyBhdHRhY2hp
bmcgYWdhaW4gdG8gYWxsb3cgc3dpdGNoaW5nIHNpZGVzLgorICAgIGlmIChtX2F0dGFjaGVkKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYg
dGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0g
aW5zcGVjdG9yIHNpemUuCisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAg
dW5zaWduZWQgaW5zcGVjdGVkUGFnZVdpZHRoID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS52aWV3KCktPnZpc2libGVXaWR0aCgpOworICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hl
ZEhlaWdodCA9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRp
bzsKKyAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhl
aWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBpbnNwZWN0ZWRQYWdlV2lkdGg7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKK3sKKyAgICBp
ZiAobV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBjYW5BdHRhY2hXaW5k
b3cgPSB0aGlzLT5jYW5BdHRhY2hXaW5kb3coKTsKKyAgICBpZiAobV9wcmV2aW91c0NhbkF0dGFj
aCA9PSBjYW5BdHRhY2hXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJldmlvdXND
YW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2Ut
PmlkZW50aWZpZXIoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2Yjg5ZTUyMjc3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaApAQCAt
MCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBX
ZWJJbnNwZWN0b3IgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpC
dW5kbGVJbnNwZWN0b3I+LCBwcml2YXRlIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3Rvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKKworICAg
IFdlYlBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KKworICAgIHZvaWQgdXBk
YXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpOworCisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJh
dGVkIFdlYkluc3BlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAg
Ly8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQorICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZSgpOyB9CisKKyAgICB2b2lkIHNob3coKTsKKyAg
ICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVy
bFN0cmluZyk7CisKKyAgICB2b2lkIGNhbkF0dGFjaFdpbmRvdyhib29sJiByZXN1bHQpOworCisg
ICAgdm9pZCBzaG93Q29uc29sZSgpOworICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOworCisgICAg
dm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyKTsK
KworICAgIHZvaWQgc2V0QXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkgeyBtX2F0dGFjaGVkID0gYXR0
YWNoZWQ7IH0KKworICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYg
c2NyaXB0KTsKKworICAgIHZvaWQgc3RhcnRQYWdlUHJvZmlsaW5nKCk7CisgICAgdm9pZCBzdG9w
UGFnZVByb2ZpbGluZygpOworCisgICAgdm9pZCBzdGFydEVsZW1lbnRTZWxlY3Rpb24oKTsKKyAg
ICB2b2lkIHN0b3BFbGVtZW50U2VsZWN0aW9uKCk7CisgICAgdm9pZCBlbGVtZW50U2VsZWN0aW9u
Q2hhbmdlZChib29sKTsKKyAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKTsK
KyAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxi
b29sPik7CisKKyAgICB2b2lkIHNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQp
OworCisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVBhZ2UoKSB7IGNsb3NlKCk7IH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50OworCisgICAgZXhwbGljaXQg
V2ViSW5zcGVjdG9yKFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3IoKTsKKwor
ICAgIGJvb2wgY2FuQXR0YWNoV2luZG93KCk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNw
ZWN0b3JDbGllbnQKKyAgICB2b2lkIG9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5k
ZXJUZXN0KTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7CisKKyAgICB2b2lk
IGJyaW5nVG9Gcm9udCgpOworCisgICAgdm9pZCB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJs
aXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmKTsKKworICAgIFdlYlBhZ2UqIG1fcGFnZTsKKworICAg
IFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fZnJvbnRlbmRDb25uZWN0aW9uOworICAgIFZlY3Rv
cjxGdW5jdGlvbjx2b2lkKCk+PiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnM7CisKKyAgICBi
b29sIG1fYXR0YWNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wcmV2aW91c0NhbkF0dGFjaCB7
IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhZjc0YjVlNmIwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3IubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3Igewor
ICAgIFNob3coKQorICAgIENsb3NlKCkKKworICAgIFNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQp
CisKKyAgICBTaG93Q29uc29sZSgpCisgICAgU2hvd1Jlc291cmNlcygpCisKKyAgICBTaG93TWFp
blJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmll
cikKKworICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQorCisgICAgU3RhcnRQYWdlUHJvZmls
aW5nKCkKKyAgICBTdG9wUGFnZVByb2ZpbGluZygpCisKKyAgICBTdGFydEVsZW1lbnRTZWxlY3Rp
b24oKQorICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKKworICAgIFNldEZyb250ZW5kQ29ubmVj
dGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiMDY4MDE5ZWY4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVu
dC5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3Iu
aCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
T3ZlcmxheS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK2NsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCBmaW5hbCA6IHB1
YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQoV2ViSW5zcGVjdG9yQ2xp
ZW50JiBpbnNwZWN0b3JDbGllbnQpCisgICAgICAgIDogbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVj
dG9yQ2xpZW50KQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UmVwYWludEluZGljYXRvckxh
eWVyQ2xpZW50KCkgeyB9Citwcml2YXRlOgorICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uRW5kZWQo
Y29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5hbmltYXRpb25FbmRlZEZvckxheWVyKGxheWVy
KTsKKyAgICB9CisgICAgCisgICAgV2ViSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVu
dDsKK307CisKK1dlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2Uq
IHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1faGlnaGxpZ2h0T3ZlcmxheShudWxs
cHRyKQoreworfQorCitXZWJJbnNwZWN0b3JDbGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQoKQor
eworICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX3BhaW50UmVjdExheWVycykKKyAgICAgICAgbGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAKKyAgICBtX3BhaW50UmVjdExheWVycy5jbGVh
cigpOworCisgICAgaWYgKG1fcGFpbnRSZWN0T3ZlcmxheSAmJiBtX3BhZ2UtPmNvcmVQYWdlKCkp
CisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5p
bnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVN
b2RlOjpGYWRlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBhZ2VE
ZXN0cm95ZWQoKQoreworICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IG1fcGFnZS0+
aW5zcGVjdG9yKFdlYlBhZ2U6OkxhenlDcmVhdGlvblBvbGljeTo6VXNlRXhpc3RpbmdPbmx5KSkK
KyAgICAgICAgaW5zcGVjdG9yLT5jbG9zZSgpOworCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpmcm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCBjb3Vu
dCkKK3sKKyAgICBtX3BhZ2UtPmluc3BlY3RvckZyb250ZW5kQ291bnRDaGFuZ2VkKGNvdW50KTsK
K30KKworSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIFdlYkluc3BlY3RvckNsaWVudDo6b3Bl
bkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBt
X3BhZ2UtPmluc3BlY3RvcigpLT5vcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChjb250cm9sbGVy
LT5pc1VuZGVyVGVzdCgpKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6YnJpbmdGcm9udGVuZFRvRnJvbnQoKQoreworICAgIGlmIChtX3BhZ2Ut
Pmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5icmluZ1RvRnJvbnQo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFJlc2l6ZU1haW5GcmFtZShGcmFt
ZSopCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5z
cGVjdG9yKCktPnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKCFtX2hpZ2hsaWdodE92
ZXJsYXkpIHsKKyAgICAgICAgYXV0byBoaWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNy
ZWF0ZSgqdGhpcyk7CisgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJs
YXkucHRyKCk7CisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9s
bGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KFdURk1vdmUoaGlnaGxpZ2h0T3ZlcmxheSksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5
LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNl
dE5lZWRzRGlzcGxheSgpOworICAgIH0KKyNlbHNlCisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsK
KyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5nZXRIaWdobGln
aHQoaGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtOjpEb2N1bWVu
dCk7CisgICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7CisjZW5k
aWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCisgICAg
ICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxs
UGFnZU92ZXJsYXkoKm1faGlnaGxpZ2h0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKKyNlbHNlCisgICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7CisjZW5k
aWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7CisgICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9
IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9j
dW1lbnQpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLmluc3RhbGxQYWdlT3ZlcmxheSgqbV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgfQorCisgICAgaWYgKCFtX3BhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQpCisgICAgICAgIG1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCA9IG1ha2VV
bmlxdWU8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PigqdGhpcyk7CisKKyAgICBhdXRvIHBh
aW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5n
cmFwaGljc0xheWVyRmFjdG9yeSgpLCAqbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KTsKKyAg
ICAKKyAgICBwYWludExheWVyLT5zZXROYW1lKCJwYWludCByZWN0Iik7CisgICAgcGFpbnRMYXll
ci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIHBhaW50TGF5ZXItPnNldFBv
c2l0aW9uKHJlY3QubG9jYXRpb24oKSk7CisgICAgcGFpbnRMYXllci0+c2V0U2l6ZShyZWN0LnNp
emUoKSk7CisgICAgcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDEuMGYsIDAu
MGYsIDAuMGYsIDAuMmYpKTsKKworICAgIEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMo
QW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VV
bmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMCwgMSkpOworCisgICAgZmFkZUtleWZyYW1lcy5p
bnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLjI1LCAwKSk7CisgICAgCisg
ICAgYXV0byBvcGFjaXR5QW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBvcGFj
aXR5QW5pbWF0aW9uLT5zZXREdXJhdGlvbigwLjI1KTsKKworICAgIHBhaW50TGF5ZXItPmFkZEFu
aW1hdGlvbihmYWRlS2V5ZnJhbWVzLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW1hdGlvbi5wdHIo
KSwgIm9wYWNpdHkiX3MsIDApOworICAgIAorICAgIEdyYXBoaWNzTGF5ZXImIHJhd0xheWVyID0g
cGFpbnRMYXllci5nZXQoKTsKKyAgICBtX3BhaW50UmVjdExheWVycy5hZGQoV1RGTW92ZShwYWlu
dExheWVyKSk7CisKKyAgICBHcmFwaGljc0xheWVyJiBvdmVybGF5Um9vdExheWVyID0gbV9wYWlu
dFJlY3RPdmVybGF5LT5sYXllcigpOworICAgIG92ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocmF3
TGF5ZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YW5pbWF0aW9uRW5kZWRGb3JM
YXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyKiBu
b25Db25zdExheWVyID0gY29uc3RfY2FzdDxHcmFwaGljc0xheWVyKj4obGF5ZXIpOworICAgIG5v
bkNvbnN0TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhaW50UmVjdExheWVycy5y
ZW1vdmUoKm5vbkNvbnN0TGF5ZXIpOworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3Zv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpCit7CisgICAg
bV9wYWdlLT5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6aGlkZUluc3BlY3RvckluZGljYXRpb24oKQoreworICAgIG1fcGFnZS0+aGlkZUlu
c3BlY3RvckluZGljYXRpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNl
dFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChlbmFibGVkKQorICAg
ICAgICBtX3BhZ2UtPmVuYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fcGFnZS0+ZGlzYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKK30KKyNlbmRpZgorCit2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3Rp
dmUpCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5z
cGVjdG9yKCktPmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCit7
CisgICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9y
KCktPnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChhY3RpdmUpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFs
PGJvb2w+IGVuYWJsZWQpCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAg
IG1fcGFnZS0+aW5zcGVjdG9yKCktPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlk
ZShlbmFibGVkKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdl
KFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3
ZWIgcGFnZSwgcmVzZXQgaXQuCisgICAgQVNTRVJUKG1faGlnaGxpZ2h0T3ZlcmxheSk7CisgICAg
bV9oaWdobGlnaHRPdmVybGF5ID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKikKK3sKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQor
eworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdo
bGlnaHQoY29udGV4dCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50
KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3YzNlZTE0MmUxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGll
bnQuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xh
c3MgSW50UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKKwor
Y2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK2ZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7
CitwdWJsaWM6CisgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFs
IH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBXZWJDb3JlOjpJbnNw
ZWN0b3JDbGllbnQKKyAgICB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkKSBvdmVycmlkZTsKKworICAg
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBvcGVuTG9jYWxGcm9udGVuZChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGU7CisgICAgdm9pZCBicmluZ0Zyb250ZW5kVG9G
cm9udCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVzaXplTWFpbkZyYW1lKFdlYkNvcmU6OkZy
YW1lKikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGhpZ2hsaWdodCgpIG92ZXJyaWRlOworICAgIHZv
aWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJyaWRlOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBo
aWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOworCisgICAgdm9pZCBkaWRTZXRTZWFy
Y2hpbmdGb3JOb2RlKGJvb2wpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIGVsZW1lbnRT
ZWxlY3Rpb25DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgdGltZWxpbmVSZWNvcmRp
bmdDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworCisgICAgYm9vbCBvdmVycmlkZXNTaG93UGFpbnRS
ZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHNob3dQYWlu
dFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNl
dE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPikgZmluYWw7
CisKKyAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50CisgICAgdm9pZCB3aWxsTW92ZVRvUGFnZShX
ZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAg
ICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRG
b3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisKKyAgICBXZWJQYWdlKiBt
X3BhZ2U7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKKyAg
ICAKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50
SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CisgICAgSGFzaFNldDxSZWY8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4+IG1fcGFpbnRSZWN0TGF5ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxODllOTgyNWFkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NjcmlwdFN0YXRlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cihXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpyZXNldCgpCit7CisgICAgbV9mcm9udGVuZExv
YWRlZCA9IGZhbHNlOworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CisgICAgbV9xdWV1ZS5jbGVh
cigpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZnJvbnRl
bmRMb2FkZWQoKQoreworICAgIG1fZnJvbnRlbmRMb2FkZWQgPSB0cnVlOworCisgICAgZXZhbHVh
dGVRdWV1ZWRFeHByZXNzaW9ucygpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlcjo6c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKG1fZnJvbnRlbmRMb2FkZWQpOwor
ICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOworICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7
CisKKyAgICBtX3N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQoreworICAgIEFTU0VSVChtX3N1c3BlbmRlZCk7
CisKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNz
aW9ucygpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCkKK3sKKyAgICBldmFsdWF0ZU9yUXVl
dWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtc
IiIsIGNvbW1hbmQsICJcIl0pIikpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3Qg
U3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VT
dHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwg
XCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRB
UElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29s
IGFyZ3VtZW50KQoreworICAgIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24obWFrZVN0cmluZygi
SW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wiIiwgY29tbWFuZCwgIlwiLCAiLCBhcmd1
bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIklu
c3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVzc2FnZUFzeW5jKCIsIG1lc3NhZ2UsICIpIikp
OworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVP
clF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCit7CisgICAgaWYgKCFt
X2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7CisgICAgICAgIG1fcXVldWUuYXBwZW5k
KGV4cHJlc3Npb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fcXVl
dWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1l
KCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOwor
fQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVRdWV1
ZWRFeHByZXNzaW9ucygpCit7CisgICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiA6IG1fcXVldWUpIHsK
KyAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCku
aXNQYXVzZWQoKSk7CisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3Jp
cHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNlcHRpb24oZXhwcmVzc2lvbik7CisgICAgfQor
CisgICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5mNWM0MjRlMmQ4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgeworcHVibGljOgorICAgIFdlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdlJik7CisKKyAgICB2b2lkIHJlc2V0KCk7Cisg
ICAgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9p
ZCB1bnN1c3BlbmQoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZCk7CisgICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmQsIGJvb2wgYXJndW1lbnQpOworICAgIHZvaWQgZGlzcGF0Y2hNZXNz
YWdlQXN5bmMoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGV2
YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBldmFsdWF0
ZVF1ZXVlZEV4cHJlc3Npb25zKCk7CisKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgRGVxdWU8
U3RyaW5nPiBtX3F1ZXVlOworICAgIGJvb2wgbV9mcm9udGVuZExvYWRlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX3N1c3BlbmRlZCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMDE3ODUxZjY4NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlci5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgi
CisKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9u
Vk0uaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKTsKK30KKworV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlcjo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCisgICAgOiBtX3F1
ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIiKSkKK3sKK30KKworV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
cjo6fldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKQoreworfQorCit2b2lkIFdlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9xdWV1ZS5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQor
eworICAgIC8vIElmIHRoZSB3ZWIgcHJvY2VzcyBoYXMgbm90IGJlZW4gZnVsbHkgaW5pdGlhbGl6
ZWQgeWV0LCB0aGVuIHRoZXJlCisgICAgLy8gaXMgbm8gVk0gdG8gYmUgbm90aWZpZWQgYW5kIHRo
dXMgbm8gaW5maW5pdGUgbG9vcCB0byBicmVhay4gQmFpbCBvdXQuCisgICAgaWYgKCFXZWJDb3Jl
Ojpjb21tb25WTU9yTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBKU0M6OlZNJiB2bSA9
IFdlYkNvcmU6OmNvbW1vblZNKCk7CisgICAgdm0ubm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGY2YmQw
MjBhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIg
OiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gY3Jl
YXRlKCk7CisgICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKTsKKyAgICAKKyAg
ICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiopOworICAgIAorcHJp
dmF0ZToKKyAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7CisgICAgLy8gSVBD
OjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCisgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAg
ICAKKyAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7CisgICAgCisgICAgUmVmPFdv
cmtRdWV1ZT4gbV9xdWV1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ODcwZTUyYjczYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIgeworICAgIE5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCkKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
VUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JV
SS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFmYWE2ZjZlZGU1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgorCisjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
V2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nl
cnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxXZWJJbnNwZWN0b3JVST4g
V2ViSW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYkluc3BlY3RvclVJKHBhZ2UpKTsKK30KKworV2ViSW5zcGVjdG9yVUk6Oldl
Ykluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCisgICAgLCBtX2RlYnVnZ2FibGVJbmZvKERlYnVn
Z2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkKK3sKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQodHJ1ZSk7CisgICAg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJbWFnZUJpdG1hcEVu
YWJsZWQodHJ1ZSk7CisjaWYgRU5BQkxFKFdFQkdMMikKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkdMMkVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZXN0YWJsaXNoQ29ubmVjdGlvbihXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyIGluc3BlY3RlZFBhZ2VJZGVudGlmaWVyLCBjb25zdCBEZWJ1Z2dhYmxlSW5mb0Rh
dGEmIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxl
dmVsKQoreworICAgIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIgPSBpbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcjsKKyAgICBtX2RlYnVnZ2FibGVJbmZvID0gZGVidWdnYWJsZUluZm87CisgICAgbV91
bmRlclRlc3QgPSB1bmRlclRlc3Q7CisgICAgbV9pbnNwZWN0aW9uTGV2ZWwgPSBpbnNwZWN0aW9u
TGV2ZWw7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOworCisgICAgbV9m
cm9udGVuZENvbnRyb2xsZXIgPSAmbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKTsKKyAgICBtX2Zyb250ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQodGhpcyk7CisKKyAgICB1cGRhdGVDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUk6OnVwZGF0ZUNvbm5lY3Rpb24oKQoreworICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9u
KSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAg
bV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisjaWYgVVNFKFVOSVhfRE9N
QUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIg
PSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigpOworICAgIElQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihzb2NrZXRQYWlyLnNl
cnZlcik7CisgICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KHNvY2tldFBh
aXIuY2xpZW50KTsKKyNlbGlmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQ
b3J0ID0gTUFDSF9QT1JUX05VTEw7CisgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rh
c2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpICE9IEtF
Uk5fU1VDQ0VTUykKKyAgICAgICAgQ1JBU0goKTsKKworICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0
X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1B
Q0hfTVNHX1RZUEVfTUFLRV9TRU5EKSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIENSQVNIKCk7
CisKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIo
bGlzdGVuaW5nUG9ydCk7CisgICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0
KGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKKyNlbGlmIFBMQVRGT1JN
KFdJTikKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZp
ZXIsIGNvbm5DbGllbnQ7CisgICAgSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJBbmRDbGll
bnRJZGVudGlmaWVycyhjb25uZWN0aW9uSWRlbnRpZmllciwgY29ubkNsaWVudCk7CisgICAgSVBD
OjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGNvbm5DbGllbnQpOworI2Vsc2UKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybjsKKyNlbmRpZgorCisjaWYgVVNFKFVOSVhf
RE9NQUlOX1NPQ0tFVFMpIHx8IE9TKERBUldJTikgfHwgUExBVEZPUk0oV0lOKQorICAgIG1fYmFj
a2VuZENvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24o
Y29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzKTsKKyAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5v
cGVuKCk7CisjZW5kaWYKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRGcm9u
dGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbkNsaWVudFBvcnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgp
Cit7CisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlz
Y29ubmVjdENsaWVudCgpOworCisgICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7CisgICAgbV9mcm9udGVuZEhv
c3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIC8vIFRlbGwgdGhl
IG5ldyBmcm9udGVuZCBhYm91dCB0aGUgY3VycmVudCBkb2NrIHN0YXRlLiBJZiB0aGUgd2luZG93
IG9iamVjdAorICAgIC8vIGNsZWFyZWQgZHVlIHRvIGEgcmVsb2FkLCB0aGUgZG9jayBzdGF0ZSB3
b24ndCBiZSByZXNlbnQgZnJvbSBVSVByb2Nlc3MuCisgICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxl
KG1fZG9ja2luZ1VuYXZhaWxhYmxlKTsKKyAgICBzZXREb2NrU2lkZShtX2RvY2tTaWRlKTsKKyAg
ICBzZXRJc1Zpc2libGUobV9pc1Zpc2libGUpOworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OkZyb250ZW5kTG9hZGVkKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworCisg
ICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93
RHJhZygpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJh
ZygpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1l
UmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7CisgICAgZnJh
bWVSZWN0Lm1vdmUoeCwgeSk7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdp
bmRvd1JlY3QoZnJhbWVSZWN0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zy
b250KCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpj
bG9zZVdpbmRvdygpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3Nl
KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworCisgICAgaWYgKG1fYmFja2VuZENvbm5l
Y3Rpb24pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAg
ICAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9m
cm9udGVuZENvbnRyb2xsZXIpIHsKKyAgICAgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldElu
c3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIpOworICAgICAgICBtX2Zyb250ZW5kQ29udHJv
bGxlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAg
ICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOworCisgICAgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllciA9IHsgfTsKKyAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJOjpyZW9wZW4oKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpSZW9wZW4oKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnJlc2V0U3RhdGUoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpSZXNldFN0YXRlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCitXZWJD
b3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIFdlYkluc3BlY3RvclVJOjp1c2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQ
YWdlKCktPnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSTo6cmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCit7CisgICAgYXV0byYg
d2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIHN3aXRjaCAoc2lkZSkg
eworICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2VkOgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpE
ZXRhY2goKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdo
dCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEb2NrU2lkZTo6TGVmdDoKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2Nr
U2lkZTo6Qm90dG9tOgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hCb3R0b20oKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKK3sKKyAgICBBU0NJ
SUxpdGVyYWwgc2lkZVN0cmluZyB7IEFTQ0lJTGl0ZXJhbDo6bnVsbCgpIH07CisKKyAgICBzd2l0
Y2ggKHNpZGUpIHsKKyAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKKyAgICAgICAgc2lkZVN0
cmluZyA9ICJ1bmRvY2tlZCJfczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERvY2tTaWRl
OjpSaWdodDoKKyAgICAgICAgc2lkZVN0cmluZyA9ICJyaWdodCJfczsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIERvY2tTaWRlOjpMZWZ0OgorICAgICAgICBzaWRlU3RyaW5nID0gImxlZnQi
X3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgorICAgICAg
ICBzaWRlU3RyaW5nID0gImJvdHRvbSJfczsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
bV9kb2NrU2lkZSA9IHNpZGU7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRj
aENvbW1hbmQoInNldERvY2tTaWRlIl9zLCBTdHJpbmcoc2lkZVN0cmluZykpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJOjpzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkK
K3sKKyAgICBtX2RvY2tpbmdVbmF2YWlsYWJsZSA9IHVuYXZhaWxhYmxlOworCisgICAgbV9mcm9u
dGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUi
X3MsIHVuYXZhaWxhYmxlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0SXNWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHZpc2libGU7CisKKyAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldElzVmlzaWJsZSJfcywgdmlz
aWJsZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgo
dW5zaWduZWQgd2lkdGgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0
dGFjaGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlU2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0U2hlZXRSZWN0KHJl
Y3QpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmIChtX2JhY2tlbmRD
b25uZWN0aW9uKSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6T3BlbkluTmV3VGFiKHVybCksIDApOworICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUo
Y29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwg
Ym9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBm
b3JjZVNhdmVBcyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJOjphcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6
OlN0cmluZyYgY29udGVudCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBw
ZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVS
TENoYW5nZWQodXJsU3RyaW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8m
IGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2hv
d0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OworfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCitib29sIFdlYkluc3BlY3Rv
clVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNv
cmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSwgY29uc3QgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYgZGlj
dGlvbmFyeSkKK3sKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQoKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZURpY3Rpb25hcnkoZXZlbnROYW1lLCAi
V2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxk
U2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIEluc3BlY3RvcidzIGRpYWdu
b3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdl
IHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgorICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBv
cnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7CisgICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZSA9IGF2YWlsYWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29t
bWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dp
bmdBdmFpbGFibGUpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDb25z
b2xlKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNo
b3dDb25zb2xlIl9zKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd1Jlc291cmNlcygp
Cit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93UmVz
b3VyY2VzIl9zKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd01haW5SZXNvdXJjZUZv
ckZyYW1lKGNvbnN0IFN0cmluZyYgZnJhbWVJZGVudGlmaWVyKQoreworICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd01haW5SZXNvdXJjZUZvckZyYW1lIl9z
LCBmcmFtZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFBhZ2VQ
cm9maWxpbmcoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFu
ZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCB0cnVlKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c3RvcFBhZ2VQcm9maWxpbmcoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCBm
YWxzZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigp
Cit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVt
ZW50U2VsZWN0aW9uRW5hYmxlZCJfcywgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6
OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5k
aXNwYXRjaENvbW1hbmQoInNldEVsZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCBmYWxzZSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpCit7Cisg
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzYXZlZFVSTCJfcywg
dXJsKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYg
dXJsKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgiYXBw
ZW5kZWRUb1VSTCJfcywgdXJsKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5kaXNwYXRjaE1lc3NhZ2VBc3luYyhtZXNzYWdlKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6cGFnZVBhdXNlZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
c3VzcGVuZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpwYWdlVW5wYXVzZWQoKQorewor
ICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnVuc3VzcGVuZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1l
c3NhZ2UpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKworU3RyaW5nIFdlYkluc3Bl
Y3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVn
Z2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJ
Ojp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJ
bmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJn
ZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8u
dGFyZ2V0UHJvZHVjdFZlcnNpb247Cit9CisKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmlu
ZyBXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKyNlbmRpZiAvLyAh
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yVUkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNjM5ZjIxYzliNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7CitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87CitjbGFzcyBGbG9hdFJlY3Q7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJ
bnNwZWN0b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkluc3BlY3RvclVJPiwgcHJpdmF0ZSBJ
UEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclVJPiBjcmVhdGUo
V2ViUGFnZSYpOworCisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3Rv
clVJTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudAorICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJp
ZGUgeyAvKiBEbyBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBhZ2UgcHJvY2VzcyBtYXkgaGF2ZSBj
cmFzaGVkIGFuZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4gKi8gfQorICAgIHZvaWQgZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNl
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZVdpbmRvdygpOyB9CisKKyAg
ICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKKyAgICB2b2lkIGVzdGFibGlz
aENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmll
ciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGlu
c3BlY3Rpb25MZXZlbCk7CisgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uKCk7CisKKyAgICB2b2lk
IHNob3dDb25zb2xlKCk7CisgICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7CisKKyAgICB2b2lkIHNo
b3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcik7CisK
KyAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOworICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxp
bmcoKTsKKworICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7CisgICAgdm9pZCBzdG9w
RWxlbWVudFNlbGVjdGlvbigpOworCisgICAgdm9pZCBhdHRhY2hlZEJvdHRvbSgpIHsgc2V0RG9j
a1NpZGUoRG9ja1NpZGU6OkJvdHRvbSk7IH0KKyAgICB2b2lkIGF0dGFjaGVkUmlnaHQoKSB7IHNl
dERvY2tTaWRlKERvY2tTaWRlOjpSaWdodCk7IH0KKyAgICB2b2lkIGF0dGFjaGVkTGVmdCgpIHsg
c2V0RG9ja1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9CisgICAgdm9pZCBkZXRhY2hlZCgpIHsgc2V0
RG9ja1NpZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsgfQorCisgICAgdm9pZCBzZXREb2NrU2lkZShE
b2NrU2lkZSk7CisgICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCk7CisKKyAgICB2
b2lkIHNldElzVmlzaWJsZShib29sKTsKKworICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOworCisgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX1RFTEVNRVRSWSkKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
KGJvb2wgYXZhbGlhYmxlKTsKKyNlbmRpZgorCisgICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQKKyAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93
RHJhZygpIG92ZXJyaWRlOworICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkp
IG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KKyAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsg
fQorICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBT
dHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRh
cmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0YXJnZXRJc1Np
bXVsYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdW5zaWduZWQgaW5z
cGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbnNwZWN0aW9uTGV2ZWw7
IH0KKworICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbG9zZVdp
bmRvdygpIG92ZXJyaWRlOworICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZXNldFN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
KworICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJyaWRlOworCisgICAg
dm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7CisK
KyAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoY29uc3QgV1RGOjpT
dHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2Rl
ZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV1RG
OjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92
ZXJyaWRlOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBzdXBw
b3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBkaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGU7IH0KKyAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBXVEY6OlN0cmluZyYg
ZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVE
aWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHBhZ2VQYXVzZWQoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92ZXJyaWRlOworCisgICAgYm9vbCBp
c1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOworCisgICAgV2ViUGFnZSYg
bV9wYWdlOworICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0
PiBtX2Zyb250ZW5kSG9zdDsKKyAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2JhY2tlbmRD
b25uZWN0aW9uOworCisgICAgLy8gS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGZyb250ZW5kJ3MgaW5z
cGVjdG9yIGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaAorICAgIC8vIGNvcmVQ
YWdlKCksIHNpbmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRoZSBmcm9udGVuZCdzIHBhZ2UgaGFz
IHN0YXJ0ZWQgZGVzdHJ1Y3Rpb24uCisgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciog
bV9mcm9udGVuZENvbnRyb2xsZXIgeyBudWxscHRyIH07CisKKyAgICBXZWJQYWdlUHJveHlJZGVu
dGlmaWVyIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7CisgICAgYm9vbCBtX3VuZGVyVGVzdCB7
IGZhbHNlIH07CisgICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87CisgICAg
Ym9vbCBtX2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVmlzaWJs
ZSB7IGZhbHNlIH07CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBt
X2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKKyNlbmRpZgorCisgICAgRG9j
a1NpZGUgbV9kb2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tlZCB9OworICAgIHVuc2lnbmVkIG1f
aW5zcGVjdGlvbkxldmVsIHsgMSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJ
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JVSS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOTRmMTM4NWQ0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNTMgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMg
LT4gV2ViSW5zcGVjdG9yVUkgeworICAgIEVzdGFibGlzaENvbm5lY3Rpb24oV2ViS2l0OjpXZWJQ
YWdlUHJveHlJZGVudGlmaWVyIGluc3BlY3RlZFBhZ2VJZGVudGlmaWVyLCBzdHJ1Y3QgV2ViS2l0
OjpEZWJ1Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1bnNp
Z25lZCBpbnNwZWN0aW9uTGV2ZWwpCisgICAgVXBkYXRlQ29ubmVjdGlvbigpCisKKyAgICBBdHRh
Y2hlZEJvdHRvbSgpCisgICAgQXR0YWNoZWRSaWdodCgpCisgICAgQXR0YWNoZWRMZWZ0KCkKKyAg
ICBEZXRhY2hlZCgpCisgICAgU2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wgdW5hdmFpbGFibGUp
CisgICAgU2V0SXNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
VEVMRU1FVFJZKQorICAgIFNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxh
YmxlKQorI2VuZGlmCisKKyAgICBTaG93Q29uc29sZSgpCisgICAgU2hvd1Jlc291cmNlcygpCisK
KyAgICBTaG93TWFpblJlc291cmNlRm9yRnJhbWUoU3RyaW5nIGZyYW1lSWRlbnRpZmllcikKKwor
ICAgIFN0YXJ0UGFnZVByb2ZpbGluZygpCisgICAgU3RvcFBhZ2VQcm9maWxpbmcoKQorCisgICAg
U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKKyAgICBTdG9wRWxlbWVudFNlbGVjdGlvbigpCisKKyAg
ICBEaWRTYXZlKFN0cmluZyB1cmwpCisgICAgRGlkQXBwZW5kKFN0cmluZyB1cmwpCisKKyAgICBT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nIG1lc3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTcwZjZmZDUy
MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKK1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2Vi
UGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCitTdHJpbmcgV2ViUGFnZUlu
c3BlY3RvclRhcmdldDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvVGFyZ2V0
SUQobV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdl
dDo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29u
bmVjdGlvblR5cGUpCit7CisgICAgaWYgKG1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY2hhbm5lbCA9IG1ha2VVbmlxdWU8V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbD4obV9wYWdlLCBpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKTsKKyAgICBpZiAobV9w
YWdlLmNvcmVQYWdlKCkpCisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQ6OmRpc2Nvbm5lY3QoKQoreworICAgIGlmICghbV9jaGFubmVsKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2Uu
Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9j
aGFubmVsKTsKKyAgICBtX2NoYW5uZWwucmVzZXQoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZCht
ZXNzYWdlKTsKK30KKworU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQo
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlEKQoreworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJwYWdlLSIsIHBhZ2VJRC50b1VJbnQ2NCgpKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFn
ZUluc3BlY3RvclRhcmdldC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjZjYmQ3ZmFkNWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKQEAgLTAsMCArMSw1OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQpOworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQoV2ViUGFnZSYpOworICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZh
dWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KKwor
ICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNvbm5lY3Qo
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJn
ZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgc3RhdGljIFN0cmluZyB0
b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBXZWJQ
YWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRG
cm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjkwMTdjNGVkYWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1f
cGFnZShwYWdlKQorICAgICwgbV9wYWdlVGFyZ2V0KHBhZ2UpCit7CisgICAgLy8gRG8gbm90IHNl
bmQgdGhlIHBhZ2UgdGFyZ2V0IHRvIHRoZSBVSVByb2Nlc3MsIHRoZSBXZWJQYWdlUHJveHkgd2ls
bCBtYW5hZ2VyIHRoaXMgZm9yIHVzLgorICAgIG1fdGFyZ2V0cy5zZXQobV9wYWdlVGFyZ2V0Lmlk
ZW50aWZpZXIoKSwgJm1fcGFnZVRhcmdldCk7Cit9CisKK1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyOjp+V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoKQoreworfQorCit2
b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjphZGRUYXJnZXQoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdGFy
Z2V0cy5zZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwgJnRhcmdldCk7CisgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgIG1fcGFnZS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRp
ZmllcigpLCB0YXJnZXQudHlwZSgpKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXI6OnJlbW92ZVRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYgdGFy
Z2V0KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodGFyZ2V0LmlkZW50aWZpZXIoKSAhPSBt
X3BhZ2VUYXJnZXQuaWRlbnRpZmllcigpLCAiU2hvdWxkIG5ldmVyIHJlbW92ZSB0aGUgbWFpbiB0
YXJnZXQuIik7CisKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZXN0
cm95SW5zcGVjdG9yVGFyZ2V0KHRhcmdldC5pZGVudGlmaWVyKCkpKTsKKworICAgIG1fdGFyZ2V0
cy5yZW1vdmUodGFyZ2V0LmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25U
eXBlKQoreworICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7CisgICAg
aWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIHRhcmdldC0+Y29ubmVjdChjb25u
ZWN0aW9uVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6
OmRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKK3sKKyAgICBhdXRv
IHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPmRpc2Nvbm5lY3QoKTsKK30KKwordm9pZCBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGF1
dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7CisgICAgaWYgKCF0YXJnZXQpCisg
ICAgICAgIHJldHVybjsKKworICAgIHRhcmdldC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQo
bWVzc2FnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi43YzkzMWRhZDFjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBJbnNw
ZWN0b3JUYXJnZXQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOwor
CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlciB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIoV2ViUGFnZSYpOworICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcigp
OworCisgICAgdm9pZCBhZGRUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKKyAg
ICB2b2lkIHJlbW92ZVRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYpOworCisgICAg
dm9pZCBjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgdm9pZCBkaXNjb25uZWN0SW5z
cGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1Rh
cmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgV2ViUGFnZUluc3BlY3Rv
clRhcmdldCBtX3BhZ2VUYXJnZXQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0Kj4gbV90YXJnZXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTFiNWY3MTM3MzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldl
YlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6
IG1fcGFnZShwYWdlKQorICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKKyAgICAsIG1fY29ubmVj
dGlvblR5cGUoY29ubmVjdGlvblR5cGUpCit7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5k
TWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgx
ODRhYzViZGEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwpOworcHVibGljOgorICAgIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7Cisg
ICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCgpID0gZGVm
YXVsdDsKKworcHJpdmF0ZToKKyAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29ubmVjdGlvblR5cGU7IH0KKyAgICB2b2lkIHNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOworCisgICAg
V2ViUGFnZSYgbV9wYWdlOworICAgIFN0cmluZyBtX3RhcmdldElkOworICAgIEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25UeXBlIHsgSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlOjpSZW1vdGUgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYjRmOTdmZThkMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3Rr
LmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCisjaW5jbHVk
ZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3Ry
aW5nc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dl
YmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
Iik7Cit9CisKK1N0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VS
TCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9p
bnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWU1NWYzZDU4YTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JV
SU1hYy5tbQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNw
ZWN0b3JVSS5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ym9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBTdHJpbmcgd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAg
ICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29t
LmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJdOworICAgIGlmICghcGF0aCkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAorICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVy
biB3ZWJJbnNwZWN0b3JVSUxvY2FsaXplZFN0cmluZ3NVUkwoKTsKK30KKworU3RyaW5nIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIwNjgwMTllZjguLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5z
cGVjdG9yQ2xpZW50LmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3Rvci5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Fu
aW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JPdmVybGF5Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50
IGZpbmFsIDogcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudChXZWJJ
bnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgOiBtX2luc3BlY3RvckNs
aWVudChpbnNwZWN0b3JDbGllbnQpCi0gICAgewotICAgIH0KLSAgICB2aXJ0dWFsIH5SZXBhaW50
SW5kaWNhdG9yTGF5ZXJDbGllbnQoKSB7IH0KLXByaXZhdGU6Ci0gICAgdm9pZCBub3RpZnlBbmlt
YXRpb25FbmRlZChjb25zdCBHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmFuaW1hdGlvbkVuZGVkRm9y
TGF5ZXIobGF5ZXIpOwotICAgIH0KLSAgICAKLSAgICBXZWJJbnNwZWN0b3JDbGllbnQmIG1faW5z
cGVjdG9yQ2xpZW50OwotfTsKLQotV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGll
bnQoV2ViUGFnZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9oaWdobGlnaHRP
dmVybGF5KG51bGxwdHIpCi17Ci19Ci0KLVdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3Rv
ckNsaWVudCgpCi17Ci0gICAgZm9yIChhdXRvJiBsYXllciA6IG1fcGFpbnRSZWN0TGF5ZXJzKQot
ICAgICAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIAotICAgIG1fcGFpbnRSZWN0
TGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9wYWludFJlY3RPdmVybGF5ICYmIG1fcGFnZS0+
Y29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgqbV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkZhZGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdGVkUGFnZURlc3Ryb3llZCgpCi17Ci0gICAgaWYgKFdlYkluc3BlY3RvciogaW5zcGVjdG9y
ID0gbV9wYWdlLT5pbnNwZWN0b3IoV2ViUGFnZTo6TGF6eUNyZWF0aW9uUG9saWN5OjpVc2VFeGlz
dGluZ09ubHkpKQotICAgICAgICBpbnNwZWN0b3ItPmNsb3NlKCk7Ci0KLSAgICBkZWxldGUgdGhp
czsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250ZW5kQ291bnRDaGFuZ2VkKHVu
c2lnbmVkIGNvdW50KQotewotICAgIG1fcGFnZS0+aW5zcGVjdG9yRnJvbnRlbmRDb3VudENoYW5n
ZWQoY291bnQpOwotfQotCi1JbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogV2ViSW5zcGVjdG9y
Q2xpZW50OjpvcGVuTG9jYWxGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVy
KQotewotICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPm9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5k
KGNvbnRyb2xsZXItPmlzVW5kZXJUZXN0KCkpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpicmluZ0Zyb250ZW5kVG9Gcm9udCgpCi17Ci0gICAg
aWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmJy
aW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkUmVzaXplTWFp
bkZyYW1lKEZyYW1lKikKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAg
bV9wYWdlLT5pbnNwZWN0b3IoKS0+dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIW1f
aGlnaGxpZ2h0T3ZlcmxheSkgewotICAgICAgICBhdXRvIGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdl
T3ZlcmxheTo6Y3JlYXRlKCp0aGlzKTsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGln
aGxpZ2h0T3ZlcmxheS5wdHIoKTsKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoV1RGTW92ZShoaWdobGlnaHRPdmVy
bGF5KSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLSAgICAgICAgbV9oaWdobGlnaHRP
dmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2hpZ2hs
aWdodE92ZXJsYXktPnN0b3BGYWRlT3V0QW5pbWF0aW9uKCk7Ci0gICAgICAgIG1faGlnaGxpZ2h0
T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfQotI2Vsc2UKLSAgICBIaWdobGlnaHQg
aGlnaGxpZ2h0OwotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmdldEhpZ2hsaWdodChoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0
ZW06OkRvY3VtZW50KTsKLSAgICBtX3BhZ2UtPnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxp
Z2h0KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdo
dCgpCi17Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG1faGlnaGxpZ2h0T3Zl
cmxheSkKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS51bmluc3RhbGxQYWdlT3ZlcmxheSgqbV9oaWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkZhZGUpOwotI2Vsc2UKLSAgICBtX3BhZ2UtPmhpZGVJbnNwZWN0b3JIaWdobGln
aHQoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFtX3BhaW50UmVjdE92ZXJsYXkpIHsKLSAgICAgICAgbV9wYWludFJl
Y3RPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJs
YXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBh
Z2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRlKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudCkKLSAgICAgICAgbV9wYWludEluZGljYXRvckxheWVyQ2xp
ZW50ID0gbWFrZVVuaXF1ZTxSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ+KCp0aGlzKTsKLQot
ICAgIGF1dG8gcGFpbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShtX3BhZ2UtPmRyYXdp
bmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICptX3BhaW50SW5kaWNhdG9yTGF5ZXJD
bGllbnQpOwotICAgIAotICAgIHBhaW50TGF5ZXItPnNldE5hbWUoInBhaW50IHJlY3QiKTsKLSAg
ICBwYWludExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAgcGFpbnRM
YXllci0+c2V0UG9zaXRpb24ocmVjdC5sb2NhdGlvbigpKTsKLSAgICBwYWludExheWVyLT5zZXRT
aXplKHJlY3Quc2l6ZSgpKTsKLSAgICBwYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29s
b3IoMS4wZiwgMC4wZiwgMC4wZiwgMC4yZikpOwotCi0gICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmFk
ZUtleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAgZmFkZUtleWZyYW1lcy5p
bnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCAxKSk7Ci0KLSAgICBmYWRl
S2V5ZnJhbWVzLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAuMjUsIDAp
KTsKLSAgICAKLSAgICBhdXRvIG9wYWNpdHlBbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgp
OwotICAgIG9wYWNpdHlBbmltYXRpb24tPnNldER1cmF0aW9uKDAuMjUpOwotCi0gICAgcGFpbnRM
YXllci0+YWRkQW5pbWF0aW9uKGZhZGVLZXlmcmFtZXMsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5QW5p
bWF0aW9uLnB0cigpLCAib3BhY2l0eSJfcywgMCk7Ci0gICAgCi0gICAgR3JhcGhpY3NMYXllciYg
cmF3TGF5ZXIgPSBwYWludExheWVyLmdldCgpOwotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmFkZChX
VEZNb3ZlKHBhaW50TGF5ZXIpKTsKLQotICAgIEdyYXBoaWNzTGF5ZXImIG92ZXJsYXlSb290TGF5
ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxheWVyKCk7Ci0gICAgb3ZlcmxheVJvb3RMYXllci5h
ZGRDaGlsZChyYXdMYXllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRp
b25FbmRlZEZvckxheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIEdyYXBo
aWNzTGF5ZXIqIG5vbkNvbnN0TGF5ZXIgPSBjb25zdF9jYXN0PEdyYXBoaWNzTGF5ZXIqPihsYXll
cik7Ci0gICAgbm9uQ29uc3RMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFpbnRS
ZWN0TGF5ZXJzLnJlbW92ZSgqbm9uQ29uc3RMYXllcik7Ci19Ci0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dJbnNwZWN0b3JJbmRpY2F0aW9u
KCkKLXsKLSAgICBtX3BhZ2UtPnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9w
YWdlLT5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGVu
YWJsZWQpCi0gICAgICAgIG1fcGFnZS0+ZW5hYmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotICAg
IGVsc2UKLSAgICAgICAgbV9wYWdlLT5kaXNhYmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotfQot
I2VuZGlmCi0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdl
ZChib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAg
bV9wYWdlLT5pbnNwZWN0b3IoKS0+ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29s
IGFjdGl2ZSkKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdl
LT5pbnNwZWN0b3IoKS0+dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3Io
KSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5h
YmxlZE92ZXJyaWRlKGVuYWJsZWQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2ls
bE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdlKiBwYWdlKQotewotICAgIGlmIChwYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGlzIG1vdmluZyBhd2F5
IGZyb20gdGhlIHdlYiBwYWdlLCByZXNldCBpdC4KLSAgICBBU1NFUlQobV9oaWdobGlnaHRPdmVy
bGF5KTsKLSAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBudWxscHRyOwotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6ZGlkTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQotewotfQot
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGly
dHlSZWN0Ki8pCi17Ci0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6
Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YzNlZTE0MmUxLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
ckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFBhZ2VPdmVy
bGF5OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFJl
cGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKLQotY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDog
cHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3Zl
cmxheTo6Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLWZyaWVuZCBjbGFz
cyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9y
Q2xpZW50KFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKLQot
cHJpdmF0ZToKLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQKLSAgICB2b2lkIGluc3Bl
Y3RlZFBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kQ291bnRDaGFu
Z2VkKHVuc2lnbmVkKSBvdmVycmlkZTsKLQotICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
KiBvcGVuTG9jYWxGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZGlkUmVzaXplTWFpbkZyYW1lKFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGhpZ2hsaWdodCgpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJyaWRl
OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRp
Y2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wpIG92ZXJyaWRl
OwotI2VuZGlmCi0KLSAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpIG92ZXJy
aWRlOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwot
Ci0gICAgYm9vbCBvdmVycmlkZXNTaG93UGFpbnRSZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2b2lkIHNob3dQYWludFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRP
dmVycmlkZShPcHRpb25hbDxib29sPikgZmluYWw7Ci0KLSAgICAvLyBQYWdlT3ZlcmxheTo6Q2xp
ZW50Ci0gICAgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNv
cmU6OlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UmVjdChX
ZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKik7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0gICAgV2ViQ29yZTo6UGFnZU92
ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKLSAgICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UGFn
ZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwYWlu
dEluZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0gICAg
SGFzaFNldDxSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4+IG1fcGFpbnRSZWN0TGF5ZXJzOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ4ZjBjMjQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSAiUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3Rv
clVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNs
dWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JN
KEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJPiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3Jl
YXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2Vi
SW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1SZW1vdGVXZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6aW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29u
c3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpCi17Ci0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9
IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFj
a2VuZENvbW1hbmRzVVJMOwotCi0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlzKTsKLQotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlz
cGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHRydWUpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAg
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVy
bCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQo
ImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAg
ICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0
Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6
Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+YWRk
U2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOwotCi0gICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHRydWUpOwotCi0g
ICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5n
ZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIo
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygp
LCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVj
dCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVS
ZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRv
d1JlY3QoZnJhbWVSZWN0KTsKLX0KLQotV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9G
cm9udCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9G
cm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6Y2xvc2VXaW5kb3coKQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7Ci0KLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3Bh
Z2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVu
KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNl
dFN0YXRlKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRT
dGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpPcGVuSW5OZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50aWZp
ZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlQXMpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9w
YWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVu
ZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVu
dCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIC8v
IERvIG5vdGhpbmcuIFRoZSByZW1vdGUgc2lkZSBjYW4ga25vdyBpZiB0aGUgbWFpbiByZXNvdXJj
ZSBjaGFuZ2VkLgotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNh
dGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUlu
Zm8pLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlw
ZSBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGVidWdnYWJsZVR5cGUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2RlYnVnZ2FibGVJbmZvLmRlYnVnZ2FibGVUeXBlOwotfQotCi1TdHJpbmcgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOwotfQotCi1TdHJpbmcgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOwotfQotCi1TdHJpbmcgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKLX0KLQotYm9vbCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldElzU2ltdWxhdG9yOwotfQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9URUxFTUVUUlkpCi1ib29sIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0Rp
YWdub3N0aWNMb2dnaW5nKCkKLXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRp
bmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNv
bnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkp
Ci17Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9n
RGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBX
ZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRT
YW1wbGU6Ok5vKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3Rp
Y0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgLy8gSW5zcGVjdG9yJ3Mg
ZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhl
IHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCi0gICAgQVNTRVJUKCFhdmFpbGFibGUgfHwg
c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKLSAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlID0gYXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZSk7Ci19Ci0jZW5kaWYKLQotI2lmICFQTEFURk9STShNQUMpICYmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykg
JiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVX
ZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
V2ViSW5zcGVjdG9yVUkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhZTFjMWRh
YTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZVdlYkluc3BlY3RvclVJLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgi
Ci0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0j
aW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRp
ZmljYXRlSW5mbzsKLWNsYXNzIEZsb2F0UmVjdDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5zcGVjdG9yVUk+LCBwdWJsaWMgSVBDOjpNZXNzYWdl
UmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2Um
KTsKLQotICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBSZW1vdGVXZWJJbnNwZWN0b3JV
SU1lc3NhZ2VSZWNlaXZlci5jcHAKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gQ2FsbGVkIGJ5IFJl
bW90ZVdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCi0gICAgdm9pZCBpbml0aWFsaXplKERlYnVnZ2Fi
bGVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7Ci0gICAgdm9p
ZCBkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIGRpZEFwcGVuZChjb25zdCBT
dHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
Jik7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwotI2VuZGlmCi0KLSAgICAvLyBXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudAotICAgIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92
ZXJyaWRlOwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNo
YW5nZVNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZs
b2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQotICAgIEluc3BlY3Rvcjo6RGVidWdn
YWJsZVR5cGUgZGVidWdnYWJsZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFy
Z2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1aWxk
VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lv
bigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBi
cmluZ1RvRnJvbnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsb3NlV2luZG93KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW9wZW4oKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb250ZW50KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJv
b2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOwotICAgIGJvb2wgZGlhZ25v
c3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlOyB9Ci0gICAgdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUsIGNvbnN0IFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1
ZURpY3Rpb25hcnkmKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgYm9vbCBjYW5TYXZlKCkgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDE7IH0KLSAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lk
ZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVu
c2lnbmVkKSBvdmVycmlkZSB7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSShXZWJQYWdlJik7Ci0KLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0Owot
ICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOwotICAgIFN0cmluZyBtX2Jh
Y2tlbmRDb21tYW5kc1VSTDsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAg
IGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5p
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJmN2U0Yzg3OGQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3Rv
clVJLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZVdl
Ykluc3BlY3RvclVJIHsKLSAgICBJbml0aWFsaXplKHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJ
bmZvRGF0YSBkZWJ1Z2dhYmxlSW5mbywgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCkKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIFNldERpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotI2VuZGlmCi0KLSAgICBEaWRTYXZlKFN0cmluZyB1cmwp
Ci0gICAgRGlkQXBwZW5kKFN0cmluZyB1cmwpCi0KLSAgICBTZW5kTWVzc2FnZVRvRnJvbnRlbmQo
U3RyaW5nIG1lc3NhZ2UpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMjVk
MTNkZDMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3Rvci5oIgotCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZUxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JG
cm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0aW9uQWN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVh
dHVyZXMuaD4KLQotc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1
MDsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0
b3I+IFdlYkluc3BlY3Rvcjo6Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yKHBhZ2UpKTsKLX0KLQotV2ViSW5zcGVjdG9yOjpXZWJJ
bnNwZWN0b3IoV2ViUGFnZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotewotfQotCi1XZWJJ
bnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQotewotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlv
bikKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0
KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVy
KCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6
QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIpCi17Ci0gICAgLy8gV2UgbWln
aHQgcmVjZWl2ZSBtdWx0aXBsZSB1cGRhdGVzIGlmIHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBw
ZWQgaW50byBhIFdlYlBhZ2VQcm94eQotICAgIC8vIHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9j
ZXNzIGVzdGFibGlzaGVkIHRoZSBjb25uZWN0aW9uLgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVj
dGlvbikgewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVO
SVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5l
Y3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURl
c2NyaXB0b3IoKSk7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5w
b3J0KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRs
ZSgpKTsKLSNlbHNlCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47Ci0jZW5kaWYK
LQotICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9u
SWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9u
ID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVu
dGlmaWVyLCAqdGhpcyk7Ci0gICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKLQotICAg
IGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCi0gICAg
ICAgIGNhbGxiYWNrKCk7Ci0gICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpCi17Ci0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRp
ZmllcigpKTsKLQotICAgIC8vIElmIHdlIHRyaWVkIHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZv
cmUgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gbm8gY29ubmVjdGlvbiBleGlzdHMgeWV0LgotICAgIGlm
IChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci0KLSAgICBt
X2F0dGFjaGVkID0gZmFsc2U7Ci0gICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGZhbHNlOwotfQot
Ci12b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3I6OndoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChG
dW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0
aW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsK
LX0KLQotLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvciBtZXNzYWdlcwotdm9pZCBXZWJJbnNwZWN0
b3I6OnNob3coKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2Ut
PmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENsb3NlIGNvdWxkIGJlIGNh
bGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGVhcmRvd24uCi0gICAgaWYgKCFtX2Zyb250ZW5k
Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xvc2VGcm9udGVuZENvbm5lY3Rp
b24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKLXsKLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgfTsKLQotICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2Ut
PmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBGcmFtZSYgaW5zcGVjdGVkTWFpbkZyYW1lID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1h
aW5GcmFtZS5kb2N1bWVudCgpLCBpbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0IHsgdXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExv
Y2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJkTGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVy
LCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6
OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5p
dGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsKLQotICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0
aW9uIHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLCBmcmFtZUxvYWRSZXF1ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCks
IE5hdmlnYXRpb25UeXBlOjpMaW5rQ2xpY2tlZCB9OwotICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNw
ZWN0ZWRQYWdlLT5jaHJvbWUoKS5jcmVhdGVXaW5kb3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFt
ZUxvYWRSZXF1ZXN0LCB7IH0sIGFjdGlvbik7Ci0gICAgaWYgKCFuZXdQYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBuZXdQYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUo
ZnJhbWVMb2FkUmVxdWVzdCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3Jp
cHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0KQotewotICAgIGlmICghbV9wYWdlLT5jb3Jl
UGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dDb25zb2xlKCksIDApOwotICAgIH0pOwotfQotCi12
b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291cmNlcygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dSZXNvdXJjZXMoKSwgMCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikKLXsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIpOwotICAgIGlm
ICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICBTdHJpbmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVy
ID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFn
ZW50KCkuZnJhbWVJZChmcmFtZS0+Y29yZUZyYW1lKCkpOwotCi0gICAgd2hlbkZyb250ZW5kQ29u
bmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGlu
c3BlY3RvckZyYW1lSWRlbnRpZmllciksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3Bl
Y3Rvcjo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2Uo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlz
aGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U3RhcnRQYWdlUHJvZmlsaW5nKCksIDApOwotICAgIH0pOwotfQotCi12
b2lkIFdlYkluc3BlY3Rvcjo6c3RvcFBhZ2VQcm9maWxpbmcoKQotewotICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0
aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdG9wUGFnZVByb2ZpbGluZygpLCAwKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0g
ICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoZW5G
cm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50
U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAg
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9w
YWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVy
KCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVk
KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi1ib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0
YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5z
cGVjdG9yIC0tIHR3byBpbnNwZWN0b3JzIGluIG9uZSB3aW5kb3cgaXMgdG9vIG11Y2ghCi0gICAg
aWYgKG1fcGFnZS0+aXNJbnNwZWN0b3JQYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0dGFjaGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4g
dG8gYWxsb3cgc3dpdGNoaW5nIHNpZGVzLgotICAgIGlmIChtX2F0dGFjaGVkKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRv
dyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9y
IHNpemUuCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQg
aW5zcGVjdGVkUGFnZVdpZHRoID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCktPnZpc2libGVXaWR0aCgpOwotICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9
IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICBy
ZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBt
aW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBpbnNwZWN0ZWRQYWdlV2lkdGg7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKLXsKLSAgICBpZiAobV9hdHRh
Y2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlz
LT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICBpZiAobV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5B
dHRhY2hXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJldmlvdXNDYW5BdHRhY2gg
PSBjYW5BdHRhY2hXaW5kb3c7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0
YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZp
ZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjZiODllNTIyNzcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQ
SU9iamVjdC5oIgotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lSWRlbnRpZmllci5oPgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9y
IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlSW5zcGVj
dG9yPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxXZWJJbnNwZWN0b3I+IGNyZWF0ZShXZWJQYWdlKik7Ci0KLSAgICBXZWJQYWdlKiBw
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZURvY2tpbmdB
dmFpbGFiaWxpdHkoKTsKLQotICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNw
ZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVy
cmlkZSB7IGNsb3NlKCk7IH0KLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2Up
IG92ZXJyaWRlIHsgY2xvc2UoKTsgfQotCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBjbG9z
ZSgpOwotCi0gICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwot
Ci0gICAgdm9pZCBjYW5BdHRhY2hXaW5kb3coYm9vbCYgcmVzdWx0KTsKLQotICAgIHZvaWQgc2hv
d0NvbnNvbGUoKTsKLSAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKLQotICAgIHZvaWQgc2hvd01h
aW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcik7Ci0KLSAgICB2b2lk
IHNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpIHsgbV9hdHRhY2hlZCA9IGF0dGFjaGVkOyB9Ci0K
LSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCk7Ci0K
LSAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxp
bmcoKTsKLQotICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9w
RWxlbWVudFNlbGVjdGlvbigpOwotICAgIHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9v
bCk7Ci0gICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBz
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0g
ICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50KTsKLQotICAgIHZv
aWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBjbG9zZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIFdlYkluc3BlY3RvckNsaWVudDsKLQotICAgIGV4cGxpY2l0IFdlYkluc3BlY3Rv
cihXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yKCk7Ci0KLSAgICBib29sIGNh
bkF0dGFjaFdpbmRvdygpOwotCi0gICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50
Ci0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCk7Ci0g
ICAgdm9pZCBjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpOwotCi0gICAgdm9pZCBicmluZ1RvRnJv
bnQoKTsKLQotICAgIHZvaWQgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0
aW9uPHZvaWQoKT4mJik7Ci0KLSAgICBXZWJQYWdlKiBtX3BhZ2U7Ci0KLSAgICBSZWZQdHI8SVBD
OjpDb25uZWN0aW9uPiBtX2Zyb250ZW5kQ29ubmVjdGlvbjsKLSAgICBWZWN0b3I8RnVuY3Rpb248
dm9pZCgpPj4gbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zOwotCi0gICAgYm9vbCBtX2F0dGFj
aGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcHJldmlvdXNDYW5BdHRhY2ggeyBmYWxzZSB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGRhZjc0YjVlNmIwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvciB7Ci0gICAgU2hvdygpCi0g
ICAgQ2xvc2UoKQotCi0gICAgU2V0QXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkKLQotICAgIFNob3dD
b25zb2xlKCkKLSAgICBTaG93UmVzb3VyY2VzKCkKLQotICAgIFNob3dNYWluUmVzb3VyY2VGb3JG
cmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJZGVudGlmaWVyKQotCi0gICAgT3Bl
bkluTmV3VGFiKFN0cmluZyB1cmwpCi0KLSAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQotICAgIFN0
b3BQYWdlUHJvZmlsaW5nKCkKLQotICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi0gICAgU3Rv
cEVsZW1lbnRTZWxlY3Rpb24oKQotCi0gICAgU2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0
YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg5ZTk4
MjVhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotCi0jaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6
OldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdlJiBwYWdlKQotICAgIDog
bV9wYWdlKHBhZ2UpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRj
aGVyOjpyZXNldCgpCi17Ci0gICAgbV9mcm9udGVuZExvYWRlZCA9IGZhbHNlOwotICAgIG1fc3Vz
cGVuZGVkID0gZmFsc2U7Ci0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZnJvbnRlbmRMb2FkZWQoKQotewotICAgIG1fZnJv
bnRlbmRMb2FkZWQgPSB0cnVlOwotCi0gICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCi17
Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmRMb2FkZWQpOwotICAgIEFTU0VSVCghbV9zdXNwZW5kZWQp
OwotICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IHRy
dWU7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3Bl
bmQoKQotewotICAgIEFTU0VSVChtX3N1c3BlbmRlZCk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZh
bHNlOwotCi0gICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZCkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmco
Ikluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAg
ICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5k
QVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KQotewotICAgIGV2YWx1
YXRlT3JRdWV1ZUV4cHJlc3Npb24obWFrZVN0cmluZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlz
cGF0Y2goW1wiIiwgY29tbWFuZCwgIlwiLCAiLCBhcmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIs
ICJdKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRp
c3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBldmFsdWF0
ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3Bh
dGNoTWVzc2FnZUFzeW5jKCIsIG1lc3NhZ2UsICIpIikpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24pCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3Vz
cGVuZGVkKSB7Ci0gICAgICAgIG1fcXVldWUuYXBwZW5kKGV4cHJlc3Npb24pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fcXVldWUuaXNFbXB0eSgpKTsKLSAgICBBU1NF
UlQoIW1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsK
LSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlw
dElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpCi17Ci0gICAg
aWYgKG1fcXVldWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiA6IG1fcXVldWUpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhZ2Uu
Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7Ci0gICAgICAgIG1f
cGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3Jp
bmdFeGNlcHRpb24oZXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAgbV9xdWV1ZS5jbGVhcigpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzQyNGUyZDg3Li4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRj
aGVyIHsKLXB1YmxpYzoKLSAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2Vi
UGFnZSYpOwotCi0gICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsK
LQotICAgIHZvaWQgc3VzcGVuZCgpOwotICAgIHZvaWQgdW5zdXNwZW5kKCk7Ci0KLSAgICB2b2lk
IGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpOwotICAgIHZvaWQgZGlzcGF0
Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7
Ci0gICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFy
Z3VtZW50KTsKLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotCi0g
ICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIERlcXVlPFN0cmluZz4gbV9xdWV1ZTsKLSAgICBib29s
IG1fZnJvbnRlbmRMb2FkZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxz
ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDE3ODUxZjY4
Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCIKLQotI2luY2x1ZGUgIldlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZN
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21tb25WTS5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVJlZjxXZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyPiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpjcmVhdGUoKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIp
OwotfQotCi1XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyKCkKLSAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5h
cHBsZS5XZWJLaXQuV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlciIpKQotewotfQotCi1X
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjp+V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlcigpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6
aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAg
IGNvbm5lY3Rpb24tPmFkZFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVl
LmdldCgpLCB0aGlzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
Ojpub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpCi17Ci0gICAgLy8gSWYgdGhlIHdlYiBwcm9jZXNz
IGhhcyBub3QgYmVlbiBmdWxseSBpbml0aWFsaXplZCB5ZXQsIHRoZW4gdGhlcmUKLSAgICAvLyBp
cyBubyBWTSB0byBiZSBub3RpZmllZCBhbmQgdGh1cyBubyBpbmZpbml0ZSBsb29wIHRvIGJyZWFr
LiBCYWlsIG91dC4KLSAgICBpZiAoIVdlYkNvcmU6OmNvbW1vblZNT3JOdWxsKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEpTQzo6Vk0mIHZtID0gV2ViQ29yZTo6Y29tbW9uVk0oKTsKLSAgICB2
bS5ub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDhmNmJkMDIwYTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3Jr
UXVldWVNZXNzYWdlUmVjZWl2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gY3JlYXRlKCk7Ci0gICAgfldlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIoKTsKLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQ
Qzo6Q29ubmVjdGlvbiopOwotICAgIAotcHJpdmF0ZToKLSAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyKCk7Ci0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dl
ckJyZWFrKCk7Ci0gICAgCi0gICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzBlNTJiNzNi
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAg
LTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1t
ZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIHsKLSAgICBOb3RpZnlO
ZWVkRGVidWdnZXJCcmVhaygpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFmYWE2ZjZlZGU1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvclVJLmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotUmVmPFdlYkluc3BlY3RvclVJPiBXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBh
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yVUkocGFnZSkpOwot
fQotCi1XZWJJbnNwZWN0b3JVSTo6V2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKLSAgICAs
IG1fZGVidWdnYWJsZUluZm8oRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKQotewotICAgIFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SW5zcGVjdG9yQWRkaXRp
b25zRW5hYmxlZCh0cnVlKTsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLnNldEltYWdlQml0bWFwRW5hYmxlZCh0cnVlKTsKLSNpZiBFTkFCTEUoV0VCR0wyKQot
ICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViR0wyRW5h
YmxlZCh0cnVlKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjplc3RhYmxpc2hD
b25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIs
IGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYgZGVidWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0
LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCi17Ci0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
ZmllciA9IGluc3BlY3RlZFBhZ2VJZGVudGlmaWVyOwotICAgIG1fZGVidWdnYWJsZUluZm8gPSBk
ZWJ1Z2dhYmxlSW5mbzsKLSAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsKLSAgICBtX2luc3Bl
Y3Rpb25MZXZlbCA9IGluc3BlY3Rpb25MZXZlbDsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLnJlc2V0KCk7Ci0KLSAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9ICZtX3BhZ2UuY29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5z
ZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlzKTsKLQotICAgIHVwZGF0ZUNvbm5lY3Rpb24o
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6dXBkYXRlQ29ubmVjdGlvbigpCi17Ci0gICAg
aWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+
aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAg
ICB9Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKLSAgICBJUEM6OkNvbm5lY3Rpb246
OlNvY2tldFBhaXIgc29ja2V0UGFpciA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1D
b25uZWN0aW9uKCk7Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25J
ZGVudGlmaWVyKHNvY2tldFBhaXIuc2VydmVyKTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVj
dGlvbkNsaWVudFBvcnQoc29ja2V0UGFpci5jbGllbnQpOwotI2VsaWYgT1MoREFSV0lOKQotICAg
IG1hY2hfcG9ydF90IGxpc3RlbmluZ1BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICBpZiAobWFj
aF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZF
LCAmbGlzdGVuaW5nUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICBDUkFTSCgpOwotCi0g
ICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5n
UG9ydCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpICE9IEtFUk5fU1VD
Q0VTUykKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBjb25uZWN0aW9uSWRlbnRpZmllcihsaXN0ZW5pbmdQb3J0KTsKLSAgICBJUEM6OkF0dGFjaG1l
bnQgY29ubmVjdGlvbkNsaWVudFBvcnQobGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZF
X1NFTkQpOwotI2VsaWYgUExBVEZPUk0oV0lOKQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllciBjb25uZWN0aW9uSWRlbnRpZmllciwgY29ubkNsaWVudDsKLSAgICBJUEM6OkNvbm5lY3Rp
b246OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKGNvbm5lY3Rpb25JZGVudGlmaWVy
LCBjb25uQ2xpZW50KTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQo
Y29ubkNsaWVudCk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwot
I2VuZGlmCi0KLSNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoREFSV0lOKSB8fCBQ
TEFURk9STShXSU4pCi0gICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6
Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAg
IG1fYmFja2VuZENvbm5lY3Rpb24tPm9wZW4oKTsKLSNlbmRpZgotCi0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uQ2xpZW50UG9y
dCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJ
Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAg
ICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5k
SG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFn
ZSgpKTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmZyb250
ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRl
ZCgpOwotCi0gICAgLy8gVGVsbCB0aGUgbmV3IGZyb250ZW5kIGFib3V0IHRoZSBjdXJyZW50IGRv
Y2sgc3RhdGUuIElmIHRoZSB3aW5kb3cgb2JqZWN0Ci0gICAgLy8gY2xlYXJlZCBkdWUgdG8gYSBy
ZWxvYWQsIHRoZSBkb2NrIHN0YXRlIHdvbid0IGJlIHJlc2VudCBmcm9tIFVJUHJvY2Vzcy4KLSAg
ICBzZXREb2NraW5nVW5hdmFpbGFibGUobV9kb2NraW5nVW5hdmFpbGFibGUpOwotICAgIHNldERv
Y2tTaWRlKG1fZG9ja1NpZGUpOwotICAgIHNldElzVmlzaWJsZShtX2lzVmlzaWJsZSk7Ci0KLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7Ci0KLSAgICBicmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkK
LXsKLSAgICBGbG9hdFJlY3QgZnJhbWVSZWN0ID0gbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgp
LndpbmRvd1JlY3QoKTsKLSAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UuY29y
ZVBhZ2UoKS0+Y2hyb21lKCkuc2V0V2luZG93UmVjdChmcmFtZVJlY3QpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0K
LSAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2JhY2tlbmRDb25uZWN0
aW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRy
OwotICAgIH0KLQotICAgIGlmIChtX2Zyb250ZW5kQ29udHJvbGxlcikgewotICAgICAgICBtX2Zy
b250ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7Ci0g
ICAgICAgIG1fZnJvbnRlbmRDb250cm9sbGVyID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAo
bV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50
KCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyID0geyB9OwotICAgIG1fdW5kZXJU
ZXN0ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCi17Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJlb3BlbigpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9pbnNwZWN0ZWRQYWdl
SWRlbnRpZmllcik7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24g
V2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1Np
ZGUgc2lkZSkKLXsKLSAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCk7Ci0gICAgc3dpdGNoIChzaWRlKSB7Ci0gICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0g
ICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6Ci0gICAgICAgIHdl
YlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIERvY2tTaWRlOjpMZWZ0OgotICAgICAgICB3ZWJQcm9j
ZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpBdHRhY2hMZWZ0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIERvY2tTaWRlOjpCb3R0b206Ci0gICAgICAgIHdlYlByb2Nlc3Mu
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2Nr
U2lkZSBzaWRlKQotewotICAgIEFTQ0lJTGl0ZXJhbCBzaWRlU3RyaW5nIHsgQVNDSUlMaXRlcmFs
OjpudWxsKCkgfTsKLQotICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgRG9ja1NpZGU6OlVu
ZG9ja2VkOgotICAgICAgICBzaWRlU3RyaW5nID0gInVuZG9ja2VkIl9zOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgotICAgICAgICBzaWRlU3RyaW5nID0gInJp
Z2h0Il9zOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6Ci0gICAg
ICAgIHNpZGVTdHJpbmcgPSAibGVmdCJfczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERv
Y2tTaWRlOjpCb3R0b206Ci0gICAgICAgIHNpZGVTdHJpbmcgPSAiYm90dG9tIl9zOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2RvY2tTaWRlID0gc2lkZTsKLQotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja1NpZGUiX3MsIFN0cmluZyhz
aWRlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tpbmdVbmF2YWls
YWJsZShib29sIHVuYXZhaWxhYmxlKQotewotICAgIG1fZG9ja2luZ1VuYXZhaWxhYmxlID0gdW5h
dmFpbGFibGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQo
InNldERvY2tpbmdVbmF2YWlsYWJsZSJfcywgdW5hdmFpbGFibGUpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclVJOjpzZXRJc1Zpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIG1faXNWaXNpYmxl
ID0gdmlzaWJsZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFu
ZCgic2V0SXNWaXNpYmxlIl9zLCB2aXNpYmxlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hh
bmdlQXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVl
dFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwp
Ci17Ci0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29u
bmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpPcGVuSW5OZXdUYWIodXJsKSwg
MCk7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ0luc3BlY3RlZFBh
Z2VUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6c2F2ZShjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
QXMpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNv
bnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBXVEY6OlN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50KQotewotICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6SW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRl
KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVN
RVRSWSkKLWJvb2wgV2ViSW5zcGVjdG9yVUk6OnN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKQot
ewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5kaWFnbm9zdGljTG9n
Z2luZ0VuYWJsZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6bG9nRGlhZ25vc3RpY0V2
ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dDo6VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgp
LT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVl
RGljdGlvbmFyeShldmVudE5hbWUsICJXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNz
Il9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0g
ICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIg
YmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCi0gICAgQVNT
RVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKLSAgICBtX2Rp
YWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6c2hvd0NvbnNvbGUoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd0NvbnNvbGUiX3MpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclVJOjpzaG93UmVzb3VyY2VzKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5k
aXNwYXRjaENvbW1hbmQoInNob3dSZXNvdXJjZXMiX3MpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZp
ZXIpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93
TWFpblJlc291cmNlRm9yRnJhbWUiX3MsIGZyYW1lSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnN0YXJ0UGFnZVByb2ZpbGluZygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3Ms
IHRydWUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzdG9wUGFnZVByb2ZpbGluZygpCi17
Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGlu
ZVByb2ZpbGluZ0VuYWJsZWQiX3MsIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
c3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5k
aXNwYXRjaENvbW1hbmQoInNldEVsZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCB0cnVlKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RvcEVsZW1lbnRTZWxlY3Rpb24oKQotewotICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlv
bkVuYWJsZWQiX3MsIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShj
b25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRj
aENvbW1hbmQoInNhdmVkVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpk
aWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1l
c3NhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpwYWdlUGF1c2VkKCkKLXsKLSAgICBt
X2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5zdXNwZW5kKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6OnBhZ2VVbnBhdXNlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIudW5zdXNw
ZW5kKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOwotfQot
Ci1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKLX0KLQotI2lmICFQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi1ib29sIFdl
Ykluc3BlY3RvclVJOjpjYW5TYXZlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotfQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYm
ICFQTEFURk9STShXSU4pCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYzOWYyMWM5YjYyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2Fi
bGVUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUlu
Zm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBX
ZWJQYWdlOwotCi1jbGFzcyBXZWJJbnNwZWN0b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYklu
c3BlY3RvclVJPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdl
Ykluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYpOwotCi0gICAgLy8gSW1wbGVtZW50ZWQgaW4g
Z2VuZXJhdGVkIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyAvKiBEbyBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBh
Z2UgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkIGFuZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4g
Ki8gfQotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBj
bG9zZVdpbmRvdygpOyB9Ci0KLSAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2Fn
ZXMKLSAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBp
bnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1
bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7Ci0gICAgdm9pZCB1cGRhdGVDb25u
ZWN0aW9uKCk7Ci0KLSAgICB2b2lkIHNob3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3Vy
Y2VzKCk7Ci0KLSAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcm
IGZyYW1lSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAg
IHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKLQotICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0
aW9uKCk7Ci0gICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOwotCi0gICAgdm9pZCBhdHRh
Y2hlZEJvdHRvbSgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkJvdHRvbSk7IH0KLSAgICB2b2lk
IGF0dGFjaGVkUmlnaHQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpSaWdodCk7IH0KLSAgICB2
b2lkIGF0dGFjaGVkTGVmdCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9Ci0gICAg
dm9pZCBkZXRhY2hlZCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsgfQotCi0g
ICAgdm9pZCBzZXREb2NrU2lkZShEb2NrU2lkZSk7Ci0gICAgdm9pZCBzZXREb2NraW5nVW5hdmFp
bGFibGUoYm9vbCk7Ci0KLSAgICB2b2lkIHNldElzVmlzaWJsZShib29sKTsKLQotICAgIHZvaWQg
ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3Ry
aW5nJiB1cmwpOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
Jik7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhbGlhYmxlKTsKLSNlbmRpZgotCi0gICAgLy8g
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKLSAgICB2b2lkIHdpbmRvd09iamVjdENs
ZWFyZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NV
UkwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1
Z2dhYmxlVHlwZTo6V2ViUGFnZTsgfQotICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9pbnNwZWN0aW9uTGV2ZWw7IH0KLQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3Jl
OjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24oKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tT
aWRlKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJp
bmcmIHVybCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRl
bnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNv
bnRlbnQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxF
TUVUUlkpCi0gICAgYm9vbCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7IH0KLSAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVu
dChjb25zdCBXVEY6OlN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIHBhZ2VQYXVzZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92
ZXJyaWRlOwotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5k
ZXJUZXN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFn
ZSYpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsKLSAgICBSZWZQdHI8SVBDOjpD
b25uZWN0aW9uPiBtX2JhY2tlbmRDb25uZWN0aW9uOwotCi0gICAgLy8gS2VlcCBhIHBvaW50ZXIg
dG8gdGhlIGZyb250ZW5kJ3MgaW5zcGVjdG9yIGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcg
dGhyb3VnaAotICAgIC8vIGNvcmVQYWdlKCksIHNpbmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRo
ZSBmcm9udGVuZCdzIHBhZ2UgaGFzIHN0YXJ0ZWQgZGVzdHJ1Y3Rpb24uCi0gICAgV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlciogbV9mcm9udGVuZENvbnRyb2xsZXIgeyBudWxscHRyIH07Ci0K
LSAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVyIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7Ci0g
ICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNlIH07Ci0gICAgRGVidWdnYWJsZUluZm9EYXRhIG1f
ZGVidWdnYWJsZUluZm87Ci0gICAgYm9vbCBtX2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9U
RUxFTUVUUlkpCi0gICAgYm9vbCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2Ug
fTsKLSNlbmRpZgotCi0gICAgRG9ja1NpZGUgbV9kb2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tl
ZCB9OwotICAgIHVuc2lnbmVkIG1faW5zcGVjdGlvbkxldmVsIHsgMSB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NGYxMzg1ZDQ4OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVs
bApAQCAtMSw1MyArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJIHsKLSAgICBFc3RhYmxpc2hDb25u
ZWN0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllciwgc3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBi
b29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotICAgIFVwZGF0ZUNvbm5l
Y3Rpb24oKQotCi0gICAgQXR0YWNoZWRCb3R0b20oKQotICAgIEF0dGFjaGVkUmlnaHQoKQotICAg
IEF0dGFjaGVkTGVmdCgpCi0gICAgRGV0YWNoZWQoKQotICAgIFNldERvY2tpbmdVbmF2YWlsYWJs
ZShib29sIHVuYXZhaWxhYmxlKQotICAgIFNldElzVmlzaWJsZShib29sIHZpc2libGUpCi0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLSNlbmRpZgotCi0gICAgU2hvd0NvbnNvbGUoKQotICAg
IFNob3dSZXNvdXJjZXMoKQotCi0gICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmluZyBm
cmFtZUlkZW50aWZpZXIpCi0KLSAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdl
UHJvZmlsaW5nKCkKLQotICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1l
bnRTZWxlY3Rpb24oKQotCi0gICAgRGlkU2F2ZShTdHJpbmcgdXJsKQotICAgIERpZEFwcGVuZChT
dHJpbmcgdXJsKQotCi0gICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcw
ZjZmZDUyMDkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0KLSNp
bmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldDo6V2ViUGFnZUlu
c3BlY3RvclRhcmdldChXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0K
LVN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdG9UYXJnZXRJRChtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAgICBpZiAobV9jaGFubmVsKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jaGFubmVsID0gbWFrZVVuaXF1ZTxXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsPihtX3BhZ2UsIGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5
cGUpOwotICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7Ci19
Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCgpCi17Ci0gICAgaWYg
KCFtX2NoYW5uZWwpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkp
Ci0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29u
bmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOwotICAgIG1fY2hhbm5lbC5yZXNldCgpOwotfQotCi12
b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAg
ICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNz
YWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRh
cmdldDo6dG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQpCi17Ci0gICAg
cmV0dXJuIG1ha2VTdHJpbmcoInBhZ2UtIiwgcGFnZUlELnRvVUludDY0KCkpOwotfQotCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Y2JkN2ZhZDVmZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFn
ZTsKLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7Ci0KLWNsYXNz
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQpOwotcHVibGljOgotICAgIGV4cGxpY2l0
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYpOwotICAgIH5XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0KCkgPSBkZWZhdWx0OwotCi0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBl
IHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGU6OlBhZ2U7IH0KLQotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAg
c3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKLQotcHJp
dmF0ZToKLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTAxN2M0ZWRhZi4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBh
Z2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fcGFnZVRhcmdldChwYWdlKQotewotICAg
IC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRhcmdldCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2Vi
UGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlzIGZvciB1cy4KLSAgICBtX3RhcmdldHMuc2V0KG1f
cGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZtX3BhZ2VUYXJnZXQpOwotfQotCi1XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
KCkKLXsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFy
Z2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyKCksICZ0YXJnZXQpOwotICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBt
X3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQo
dGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0LnR5cGUoKSkpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXQmIHRhcmdldCkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVu
dGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1v
dmUgdGhlIG1haW4gdGFyZ2V0LiIpOwotCi0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpKSk7Ci0K
LSAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFy
Z2V0SWQpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQt
PmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQp
Ci17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAo
IXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Ci19
Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKG1lc3NhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YzkzMWRhZDFjOS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LWNsYXNzIEluc3BlY3RvclRhcmdldDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlcihXZWJQYWdlJik7Ci0gICAgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIGFkZFRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldCYpOwotICAgIHZvaWQgcmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
Jik7Ci0KLSAgICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKLSAgICB2b2lkIGRp
c2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5k
TWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0IG1fcGFnZVRhcmdldDsKLSAgICBIYXNoTWFwPFN0cmluZywgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQqPiBtX3RhcmdldHM7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjVmNzEzNzMzLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQs
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlw
ZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKLSAgICAs
IG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE4NGFj
NWJkYTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKLXB1YmxpYzoKLSAg
ICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBT
dHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5
cGUpOwotICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwo
KSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0gICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9Ci0gICAgdm9p
ZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsK
LQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBTdHJpbmcgbV90YXJnZXRJZDsKLSAgICBJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYjRmOTdmZThkMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKLSNp
bmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2lu
Y2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1ib29sIFdlYkluc3BlY3RvclVJOjpjYW5TYXZlKCkK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6
ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9v
cmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmlu
Z3MuanMiKTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJp
bmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Vi
a2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMi
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNTVmM2Q1OGExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KKysr
IC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIldlYkluc3BlY3RvclVJLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJ
bnNwZWN0b3JVSS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBTdHJpbmcgd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsK
LSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAi
Y29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVz
b3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJdOwotICAgIGlmICghcGF0aCkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIAotICAgIHJldHVybiBbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIHJl
dHVybiB3ZWJJbnNwZWN0b3JVSUxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLX0KLQotU3RyaW5nIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388644</attachid>
            <date>2020-01-23 19:03:27 -0800</date>
            <delta_ts>2020-01-23 20:24:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>757413</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLmQ4ZGMwZTE2ZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg4IEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFr
ZToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5j
bWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0
OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0
b3JUYXJnZXRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yVGFyZ2V0UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3RvclRhcmdldFByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAg
ICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xp
Yi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3Bw
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xp
ZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJL
aXRJbnNwZWN0b3JXaW5kb3cuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAuCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
aC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdo
dFZpZXcubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJ
bnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2du
aXplci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
TWFjLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5TWFjLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFj
L1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmguCisgICAgICAgICogVUlQ
cm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbTogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9s
bGVyLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tX
ZWJWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNw
ZWN0b3JXS1dlYlZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0lu
c3BlY3RvcldLV2ViVmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
aC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eVdpbi5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVj
dG9yUHJveHlXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1dlYkluc3BlY3RvclByb3h5V2luLmNwcC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVj
dG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMu
aW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUku
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdl
Ykluc3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2Vi
SW5zcGVjdG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbi4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oLgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwLgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5o
LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5o
LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwLgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2Fn
ZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmlu
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yVUkubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVUkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvclVJLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVUkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yVUkuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3Bw
LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNw
cC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
Ykluc3BlY3RvclVJR3RrLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMv
V2ViSW5zcGVjdG9yVUlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSUF0dGFjaG1lbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld1Rlc3RpbmcubW06CisgICAgICAgIEFkZCBzb21lIG1pc3NpbmcgaW5jbHVkZXMuCisK
IDIwMjAtMDEtMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2lPU10gUmVtb3ZlIHRoZSBJT0hJREV2ZW50U2VydmljZUZhc3RQYXRoVXNlckNsaWVudCBJ
T0tpdCBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAuLjRkZDk5YTA4YjA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdlYktpdF9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Rvd25sb2FkcyIKICAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvR2FtZXBhZCIKICAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvR1BVIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3IiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVyIgogICAgICIke1dFQktJVF9ESVJ9
L1VJUHJvY2Vzcy9OZXR3b3JrIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scyIKQEAgLTg1LDYgKzg2LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYyIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTSIKKyAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3RvciIKICAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL0xhdW5jaGluZyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL01lZGlh
Q2FjaGUiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbSIKQEAgLTE0
OCwxMiArMTUwLDEwIEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKICAgICBTaGFyZWQv
UGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSAgICBVSVByb2Nlc3MvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9y
ZS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgogICAgIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgot
ICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLm1lc3NhZ2VzLmlu
CkBAIC0xNjMsNiArMTYzLDkgQEAgc2V0KFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAg
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAKKyAgICBVSVBy
b2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisgICAg
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorCiAgICAg
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgogCiAgICAg
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCkBAIC0xNzks
NiArMTgyLDExIEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKIAogICAgIFdlYlByb2Nl
c3MvR2VvbG9jYXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluCiAKKyAgICBX
ZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgorICAg
IFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgorICAgIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMu
aW4KKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgor
CiAgICAgV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9XZWJNRE5TUmVnaXN0ZXIubWVzc2FnZXMu
aW4KICAgICBXZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL1dlYlJUQ01vbml0b3IubWVzc2FnZXMu
aW4KICAgICBXZWJQcm9jZXNzL05ldHdvcmsvd2VicnRjL1dlYlJUQ1Jlc29sdmVyLm1lc3NhZ2Vz
LmluCkBAIC0yMDIsMTEgKzIxMCw3IEBAIHNldChXZWJLaXRfTUVTU0FHRVNfSU5fRklMRVMKIAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIubWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KLSAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgogCiAgICAgV2ViUHJvY2Vzcy9XZWJTdG9y
YWdlL1N0b3JhZ2VBcmVhTWFwLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggOTgwODFhYTZiMmMuLjZkY2JiMjM3NWVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QK
KysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC03
OSwxMSArNzksMTIgQEAgJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0NvY29hL1ZpZGVvRnVsbHNj
cmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vz
cy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lD
dXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVmlzaXRlZExpbmtTdG9yZS5tZXNzYWdlcy5pbgpA
QCAtOTEsNyArOTIsNiBAQCAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHkubWVzcwogJChQUk9KRUNUX0RJUikv
VUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KQEAgLTExMiw2
ICsxMTIsMTAgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJU
Q0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRj
L0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIu
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdl
Ykluc3BlY3RvclVJLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KKyQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
UmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTmV0
d29yay9XZWJTb2NrZXRDaGFubmVsLm1lc3NhZ2VzLmluCkBAIC0xMzMsMTMgKzEzNyw5IEBAICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9s
bGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdl
cy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3Rv
clVJLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dl
c3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIubWVzc2Fn
ZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVz
c2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlCmluZGV4IGMzNGFmNWNkM2ExLi44MTBlMGUxODMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMubWFrZQpAQCAtNTQsNiArNTQsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlBy
b2Nlc3MvR1BVL21lZGlhIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCisgICAgJChXZWJLaXQy
KS9XZWJQcm9jZXNzL0luc3BlY3RvciBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlh
Q2FjaGUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbSBcCiAgICAgJChX
ZWJLaXQyKS9XZWJQcm9jZXNzL05ldHdvcmsgXApAQCAtNzksNiArODAsNyBAQCBWUEFUSCA9IFwK
ICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9EYXRhYmFzZXMgXAogICAgICQoV2ViS2l0MikvVUlQ
cm9jZXNzL0Rvd25sb2FkcyBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvR1BVIFwKKyAgICAk
KFdlYktpdDIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNz
L01lZGlhU3RyZWFtIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrIFwKICAgICAk
KFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scyBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bUZUVy5jbWFrZQppbmRleCA3NjdkNmM5MjA3My4uODZkOGU5ZWZjNmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bUZUVy5jbWFrZQpAQCAtNDgsNiArNDgsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwog
CiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCiAKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAKKwogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJvY2Vzc0xh
dW5jaGVyV2luLmNwcAogCiAgICAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vic2l0ZURh
dGFTdG9yZUN1cmwuY3BwCkBAIC01Niw3ICs1OCw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAKICAgICBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJUHJvY2Vz
cy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdpbi5jcHAKLSAgICBVSVByb2Nlc3Mvd2luL1dlYklu
c3BlY3RvclByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNw
cAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCiAgICAgVUlQcm9j
ZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKQEAgLTY0LDYgKzY1LDggQEAgbGlzdChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvd2luL0lu
amVjdGVkQnVuZGxlV2luLmNwcAogCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYklu
c3BlY3RvclVJV2luLmNwcAorCiAgICAgV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlhS2V5
U3RvcmFnZU1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW5Ob25lLmNwcApAQCAtNzgsNyArODEsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRf
U09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCi0gICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2lu
L1dlYlBhZ2VXaW4uY3BwCiAKICAgICBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFpbldpbi5j
cHAKQEAgLTEwOSw2ICsxMTEsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwL3dpbiIKICAgICAiJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldCIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL3dp
biIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUGx1Z2lucy93aW4iCiAgICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS93aW4iCkBAIC0xODEsMTAgKzE4NSwxMCBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfTElCUkFSSUVTCiAKIGlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikKICAgICBsaXN0
KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAgVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXIuY3BwCisgICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0
L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAogCi0gICAgICAgIFVJUHJv
Y2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAgICAgIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcAogICAgICkKIAog
ICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCBlMGY5YTljZjQzYS4uYmIwNjc3YTZhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtMzk2LDYgKzM5Niw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJ
UkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9nbGliIgogICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ2xpYiIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ayIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUGx1Z2lucy9ndGsiCiAgICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL2dlb2NsdWUiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L2dsaWIiCkBAIC00MDcsNiArNDA5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9nbGliL0RPTSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTSIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsi
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3VuaXgiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMSIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL2d0ayIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4
IDFlM2Q3MGY5YjJmLi5iZTg2ZjczYjdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC01
NSw2ICs1NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vY29jb2EiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0NvY29hIgogICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24iCisgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0xhdW5jaGVy
L21hYyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlIgogICAg
ICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zIgpAQCAtODksNiAr
OTAsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbiIKICAgICAiJHtX
RUJLSVRfRElSfS9XZWJQcm9jZXNzL2NvY29hIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvbWFjIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYyIKICAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYSIKICAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMiCiAgICAg
IiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zL1BERiIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCmluZGV4IDBiMzdmNDcwYjM3Li45ZDhmN2I1YTZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCkBAIC00OCw2ICs0OCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAKIAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclBy
b3h5V2luLmNwcAorCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJX
aW4uY3BwCiAKICAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3Jl
Q3VybC5jcHAKQEAgLTU2LDcgKzU4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAog
ICAgIFVJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9X
ZWJDb250ZXh0TWVudVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCiAgICAg
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2lu
L1dlYlByb2Nlc3NQb29sV2luLmNwcApAQCAtNjQsNiArNjUsOCBAQCBsaXN0KEFQUEVORCBXZWJL
aXRfU09VUkNFUwogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRC
dW5kbGVXaW4uY3BwCiAKKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9y
VUlXaW4uY3BwCisKICAgICBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdl
TWFuYWdlci5jcHAKIAogICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpbk5vbmUuY3BwCkBAIC03Nyw3ICs4MCw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VT
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2lu
L1dlYkluc3BlY3RvclVJV2luLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFn
ZVdpbi5jcHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcApAQCAt
MTA4LDYgKzExMCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9jcHAvd2luIgogICAgICIke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9BUEkvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0IgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgogICAg
ICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKICAgICAiJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3Mvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL3dpbiIKQEAgLTE4MSwxMCArMTg1LDEwIEBAIGVuZGlmICgpCiAKIGlmIChFTkFC
TEVfUkVNT1RFX0lOU1BFQ1RPUikKICAgICBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAg
ICAgICBVSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAg
VUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCisgICAg
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
KyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmNwcAogCi0gICAgICAgIFVJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwCisgICAgICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5V2luLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNM
VURFX0RJUkVDVE9SSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAzZGEyODAwYzljNS4uZDdiZDE3YWZiN2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dApAQCAtMjY3LDEzICsyNjcsMTEgQEAgVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuY3BwCiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCiBVSVByb2Nlc3MvR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwCi1VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0
UHJveHkuY3BwCiBVSVByb2Nlc3MvTGVnYWN5R2xvYmFsU2V0dGluZ3MuY3BwCiBVSVByb2Nlc3Mv
UGFnZUxvYWRTdGF0ZS5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzQXNzZXJ0aW9uLmNwcAogVUlQcm9j
ZXNzL1Byb2Nlc3NUaHJvdHRsZXIuY3BwCiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHku
Y3BwCi1VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCiBVSVByb2Nlc3MvUmVz
cG9uc2l2ZW5lc3NUaW1lci5jcHAKIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKIFVJ
UHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwCkBAIC0zMDYsMTUgKzMwNCwxMSBAQCBVSVBy
b2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5LmNwcAogVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcAogVUlQcm9j
ZXNzL1dlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwCi1VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJv
eHkuY3BwCi1VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogVUlQcm9jZXNzL1dl
Yk5hdmlnYXRpb25TdGF0ZS5jcHAKIFVJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
clByb3h5LmNwcAotVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcAogVUlQcm9jZXNzL1dl
YlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAu
Y3BwCiBVSVByb2Nlc3MvV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNwcAotVUlQcm9jZXNz
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUHJlZmVy
ZW5jZXMuY3BwCkBAIC00MjYsNiArNDIwLDEzIEBAIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCiAKIFVJUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5LmNwcAogCitV
SVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorVUlQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yUHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0
aWxpdGllcy5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwCitV
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorCiBVSVBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQ
cm94eS5jcHAKIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbi5jcHAKIFVJ
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKQEAg
LTUxNyw2ICs1MTgsMTYgQEAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmNwcAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIEBuby11
bmlmeQogCitXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKK1dl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvckNsaWVudC5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JVSS5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
Y3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuY3BwCisKIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZpY2VTYW5kYm94
RXh0ZW5zaW9ucy5jcHAKIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyLmNwcAogCkBAIC01OTMsNyArNjA0LDYgQEAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNs
aWVudC5jcHAKLVdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNw
cAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRl
ci5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNw
cAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQu
Y3BwCkBAIC02MTAsMjMgKzYyMCwxNSBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
Y3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIu
Y3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwCiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
Q29udGV4dE1lbnUuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29va2llSmFyLmNwcAogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkRvY3VtZW50TG9hZGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKLVdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcAotV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKLVdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKLVdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAotV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAotV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJM
U2NoZW1lSGFuZGxlclByb3h5LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRh
c2tQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA2YThlMmU2OTA1Yy4uYzQxNzQ0
YTMyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTIyOSw3ICsyMjksNiBAQCBVSVByb2Nl
c3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL1dlYk1lZGlhU2Vz
c2lvbkZvY3VzTWFuYWdlckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJNZW1vcnlQcmVzc3VyZUhh
bmRsZXIuY3BwCiBVSVByb2Nlc3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQotVUlQ
cm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQogCiBVSVByb2Nlc3MvQVBJL0FQSVdl
YnNpdGVEYXRhUmVjb3JkLmNwcAogCkBAIC00MDIsNiArNDAxLDE0IEBAIFVJUHJvY2Vzcy9HYW1l
cGFkL2NvY29hL1VJR2FtZXBhZFByb3ZpZGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9HYW1lcGFkL2lv
cy9VSUdhbWVwYWRQcm92aWRlcklPUy5tbQogVUlQcm9jZXNzL0dhbWVwYWQvbWFjL1VJR2FtZXBh
ZFByb3ZpZGVyTWFjLm1tCiAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGln
aGxpZ2h0Vmlldy5tbQorVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIubW0KKworVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3Bl
Y3RvclByb3h5TWFjLm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdD
b250cm9sbGVyLm1tCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmll
dy5tbQorCiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLQWlyUGxheVJvdXRlUGlja2VyLm1tCiBVSVBy
b2Nlc3MvaW9zL2Zvcm1zL1dLRGF0ZVBpY2tlclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3Mv
aW9zL2Zvcm1zL1dLRmlsZVVwbG9hZFBhbmVsLm1tCkBAIC00NTEsNyArNDU4LDYgQEAgVUlQcm9j
ZXNzL2lvcy9XS0RyYXdpbmdWaWV3Lm1tCiBVSVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92
aWRlcklPUy5tbQogVUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2Vj
dXJpdHlPcmlnaW4ubW0KIFVJUHJvY2Vzcy9pb3MvV0tIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplci5tbQotVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJl
UmVjb2duaXplci5tbQogVUlQcm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3Iu
bW0KIFVJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLm1tCiBVSVByb2Nlc3Mv
aW9zL1dLUGFzc3dvcmRWaWV3Lm1tCkBAIC00NzEsNyArNDc3LDYgQEAgVUlQcm9jZXNzL21hYy9E
aXNwbGF5TGluay5jcHAKIFVJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5j
cHAKIFVJUHJvY2Vzcy9tYWMvTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAogVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQotVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmNwcAogVUlQcm9j
ZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJN
YWMubW0KQEAgLTQ4MiwxNSArNDg3LDEyIEBAIFVJUHJvY2Vzcy9tYWMvV2ViQ29sb3JQaWNrZXJN
YWMubW0KIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQogVUlQcm9jZXNz
L21hYy9XZWJDb29raWVNYW5hZ2VyUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9tYWMvV2ViRGF0YUxp
c3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLm1tCi1VSVByb2Nlc3MvbWFjL1dlYkluc3BlY3RvclBy
b3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQogVUlQcm9jZXNzL21h
Yy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlN
YWMubW0KIFVJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbQogVUlQcm9jZXNz
L21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvbWFjL1dLSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQotVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdD
b250cm9sbGVyLm1tCi1VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCiBVSVBy
b2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCiBVSVByb2Nlc3MvbWFjL1dLU2hhcmluZ1NlcnZp
Y2VQaWNrZXJEZWxlZ2F0ZS5tbQogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0K
QEAgLTU3Nyw2ICs1NzksOCBAQCBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tX
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCiAKIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCiAKK1dlYlByb2Nlc3MvSW5z
cGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQorCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUv
V2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL21hYy9OZXRzY2FwZVBsdWdpbk1hYy5tbQpAQCAtNjE4LDcgKzYyMiw2IEBAIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9EcmF3
aW5nQXJlYU1hYy5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGFnZUJhbm5lck1hYy5tbQog
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQot
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQogV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDFlZjcz
YmMyMTRjLi44NWFiMGEzZTJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RL
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yMTUsNiArMjE1LDEy
IEBAIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcAogCiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2VvbG9jYXRpb25Q
cm92aWRlci5jcHAKIAorVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAKKworVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKKwog
VUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAgQG5vLXVuaWZ5
CiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwIEBuby11bmlm
eQogCkBAIC0yMzAsNyArMjM2LDYgQEAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3VuaXgvV2Vic2l0
ZURhdGFTdG9yZVVuaXguY3BwCiAKIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5j
cHAgQG5vLXVuaWZ5CiAKLVVJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
IFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQb29sR0xpYi5jcHAKIFVJUHJvY2Vzcy9nbGliL1dl
YlByb2Nlc3NQcm94eUdMaWIuY3BwCiBVSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xp
Yi5jcHAgQG5vLXVuaWZ5CkBAIC0yNDgsNyArMjUzLDYgQEAgVUlQcm9jZXNzL2d0ay9LZXlCaW5k
aW5nVHJhbnNsYXRvci5jcHAKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyLmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFuZC5jcHAgQG5v
LXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAgQG5vLXVuaWZ5
Ci1VSVByb2Nlc3MvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcAogVUlQcm9jZXNz
L2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0
dXJlQ29udHJvbGxlckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdTbmFwc2hv
dFN0b3JlR3RrLmNwcApAQCAtMjU2LDggKzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENv
bXBvc2l0b3IuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5j
cHAKIFVJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9n
dGsvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duR3RrLmNwcAotVUlQcm9jZXNzL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKLVVJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2lu
ZG93LmNwcAogVUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIEBuby11bmlmeQogVUlQ
cm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1dlYlBv
cHVwTWVudVByb3h5R3RrLmNwcApAQCAtMzkyLDYgKzM5NCw4IEBAIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuY3BwCiAKIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvZ2xpYi9JbmplY3RlZEJ1bmRsZUdsaWIuY3BwCiAKK1dlYlByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKKwogV2ViUHJvY2Vzcy9NZWRp
YUNhY2hlL1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKIFdlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS91bml4L05ldHNjYXBlUGx1Z2luVW5peC5jcHAgQG5vLXVuaWZ5CkBAIC00MjMs
NyArNDI3LDYgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVy
LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VXYXlsYW5kLmNw
cAogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VYMTEuY3BwIEBuby11
bmlmeQogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAKLVdlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlBhZ2VHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0
aW9uR3RrLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
QXR0YWNobWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQu
aAppbmRleCA0M2E0N2RkN2QwYS4uMmUwNjQ5YThkZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBPQkpDX0NMQVNTIE5TRmlsZVdyYXBwZXI7CitPQkpDX0NM
QVNTIE5TU3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
VGVzdGluZy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdU
ZXN0aW5nLm1tCmluZGV4IGZjNGQ4NTZmMDJlLi5lZDU5ODgxYzViOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KQEAg
LTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIldlYlZpZXdJbXBsLmgiCiAjaW1wb3J0ICJfV0tGcmFt
ZUhhbmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIgorI2lt
cG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYkNv
cmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42OTI4Y2EyZmJmYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94
eS5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFy
Z2V0UHJveHkuaCIKKworI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIK
KyNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJn
ZXRQcm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2Us
IGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0
eXBlKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5PihwYWdl
LCB0YXJnZXRJZCwgdHlwZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQ
cm94eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYg
cHJvdmlzaW9uYWxQYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldFR5cGUgdHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdl
dFByb3h5OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5cGUpOwor
ICAgIHRhcmdldC0+bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNpb25hbFBh
Z2UpOworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKK0luc3BlY3RvclRhcmdldFByb3h5OjpJbnNw
ZWN0b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0
SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorICAgIDogbV9wYWdlKHBh
Z2UpCisgICAgLCBtX2lkZW50aWZpZXIodGFyZ2V0SWQpCisgICAgLCBtX3R5cGUodHlwZSkKK3sK
K30KKwordm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCit7CisgICAgaWYgKG1f
cHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5
cGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5l
Y3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworfQorCit2b2lkIElu
c3BlY3RvclRhcmdldFByb3h5OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoaXNQYXVzZWQoKSkK
KyAgICAgICAgcmVzdW1lKCk7CisKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAg
ICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJ
bnNwZWN0b3IoaWRlbnRpZmllcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOworfQorCit2
b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAg
ICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2Fn
ZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAg
bV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5k
KGlkZW50aWZpZXIoKSwgbWVzc2FnZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5
OjpkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpCit7CisgICAgbV9wcm92aXNpb25hbFBhZ2Ug
PSBudWxscHRyOworfQorCitib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hMjIzOWNlYzhlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQcm92aXNpb25hbFBhZ2VQcm94eTsKK2NsYXNz
IFdlYlBhZ2VQcm94eTsKKworLy8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJbnNwZWN0b3JU
YXJnZXQgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBzaW5jZQorLy8g
YW55IHRhcmdldCAtPiBmcm9udGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUgV2Vi
UGFnZVByb3h5IHdpdGggYSB0YXJnZXRJZC4KKworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0UHJveHkg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdl
dFByb3h5KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRh
cmdldFByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwor
ICAgIEluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgfkluc3BlY3RvclRh
cmdldFByb3h5KCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRU
eXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBTdHJpbmcgaWRl
bnRpZmllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgdm9p
ZCBkaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOworICAgIGJvb2wgaXNQcm92aXNpb25hbCgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAg
ICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlw
ZSBtX3R5cGU7CisgICAgV2Vha1B0cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9wcm92aXNpb25h
bFBhZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTkyYzI5ZjQxOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIK
KworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlv
bi5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5KCkKKyAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5m
bzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCit7Cit9CisKK1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQoreworICAgIEFTU0VS
VCghbV9pbnNwZWN0b3JQYWdlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
aW52YWxpZGF0ZSgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUoYm9vbCBhdmFpbGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisg
ICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5z
cGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXZhaWxh
YmxlKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKFJl
ZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25zdCBTdHJpbmcmIGJh
Y2tlbmRDb21tYW5kc1VSTCkKK3sKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
KworICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBt
X2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUo
bV9kZWJ1Z2dhYmxlSW5mby0+ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tlbmRDb21tYW5kc1VS
TCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQoreworICAgIGNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJv
bUNyYXNoKCkKK3sKKyAgICAvLyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1c3QgY2xvc2Vk
LCBzbyBjbGllbnRzIGFyZSBpbmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4KKyAgICBmcm9u
dGVuZERpZENsb3NlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3co
KQoreworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNl
bmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQoreworICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5jbG9zZUZyb21Gcm9udGVuZCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKK3sK
KyAgICBBU1NFUlQoIW1fYmFja2VuZENvbW1hbmRzVVJMLmlzRW1wdHkoKSk7CisKKyAgICBjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIGxvYWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5
UmVmKCksIG1fYmFja2VuZENvbW1hbmRzVVJMKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cmVzZXRTdGF0ZSgpCit7CisgICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgcGxh
dGZvcm1CcmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIHBsYXRmb3Jt
U2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxv
Zyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3Jt
QXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcGxh
dGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsK
K30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYgdXJsKQoreworICAgIHBsYXRmb3JtT3BlbkluTmV3VGFiKHVybCk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
ZXJ0aWZpY2F0ZUluZm8pOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5k
TWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKKworICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOwor
CisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICgh
bV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOworCisgICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKKwor
ICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisKKyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCk7Cit9CisKKyNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8
ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKK1dl
YlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0
U3RhdGUoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdU
b0Zyb250KCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hl
ZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlm
aWNhdGVJbmZvJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkgeyB9CisjZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmFiNThmOGNlMDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQor
T0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlPYmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNwYWNlIEFQSSB7
CitjbGFzcyBEZWJ1Z2dhYmxlSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlZpZXc7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJv
bnRlbmQoKSA9IDA7Cit9OworCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkoKSk7CisgICAgfQorCisgICAgflJlbW90ZVdlYkluc3BlY3RvclBy
b3h5KCk7CisKKyAgICB2b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBib29sIGlzVW5kZXJUZXN0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dp
bmdBdmFpbGFibGUoYm9vbCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQg
bG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29t
bWFuZHNVUkwpOworICAgIHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOworICAgIHZvaWQgc2hvdygp
OworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyBy
ZXR1cm4gbV93aW5kb3cuZ2V0KCk7IH0KKyAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsK
KworICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zaGVldFJlY3Q7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQg
dXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmluZyYpOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU5fQ0FJUk8pCisgICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJFU1VMVCBvbkNs
b3NlKCk7CisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQs
IFdQQVJBTSwgTFBBUkFNKTsKKyNlbmRpZgorCisgICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOwor
Citwcml2YXRlOgorICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eSBtZXNzYWdlcy4KKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICB2b2lk
IHJlb3BlbigpOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250
KCk7CisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYg
Y29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lk
IGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwor
ICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZv
aWQgc3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5n
JiB1cmwpOworICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKKworICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAg
dm9pZCBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgLy8gUGxhdGZvcm0gaW1w
bGVtZW50YXRpb25zLgorICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1C
cmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3Jj
ZVNhdmVBcyk7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93
RHJhZygpOworICAgIHZvaWQgcGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwp
OworICAgIHZvaWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJik7CisKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGll
bnQgeyBudWxscHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxs
cHRyIH07CisKKyAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsK
KyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsK
KyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxXS1JlbW90
ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7Cisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworI2VuZGlmCisjaWYgUExBVEZPUk0o
R1RLKQorICAgIEd0a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdl
dCogbV93aW5kb3cgeyBudWxscHRyIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8p
CisgICAgSFdORCBtX2Zyb250ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZp
ZXc7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iZTA5MWI3OGZiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAt
MCwwICsxLDQwIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21l
c3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclByb3h5IHsKKyAgICBGcm9udGVuZERpZENsb3Nl
KCkKKyAgICBSZW9wZW4oKQorICAgIFJlc2V0U3RhdGUoKQorICAgIEJyaW5nVG9Gcm9udCgpCisK
KyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJp
bmcgY29udGVudCkKKworICAgIFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkK
KworICAgIFN0YXJ0V2luZG93RHJhZygpCisKKyAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkK
KyAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRl
SW5mbykKKworICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIzZDcwNWU4
M2U3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclByb3h5LmNwcApAQCAtMCwwICsxLDc4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVk
ZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQVBJVUlDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkZyYW1l
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYklu
c3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQ
cmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29k
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CisKKyNpZiBQTEFURk9STShHVEsp
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCB1bnNpZ25lZCBX
ZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOworY29uc3QgdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7CisKK2NvbnN0
IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAxMDAwOwor
Y29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2
NTA7CisKK1dlYkluc3BlY3RvclByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkq
IGluc3BlY3RlZFBhZ2UpCisjaWYgUExBVEZPUk0oTUFDKQorICAgIDogbV9jbG9zZUZyb250ZW5k
QWZ0ZXJJbmFjdGl2aXR5VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViSW5zcGVjdG9y
UHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQorI2VuZGlmCit7
CisgICAgaWYgKGluc3BlY3RlZFBhZ2UgJiYgaW5zcGVjdGVkUGFnZS0+aGFzUnVubmluZ1Byb2Nl
c3MoKSkgeworICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOworICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFn
ZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3RvclByb3h5Ojp+
V2ViSW5zcGVjdG9yUHJveHkoKQoreworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdGlvbkxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yTGV2ZWxGb3JQ
YWdlKGluc3BlY3RlZFBhZ2UoKSk7Cit9CisKK1dlYlByZWZlcmVuY2VzJiBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9p
bnNwZWN0b3JQYWdlKTsKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAoKS5w
cmVmZXJlbmNlcygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkK
K3sKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwor
CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICBwbGF0Zm9ybUludmFsaWRh
dGUoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdl
VG9Gcm9udGVuZChtZXNzYWdlKSk7Cit9CisKKy8vIFB1YmxpYyBBUElzCitib29sIFdlYkluc3Bl
Y3RvclByb3h5Ojppc0Zyb250KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvd01lc3NhZ2VTZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7CisgICAgbV9pZ25v
cmVGaXJzdEJyaW5nVG9Gcm9udCA9IHRydWU7CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsK
KworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaXNDb25uZWN0ZWQoKSkgeworICAgICAgICBi
cmluZ1RvRnJvbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbm5lY3QoKTsK
KworICAgIC8vIERvbid0IGlnbm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNvIGl0IG9wZW5z
IHRoZSBJbnNwZWN0b3IuCisgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpoaWRlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKwor
ICAgIHBsYXRmb3JtSGlkZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZSgp
Cit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKKwor
ICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmNsb3NlRm9yQ3Jhc2goKQoreworICAgIGNsb3NlKCk7CisKKyAgICBwbGF0Zm9ybURp
ZENsb3NlRm9yQ3Jhc2goKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkK
K3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xv
c2UoKTsKKyAgICBzaG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3Rh
dGUoKQoreworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5z
cGVjdG9yQXR0YWNoZWRXaWR0aCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRl
bGV0ZUluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuZGVsZXRlSW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworCisgICAgcGxhdGZv
cm1SZXNldFN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0KCkKK3sK
KyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlKSB7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7Cisg
ICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkqIGluc3Bl
Y3RlZFBhZ2UpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOworICAgIEFTU0VSVChp
bnNwZWN0ZWRQYWdlKTsKKworICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7Cisg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBh
Z2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRh
dGVDb25uZWN0aW9uKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGcm9udGVu
ZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9u
KGNvbm5lY3Rpb25JZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNo
b3dDb25zb2xlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3dSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3Vy
Y2VzKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJlc291cmNlRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9p
bnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dNYWluUmVzb3Vy
Y2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmF0dGFjaEJvdHRvbSgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpCb3R0b20p
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCit7CisgICAgYXR0
YWNoKEF0dGFjaG1lbnRTaWRlOjpSaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmF0dGFjaExlZnQoKQoreworICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVmdCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBzaWRlKQorewor
ICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlIHx8ICFjYW5BdHRhY2goKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9pc0F0dGFjaGVkID0gdHJ1ZTsKKyAgICBtX2F0dGFjaG1lbnRTaWRlID0gc2lk
ZTsKKworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaG1l
bnRTaWRlKHN0YXRpY19jYXN0PHVpbnQzMl90PihzaWRlKSk7CisKKyAgICBpZiAobV9pc1Zpc2li
bGUpCisgICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0
c0F0dGFjaGVkKHRydWUpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKHRydWUpKTsKKworICAgIHN3aXRjaCAobV9hdHRhY2ht
ZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAgICAgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0
b20oKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6
CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OkF0dGFjaGVkUmlnaHQoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6TGVmdDoKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBwbGF0Zm9ybUF0dGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpkZXRhY2go
KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2lzQXR0YWNoZWQgPSBmYWxzZTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2Up
OworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNl
dEF0dGFjaGVkKGZhbHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CisKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCit7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHQoaGVpZ2h0KTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2lu
ZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2Vz
KCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRXaWR0aCh3aWR0aCk7CisgICAgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0
U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0
UmVjdChyZWN0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFn
KCkKK3sKKyAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNQcm9maWxpbmdQYWdlKQorICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBh
Z2VQcm9maWxpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZWxlbWVudFNl
bGVjdGlvbkFjdGl2ZSkgeworICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2Ug
PSB0cnVlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
bmVjdCgpOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOworICAgIH0KK30KKworYm9vbCBXZWJJbnNw
ZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmIHVybCkKK3sK
KyAgICAvLyBVc2UgVVJMIHNvIHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQgcHJvdG9jb2xz
LgorICAgIFVSTCBtYWluUGFnZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clBhZ2VVUkwoKSk7CisgICAgaWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdlVVJMLnByb3Rv
Y29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhtYWluUGFnZVVSTC5wYXRoKCkpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJvZHVjdGlvbiBi
dWlsZHMuCisgICAgU3RyaW5nIHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvclRlc3RQYWdlVVJMKCk7CisgICAgaWYgKHRlc3RQYWdlVVJMU3RyaW5nLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBVUkwgdGVzdFBhZ2VVUkwoVVJMKCks
IHRlc3RQYWdlVVJMU3RyaW5nKTsKKyAgICByZXR1cm4gdXJsLnByb3RvY29sKCkgPT0gdGVzdFBh
Z2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkg
PT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgaWYgKG1f
aW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0g
cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdl
KTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJh
Y2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdlKTsKKworICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdl
LT5pZGVudGlmaWVyKCksICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5h
c3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpv
cGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3Qp
Cit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5k
KCkpIHsKKyAgICAgICAgc2hvdygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV91
bmRlclRlc3QgPSB1bmRlclRlc3Q7CisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBB
U1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIo
KSwgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVs
KCkpKTsKKworICAgIEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKKyAgICBtX2lzQWN0aXZl
RnJvbnRlbmQgPSB0cnVlOworICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmNvbm5lY3RGcm9udGVuZCgqdGhpcyk7CisKKyAgICBpZiAoIW1fdW5kZXJUZXN0KSB7Cisg
ICAgICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKTsKKyAgICAg
ICAgbV9pc0F0dGFjaGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7CisgICAgICAgIG1fYXR0YWNo
bWVudFNpZGUgPSBzdGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKSk7CisKKyAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKG1faXNBdHRh
Y2hlZCkpOworCisgICAgICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobV9hdHRhY2htZW50U2lkZSkgeworICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
Qm90dG9tOgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRh
Y2hlZFJpZ2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hl
ZCgpKTsKKworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7CisgICAgfQorCisg
ICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBhdHRhY2hl
cyBzbyB0aGF0IGl0IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUgX1dLSW5zcGVj
dG9yIGxvYWRpbmcgaXRzIGZyb250ZW5kLgorICAgIG1faW5zcGVjdGVkUGFnZS0+dWlDbGllbnQo
KS5kaWRBdHRhY2hJbnNwZWN0b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOworCisgICAgLy8g
QmFpbCBvdXQgaWYgdGhlIGNsaWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBmcm9tIHRoZSBkZWxl
Z2F0ZSBtZXRob2QuCisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBtX3VuZGVyVGVz
dCA/IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDogV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpvcGVuKCkKK3sKKyAgICBpZiAobV91bmRlclRlc3QpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXRGb3JT
Y29wZTxib29sPiBpc09wZW5pbmcobV9pc09wZW5pbmcsIHRydWUpOworICAgIG1faXNWaXNpYmxl
ID0gdHJ1ZTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQp
CisgICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kV2luZG93KCk7CisKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpkaWRDbG9zZSgpCit7CisgICAgY2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworICAgIG1faXNQcm9maWxpbmdQ
YWdlID0gZmFsc2U7CisgICAgbV9zaG93TWVzc2FnZVNlbnQgPSBmYWxzZTsKKyAgICBtX2lnbm9y
ZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7CisKKyAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZSht
X2luc3BlY3RvclBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7CisgICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50
aWZpZXIoKSk7CisKKyAgICBpZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7CisgICAgICAgIG1faXNB
Y3RpdmVGcm9udGVuZCA9IGZhbHNlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKnRoaXMpOworICAgIH0KKworICAgIGlm
IChtX2lzQXR0YWNoZWQpCisgICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7CisKKyAgICAvLyBOdWxs
IG91dCBtX2luc3BlY3RvclBhZ2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28gdGhlIHZpZXdz
IGNhbiBiZSBjbGVhbmVkIHVwIGNvcnJlY3RseS4KKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxs
cHRyOworCisgICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7CisgICAgbV9jYW5BdHRhY2ggPSBmYWxz
ZTsKKyAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOworCisgICAgcGxhdGZvcm1DbG9zZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogYXV0b21hdGlv
blNlc3Npb24gPSBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmF1dG9t
YXRpb25TZXNzaW9uKCkpCisgICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5pbnNwZWN0b3JGcm9u
dGVuZExvYWRlZCgqbV9pbnNwZWN0ZWRQYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsIHRlbGxzIHVzIHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0bworICAgIC8v
IGlnbm9yZSBpdCBvbmNlIGlmIHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRoaXMgYWxsb3dz
IHRoZSBJbnNwZWN0b3IgdG8gbGF0ZXIKKyAgICAvLyByZXF1ZXN0IHRvIGJlIGJyb3VnaHQgdG8g
dGhlIGZyb250IHdoZW4gYSBicmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVyIGFjdGlvbi4K
KyAgICBpZiAobV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCkgeworICAgICAgICBtX2lnbm9yZUZp
cnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9pc1Zpc2libGUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7CisgICAgZWxz
ZQorICAgICAgICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nSW5z
cGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIGJvb2wgcHJldmlvdXNDYW5BdHRhY2ggPSBt
X2NhbkF0dGFjaDsKKworICAgIG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxh
YmxlKTsKKworICAgIGlmIChwcmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFjaCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCisg
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
dERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKworICAgIHBsYXRmb3JtQXR0YWNo
QXZhaWxhYmlsaXR5Q2hhbmdlZChtX2NhbkF0dGFjaCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7Cisg
ICAgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0
ZUluZm8pOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2VsZWN0aW9uQ2hh
bmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgPSBhY3Rp
dmU7CisKKyAgICBpZiAobV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7CisgICAgICAg
IG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAoIW1f
aXNWaXNpYmxlKQorICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChhY3RpdmUpCisgICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpOworICAgIGVsc2UgaWYgKGlzQ29ubmVjdGVkKCkpCisgICAgICAgIGJyaW5nVG9Gcm9u
dCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5n
ZWQoYm9vbCBhY3RpdmUpCit7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3RpdmU7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVy
cmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5z
cGVjdGVkUGFnZS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKGVuYWJsZWQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFp
bGFibGUpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKKyNlbmRpZgorfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KQoreworICAgIHBsYXRmb3JtU2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwg
Zm9yY2VTYXZlQXMpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBlbmQoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3Jt
QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6
c2hvdWxkT3BlbkF0dGFjaGVkKCkKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsKK30KKworLy8g
VW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJvdmlkZWQgaGVy
ZS4KKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShX
SU4pCisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2lu
ZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3Nl
Rm9yQ3Jhc2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0
IENlcnRpZmljYXRlSW5mbyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVEaWFsb2cpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1bnNpZ25l
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdG9yQmFzZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5m
b0ZvckxvY2FsRGVidWdnYWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9S
TShXSU4pCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmIxZmRmY2ExZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApAQCAt
MCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQXR0
YWNobWVudC5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNp
ZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgTlNVUkw7
CitPQkpDX0NMQVNTIE5TVmlldzsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdL
V2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlcjsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWVQcm94eTsKK2NsYXNzIFdlYklu
c3BlY3RvclByb3h5Q2xpZW50OworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJlZmVy
ZW5jZXM7CisKK2VudW0gY2xhc3MgQXR0YWNobWVudFNpZGUgeworICAgIEJvdHRvbSwKKyAgICBS
aWdodCwKKyAgICBMZWZ0LAorfTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKKyAgICA6IHB1
YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KKyAgICAs
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsCisjaWYgUExBVEZPUk0oV0lOKQorICAgICwgcHVibGljIFdlYkNvcmU6Oldp
bmRvd01lc3NhZ2VMaXN0ZW5lcgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxX
ZWJJbnNwZWN0b3JQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3Bl
Y3RlZFBhZ2UpKTsKKyAgICB9CisKKyAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIHZv
aWQgaW52YWxpZGF0ZSgpOworCisgICAgLy8gUHVibGljIEFQSXMKKyAgICBXZWJQYWdlUHJveHkq
IGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKyAgICBX
ZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBh
Z2U7IH0KKworICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVj
dG9yUGFnZTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2li
bGU7IH0KKyAgICBib29sIGlzRnJvbnQoKTsKKworICAgIHZvaWQgY29ubmVjdCgpOworCisgICAg
dm9pZCBzaG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZv
aWQgY2xvc2VGb3JDcmFzaCgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCByZXNldFN0
YXRlKCk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJv
Y2VzcyhXZWJQYWdlUHJveHkqKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBlbnVtIGNsYXNz
IEluc3BlY3Rpb25UYXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OworICAgIHN0YXRpYyBSZXRh
aW5QdHI8TlNXaW5kb3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0Zy
YW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSk7CisKKyAgICB2b2lkIHVwZGF0ZUluc3BlY3Rvcldp
bmRvd1RpdGxlKCkgY29uc3Q7CisgICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uo
Q0dGbG9hdCA9IDApOworICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB2b2lk
IHdpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKKyAgICBOU1dpbmRvdyogaW5zcGVjdG9yV2lu
ZG93KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KKworICAgIHZv
aWQgY2xvc2VGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0
aXZpdHlUaW1lckZpcmVkKCk7CisKKyAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5T
VmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KTsKKyAgICB2b2lkIGF0dGFjaG1lbnRXaWxs
TW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdyk7CisgICAgdm9pZCBhdHRhY2htZW50
RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpOworCisgICAgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQor
I2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3
KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JWaWV3OyB9OworICAgIHZvaWQgc2V0Q2xpZW50
KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7CisjZW5kaWYKKwor
ICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKyAgICB2
b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CisKKyAgICBBdHRh
Y2htZW50U2lkZSBhdHRhY2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNp
ZGU7IH0KKyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7
IH0KKyAgICB2b2lkIGF0dGFjaFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hMZWZ0KCk7CisgICAg
dm9pZCBhdHRhY2hCb3R0b20oKTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0
dGFjaG1lbnRTaWRlOjpCb3R0b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93V2lkdGgodW5zaWduZWQpOworCisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOworCisgICAgYm9v
bCBpc1Byb2ZpbGluZ1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQor
ICAgIHZvaWQgdG9nZ2xlUGFnZVByb2ZpbGluZygpOworCisgICAgYm9vbCBpc0VsZW1lbnRTZWxl
Y3Rpb25BY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0K
KyAgICB2b2lkIHRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJvb2wgaXNVbmRlclRl
c3QoKSBjb25zdCB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9pZCBzZXREaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKKworICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3Jt
IFdlYkluc3BlY3RvclByb3h5IGltcGxlbWVudGF0aW9ucy4KKyAgICBzdGF0aWMgU3RyaW5nIGlu
c3BlY3RvclBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJM
KCk7CisgICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JCYXNlVVJMKCk7CisgICAgc3RhdGljIGJv
b2wgaXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgRGVi
dWdnYWJsZUluZm9EYXRhIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBtaW5pbXVtV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1pbmltdW1XaW5kb3dIZWlnaHQ7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5p
dGlhbFdpbmRvd1dpZHRoOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93
SGVpZ2h0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclByb3h5KFdlYlBh
Z2VQcm94eSopOworCisgICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAorICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJp
ZGU7CisgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBDb25uZWN0aW9uVHlwZTo6TG9jYWw7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGxh
dGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRXaW5kb3coKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKKworICAgIHZvaWQgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7CisgICAgdm9pZCBwbGF0
Zm9ybUludmFsaWRhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZv
aWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1IaWRlKCk7CisgICAgYm9vbCBwbGF0
Zm9ybUlzRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZChib29sKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbyYpOworICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVp
Z2h0KCk7CisgICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOworICAg
IHZvaWQgcGxhdGZvcm1BdHRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7CisgICAg
dm9pZCBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lk
IHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisgICAgdm9pZCBwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBs
YXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQs
IGJvb2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBib29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7Cisj
ZWxzZQorICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNo
KSB7IHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOyB9CisjZW5kaWYKKworICAgIC8vIENhbGxl
ZCBieSBXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcworICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVj
dG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKKyAgICB2b2lkIHNl
dEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQpOworCisgICAgdm9pZCBzZW5kTWVz
c2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7
CisgICAgdm9pZCBkaWRDbG9zZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9p
ZCBicmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8mKTsKKyAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOworICAgIHZv
aWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgc2V0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKKworICAgIHZvaWQgc2F2
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworICAgIGJvb2wgY2FuQXR0
YWNoKCkgY29uc3QgeyByZXR1cm4gbV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNob3VsZE9wZW5B
dHRhY2hlZCgpOworCisgICAgdm9pZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBpbnNwZWN0aW9u
TGV2ZWwoKSBjb25zdDsKKworICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVy
ZW5jZXMoKSBjb25zdDsKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAg
IHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oV0lOKQorICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwg
VUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwor
ICAgIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFN
KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2Ug
eyBudWxscHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRy
IH07CisKKyAgICBib29sIG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWaXNp
YmxlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2NhbkF0dGFjaCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZWxlbWVudFNl
bGVjdGlvbkFjdGl2ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9pc0FjdGl2ZUZyb250ZW5kIHsgZmFsc2UgfTsKKworICAgIEF0dGFjaG1lbnRTaWRl
IG1fYXR0YWNobWVudFNpZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OworCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JX
aW5kb3c7CisgICAgUmV0YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9v
YmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdn
ZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94
eT4gbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7CisgICAgU3RyaW5nIG1fdXJs
U3RyaW5nOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKKyAgICBib29sIG1f
aXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07CisjZWxpZiBQTEFURk9STShH
VEspCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVu
dDsKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKKyAgICBHdGtX
aWRnZXQqIG1faW5zcGVjdG9yV2luZG93IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9o
ZWFkZXJCYXIgeyBudWxscHRyIH07CisgICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOwor
I2VsaWYgUExBVEZPUk0oV0lOKQorICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVs
bHB0ciB9OworICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9
OworICAgIEhXTkQgbV9pbnNwZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQg
bV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgeyBudWxscHRyIH07CisgICAgUmVmUHRyPFdlYlZpZXc+
IG1faW5zcGVjdG9yVmlldzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
UHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmViYjc3NTUzYzZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAg
KzEsNTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
bWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yUHJveHkgeworICAgIE9wZW5Mb2NhbEluc3BlY3RvckZy
b250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKKyAgICBTZXRGcm9udGVuZENv
bm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorCisgICAgU2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCisKKyAgICBGcm9udGVuZExvYWRlZCgp
CisgICAgRGlkQ2xvc2UoKQorICAgIEJyaW5nVG9Gcm9udCgpCisgICAgQnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpCisgICAgUmVvcGVuKCkKKyAgICBSZXNldFN0YXRlKCkKKworICAgIEluc3Bl
Y3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmluZykKKyAgICBTaG93Q2VydGlmaWNhdGUoV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKKyAgICBFbGVtZW50U2VsZWN0
aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9v
bCBhY3RpdmUpCisgICAgU2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlv
bmFsPGJvb2w+IGVuYWJsZWQpCisKKyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNv
bnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAgICBBcHBlbmQo
U3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKKworICAgIEF0dGFjaEJvdHRvbSgpCisg
ICAgQXR0YWNoUmlnaHQoKQorICAgIEF0dGFjaExlZnQoKQorICAgIERldGFjaCgpCisKKyAgICBB
dHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQorCisgICAgU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorICAgIFNldEF0dGFjaGVkV2luZG93V2lk
dGgodW5zaWduZWQgd2lkdGgpCisKKyAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QpCisKKyAgICBTdGFydFdpbmRvd0RyYWcoKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZlYTE1ZWU2NTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKworI2luY2x1
ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29s
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVk
ZWYgSGFzaE1hcDxXZWJQYWdlUHJveHkqLCB1bnNpZ25lZD4gUGFnZUxldmVsTWFwOworCitzdGF0
aWMgUGFnZUxldmVsTWFwJiBwYWdlTGV2ZWxNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxQYWdlTGV2ZWxNYXA+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit1bnNpZ25lZCBp
bnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIGlmIChwYWdl
KSB7CisgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IHBhZ2VMZXZlbE1hcCgpLmZpbmQocGFnZSk7
CisgICAgICAgIGlmIChmaW5kUmVzdWx0ICE9IHBhZ2VMZXZlbE1hcCgpLmVuZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
MTsKK30KKworU3RyaW5nIGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKFdlYlBh
Z2VQcm94eSogcGFnZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiX19XZWJJbnNwZWN0b3JQ
YWdlR3JvdXBMZXZlbCIsIGluc3BlY3RvckxldmVsRm9yUGFnZShwYWdlKSwgIl9fIik7Cit9CisK
K3ZvaWQgdHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2Vi
UGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQoreworICAgIHBhZ2VMZXZlbE1hcCgpLnNldChpbnNw
ZWN0b3JQYWdlLCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSkpOworfQorCit2
b2lkIHVudHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSkKK3sK
KyAgICBwYWdlTGV2ZWxNYXAoKS5yZW1vdmUoaW5zcGVjdG9yUGFnZSk7Cit9CisKK3N0YXRpYyBX
ZWJQcm9jZXNzUG9vbCogc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CitzdGF0aWMgV2ViUHJv
Y2Vzc1Bvb2wqIHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CisKK1dlYlByb2Nlc3NQb29s
JiBpbnNwZWN0b3JQcm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCit7CisgICAg
Ly8gSGF2aW5nIG91ciBvd24gcHJvY2VzcyBwb29sIHJlbW92ZXMgdXMgZnJvbSB0aGUgbWFpbiBw
cm9jZXNzIHBvb2wgYW5kCisgICAgLy8gZ3VhcmFudGVlcyBubyBwcm9jZXNzIHNoYXJpbmcgZm9y
IG91ciB1c2VyIGludGVyZmFjZS4KKyAgICBXZWJQcm9jZXNzUG9vbComIHBvb2wgPSAoaW5zcGVj
dGlvbkxldmVsID09IDEpID8gc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgOiBzX25lc3RlZElu
c3BlY3RvclByb2Nlc3NQb29sOworICAgIGlmICghcG9vbCkgeworICAgICAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBBUEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAg
ICAgIHBvb2wgPSAmV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uLmdldCgpKS5s
ZWFrUmVmKCk7CisgICAgICAgIC8vIERvIG5vdCBkZWxheSBwcm9jZXNzIGxhdW5jaCBmb3IgaW5z
cGVjdG9yIHBhZ2VzIGFzIGluc3BlY3RvciBwYWdlcyBkbyBub3Qga25vdyBob3cgdG8gdHJhbnNp
dGlvbiBmcm9tIGEgdGVybWluYXRlZCBwcm9jZXNzLgorICAgICAgICBwb29sLT5kaXNhYmxlRGVs
YXllZFdlYlByb2Nlc3NMYXVuY2goKTsKKyAgICB9CisgICAgcmV0dXJuICpwb29sOworfQorCiti
b29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQor
eworICAgIHJldHVybiAoc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19tYWluSW5zcGVj
dG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQb29sKQorICAgICAgICB8fCAoc19uZXN0ZWRJbnNw
ZWN0b3JQcm9jZXNzUG9vbCAmJiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9j
ZXNzUG9vbCk7Cit9CisKK2Jvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFn
ZSkKK3sKKyAgICByZXR1cm4gcGFnZUxldmVsTWFwKCkuY29udGFpbnMoJndlYlBhZ2UpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzE5ZWE3NTg4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQ
YWdlUHJveHk7CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKKworLy8gVGhlIGluc3BlY3RvciBwYWdl
IGdyb3VwcyBhcmUgdXNlZCB0byBnaXZlIGRpZmZlcmVudCBwcmVmZXJlbmNlcyB0byBlYWNoCisv
LyBpbnNwZWN0b3IgbGV2ZWwgYnkgc2V0dGluZyBhIHBlci1sZXZlbCBwYWdlIGdyb3VwIGlkZW50
aWZpZXIuCit1bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVByb3h5Kik7CitT
dHJpbmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5Kik7
Cit2b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdl
YlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSk7Cit2b2lkIHVudHJhY2tJbnNwZWN0b3JQYWdlKFdl
YlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSk7CisKK1dlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQ
cm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOworYm9vbCBpc0luc3BlY3RvclBy
b2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJik7Citib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdl
UHJveHkmKTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmJlYmJkZjg3YWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcApAQCAtMCwwICsxLDEwMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgorCisjaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K1dlYlBhZ2VEZWJ1Z2dhYmxlOjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmIHBhZ2Up
CisgICAgOiBtX3BhZ2UocGFnZSkKK3sKK30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpu
YW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7CisKKyAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUo
KS0+dGl0bGUoKTsKK30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwoKSBjb25zdAor
eworICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gV1RGOjpibGFu
a1VSTCgpLnN0cmluZygpOworCisgICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWluRnJhbWUoKS0+
dXJsKCkuc3RyaW5nKCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBX
VEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7CisKKyAgICByZXR1cm4gdXJsOworfQorCitib29sIFdl
YlBhZ2VEZWJ1Z2dhYmxlOjpoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7Cit9CisKK3Zv
aWQgV2ViUGFnZURlYnVnZ2FibGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsLCBi
b29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNlKQoreworICAg
IG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5uZWwsIGlz
QXV0b21hdGljQ29ubmVjdGlvbiwgaW1tZWRpYXRlbHlQYXVzZSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZURlYnVnZ2FibGU6OmRpc2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQoreworICAg
IG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwp
OworfQorCit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3Rl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxl
cigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwordm9pZCBXZWJQ
YWdlRGVidWdnYWJsZTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7CisgICAgbV9w
YWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOworfQor
Cit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIG1fbmFtZU92ZXJyaWRlID0gbmFtZTsKKyAgICB1cGRhdGUoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdl
RGVidWdnYWJsZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VE
ZWJ1Z2dhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhmODQ4
ZGUxMTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNw
ZWN0aW9uVGFyZ2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYlBhZ2VEZWJ1Z2dh
YmxlIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdGlvblRhcmdldCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2Vi
UGFnZURlYnVnZ2FibGUpOworcHVibGljOgorICAgIFdlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQ
cm94eSYpOworICAgIH5XZWJQYWdlRGVidWdnYWJsZSgpID0gZGVmYXVsdDsKKworICAgIEluc3Bl
Y3Rvcjo6UmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6VHlwZTo6V2ViUGFn
ZTsgfQorCisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCBmaW5hbDsKKyAgICBTdHJpbmcgdXJsKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QgZmluYWw7CisK
KyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0
b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSkg
ZmluYWw7CisgICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikg
ZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpIGZpbmFsOworCisg
ICAgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX25hbWVPdmVy
cmlkZTsgfQorICAgIHZvaWQgc2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOworCitwcml2
YXRlOgorICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX25hbWVPdmVycmlk
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NPTlRST0xMQUJMRV9UQVJHRVQoV2ViS2l0OjpXZWJQYWdlRGVidWdnYWJsZSwgV2ViUGFnZSk7
CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZWUy
OGJmNzE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgor
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJhc2UuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworc3RhdGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNpb25hbFBhZ2VQ
cm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Ojp0b1RhcmdldElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKK1dlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRSb3V0ZXIo
RnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQorICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigpKSkKK3sKKyAg
ICBhdXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9m
cm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CisKKyAgICBt
X3RhcmdldEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7CisKKyAgICBtX2FnZW50cy5hcHBlbmQo
V1RGTW92ZSh0YXJnZXRBZ2VudCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjppbml0KCkKK3sKKyAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNyZWF0ZUluc3Bl
Y3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6
UGFnZSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQo
KQoreworICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIG1fYWdlbnRzLmRpc2Nh
cmRWYWx1ZXMoKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzTG9j
YWxGcm9udGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0ZXItPmhhc0xv
Y2FsRnJvbnRlbmQoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29u
bmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWws
IGJvb2wsIGJvb2wpCit7CisgICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVuZCA9ICFtX2Zy
b250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXItPmNv
bm5lY3RGcm9udGVuZChmcm9udGVuZENoYW5uZWwpOworCisgICAgaWYgKGNvbm5lY3RpbmdGaXJz
dEZyb250ZW5kKQorICAgICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
Jm1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKwor
ICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0
ZXItPmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAg
ICBpZiAoaGFzTG9jYWxGcm9udGVuZCgpKQorICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9y
SW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVsJiBmcm9udGVu
ZENoYW5uZWwpCit7CisgICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZyb250ZW5kKGZy
b250ZW5kQ2hhbm5lbCk7CisKKyAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQgPSAh
bV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCk7CisgICAgaWYgKGRpc2Nvbm5lY3RpbmdM
YXN0RnJvbnRlbmQpCisgICAgICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RvckRlc3Ryb3llZCk7CisKKyAgICBtX3BhZ2Uu
ZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVu
ZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgaWYgKGRpc2Nv
bm5lY3RpbmdMYXN0RnJvbnRlbmQpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZv
cm1hdGlvbkRpZENoYW5nZSgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKQoreworICAgIC8vIEZJWE1FOiBIYW5k
bGUgYSBsb2NhbCBpbnNwZWN0b3IgY2xpZW50LgorCisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVy
LT5oYXNGcm9udGVuZHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90aWZ5IGFnZW50
cyBmaXJzdCwgc2luY2UgdGhleSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xpZW50LgorICAg
IG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246
Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisKKyAgICAvLyBEaXNjb25uZWN0IGFueSByZW1h
aW5pbmcgcmVtb3RlIGZyb250ZW5kcy4KKyAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0
QWxsRnJvbnRlbmRzKCk7CisKKyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRD
b3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCisgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlk
Q2hhbmdlKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgbV9wYWdlLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7CisjZWxzZQorICAgIGlmIChp
bmRpY2F0aW5nKQorICAgICAgICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fcGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOworI2VuZGlm
Cit9CisjZW5kaWYKKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5z
cGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSB0eXBlKQoreworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dElkKQoreworICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7CisgICAgaWYg
KGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFyZ2V0QWdl
bnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMucmVtb3ZlKGl0
KTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0lu
c3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250
ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9u
dGVuZHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byogdGFyZ2V0ID0gbV90
YXJnZXRzLmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKKyAgICBBU1NFUlQodGFy
Z2V0KTsKKyAgICByZXR1cm4gdGFyZ2V0LT5pc1BhdXNlZCgpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92
aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBjYWxsYmFjaykKK3sKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdl
dElEKHByb3Zpc2lvbmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHRhcmdldC0+
c2V0UmVzdW1lQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQ
YWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKK3sKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFs
UGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShj
b25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIGRlc3Ry
b3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Cit9CisKK3Zv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIG5ld1dlYlBhZ2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5ld0lEID0gV2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOworICAgIGF1dG8g
bmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChuZXdUYXJnZXQp
OworICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBtX3Rh
cmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOworCisg
ICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCBy
ZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJveSBldmVyeXRo
aW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMjAyOTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRo
ZSBjb21taXR0ZWQgcGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1
ZXMoKSkKKyAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOwor
ICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVu
dGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+JiYgdGFyZ2V0KQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQoKnRhcmdl
dCk7CisgICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZSh0YXJn
ZXQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OGNhZWRmMGMwYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
Ikluc3BlY3RvclRhcmdldFByb3h5LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWdlbnRSZWdpc3RyeS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRh
cmdldEFnZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgorI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3Mg
QmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBGcm9udGVuZENoYW5uZWw7CitjbGFzcyBGcm9udGVu
ZFJvdXRlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CisKKyAgICB2b2lkIGlu
aXQoKTsKKyAgICB2b2lkIHBhZ2VDbG9zZWQoKTsKKworICAgIGJvb2wgaGFzTG9jYWxGcm9udGVu
ZCgpIGNvbnN0OworCisgICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVk
aWF0ZWx5UGF1c2UgPSBmYWxzZSk7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWwmKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMo
KTsKKworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICB2b2lkIHNldElu
ZGljYXRpbmcoYm9vbCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0
KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7
CisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQp
OworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyAgICBib29sIHNob3VsZFBhdXNl
TG9hZGluZyhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYpIGNvbnN0OworICAgIHZvaWQgc2V0
Q29udGludWVMb2FkaW5nQ2FsbGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFn
ZShQcm92aXNpb25hbFBhZ2VQcm94eSYpOworICAgIHZvaWQgd2lsbERlc3Ryb3lQcm92aXNpb25h
bFBhZ2UoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRpZENvbW1pdFBy
b3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBh
ZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmKTsKKworICAg
IFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFJlZjxJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVy
PiBtX2Zyb250ZW5kUm91dGVyOworICAgIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOworICAgIEluc3BlY3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2Fn
ZW50czsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KiBtX3RhcmdldEFnZW50
OworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+PiBtX3RhcmdldHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5kOWQ1MGRjMjg2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAsMCArMSwyNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisKKyNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgi
CisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JVdGlscy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVj
dG9yRGVidWdnYWJsZVR5cGUuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJsaWM6CisgICAg
UmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGll
bnQsIHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCisgICAgICAgIDog
bV9wcm94eShSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9p
bnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklE
KGNvbm5lY3Rpb25JRCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQorICAgIHsKKyAg
ICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNw
ZWN0b3JQcm94eSgpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7
CisgICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQo
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46
IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdl
dC4KKyAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJ
OjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7Cisg
ICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShJbnNwZWN0b3I6OkRlYnVn
Z2FibGVUeXBlOjpXZWJQYWdlKTsKKyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVn
Z2FibGVJbmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOworICAg
IH0KKworICAgIHZvaWQgc2hvdygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRUYXJnZXROYW1lKGNvbnN0IENTdHJpbmcmIG5hbWUpCisgICAg
eworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbV9wcm94eS0+dXBkYXRlV2luZG93VGl0bGUo
bmFtZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQobWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFj
a2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2lu
c3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJn
ZXRJRCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVu
ZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJl
ZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJbnNwZWN0b3JD
bGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OworICAgIHVpbnQ2NF90IG1fY29ubmVjdGlvbklEOwor
ICAgIHVpbnQ2NF90IG1fdGFyZ2V0SUQ7Cit9OworCitjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpN
ZXNzYWdlSGFuZGxlcnMmIFJlbW90ZUluc3BlY3RvckNsaWVudDo6bWVzc2FnZUhhbmRsZXJzKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVz
c2FnZUhhbmRsZXJzPiBtZXNzYWdlSGFuZGxlcnMgPSBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdl
SGFuZGxlcnMoeworICAgIHsgIkRpZENsb3NlIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENv
bm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyB7IH0sCisgICAgICAgIFtdKFNvY2tldENvbm5l
Y3Rpb24mLCBHVmFyaWFudCosIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRv
JiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEp
OworICAgICAgICAgICAgY2xpZW50LmNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAgICAgICB9fQor
ICAgIH0sCisgICAgeyAiRGlkU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBzdGQ6OnBhaXI8Q1N0cmlu
ZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIoYXkpIiwKKyAgICAgICAg
W10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUlu
c3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+
IGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQ7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFt
ZXRlcnMsICIoQGF5KSIsICZiYWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigpKTsKKyAgICAg
ICAgICAgIGNsaWVudC5zZXRCYWNrZW5kQ29tbWFuZHMoZ192YXJpYW50X2dldF9ieXRlc3RyaW5n
KGJhY2tlbmRDb21tYW5kc1ZhcmlhbnQuZ2V0KCkpKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAg
IHsgIlNldFRhcmdldExpc3QiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6
TWVzc2FnZUNhbGxiYWNrPiB7ICIodGEodHNzc2IpKSIsCisgICAgICAgIFtdKFNvY2tldENvbm5l
Y3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQq
Pih1c2VyRGF0YSk7CisgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsKKyAgICAgICAg
ICAgIEdVbmlxdWVPdXRQdHI8R1ZhcmlhbnRJdGVyPiBpdGVyOworICAgICAgICAgICAgZ192YXJp
YW50X2dldChwYXJhbWV0ZXJzLCAiKHRhKHRzc3NiKSkiLCAmY29ubmVjdGlvbklELCAmaXRlci5v
dXRQdHIoKSk7CisgICAgICAgICAgICBzaXplX3QgdGFyZ2V0Q291bnQgPSBnX3ZhcmlhbnRfaXRl
cl9uX2NoaWxkcmVuKGl0ZXIuZ2V0KCkpOworICAgICAgICAgICAgVmVjdG9yPFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgICAgICAgICAgdGFyZ2V0TGlzdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRhcmdldENvdW50KTsKKyAgICAgICAgICAgIGd1aW50NjQg
dGFyZ2V0SUQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiB0eXBlOworICAgICAgICAgICAgY29u
c3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICAgICAgICAg
IGdib29sZWFuIGhhc0xvY2FsRGVidWdnZXI7CisgICAgICAgICAgICB3aGlsZSAoZ192YXJpYW50
X2l0ZXJfbG9vcChpdGVyLmdldCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwgJnR5cGUsICZu
YW1lLCAmdXJsLCAmaGFzTG9jYWxEZWJ1Z2dlcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdf
c3RyY21wMCh0eXBlLCAiV2ViIikgfHwgIWdfc3RyY21wMCh0eXBlLCAiSmF2YVNjcmlwdCIpKQor
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFwcGVuZCh7IHRhcmdldElE
LCB0eXBlLCBuYW1lLCB1cmwgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGllbnQu
c2V0VGFyZ2V0TGlzdChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOworICAgICAg
ICB9fQorICAgIH0sCisgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgc3RkOjpwYWlyPENT
dHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0cykiLAorICAg
ICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVy
IHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVt
b3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZ3VpbnQ2NCBjb25u
ZWN0aW9uSUQsIHRhcmdldElEOworICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyAg
ICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0dCZzKSIsICZjb25uZWN0aW9u
SUQsICZ0YXJnZXRJRCwgJm1lc3NhZ2UpOworICAgICAgICAgICAgY2xpZW50LnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKKyAgICAgICAgfX0K
KyAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIG1lc3NhZ2VIYW5kbGVyczsKK30KKworUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVz
cywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQorICAg
IDogbV9ob3N0QW5kUG9ydChTdHJpbmc6OmZyb21VVEY4KGFkZHJlc3MpICsgJzonICsgU3RyaW5n
OjpudW1iZXIocG9ydCkpCisgICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQorICAgICwgbV9jYW5j
ZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCit7CisgICAgR1JlZlB0cjxH
U29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25l
dygpKTsKKyAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENs
aWVudC5nZXQoKSwgbV9ob3N0QW5kUG9ydC51dGY4KCkuZGF0YSgpLCAwLCBtX2NhbmNlbGxhYmxl
LmdldCgpLAorICAgICAgICBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+
IGVycm9yOworICAgICAgICAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlv
biA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChHX1NP
Q0tFVF9DTElFTlQob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAg
ICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJS
T1JfQ0FOQ0VMTEVEKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRv
KiBjbGllbnQgPSBzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7
CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICBjbGllbnQtPnNl
dHVwQ29ubmVjdGlvbihTb2NrZXRDb25uZWN0aW9uOjpjcmVhdGUoV1RGTW92ZShjb25uZWN0aW9u
KSwgbWVzc2FnZUhhbmRsZXJzKCksIGNsaWVudCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmFpbGVkIHRv
IGNvbm5lY3QgdG8gaW5zcGVjdG9yIHNlcnZlcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAg
ICAgICAgICAgICAgY2xpZW50LT5tX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKmNsaWVudCk7
CisgICAgICAgICAgICB9CisgICAgfSwgdGhpcyk7Cit9CisKK1JlbW90ZUluc3BlY3RvckNsaWVu
dDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCit7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwo
bV9jYW5jZWxsYWJsZS5nZXQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXR1cENvbm5lY3Rpb24oUmVmPFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAg
ICBtX3NvY2tldENvbm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOworICAgIG1fc29ja2V0
Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwSW5zcGVjdG9yQ2xpZW50IiwgZ192YXJpYW50
X25ldygiKEBheSkiLCBnX3ZhcmlhbnRfbmV3X2J5dGVzdHJpbmcoSW5zcGVjdG9yOjpiYWNrZW5k
Q29tbWFuZHNIYXNoKCkuZGF0YSgpKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKK3sKKyAg
ICBpZiAoIWJhY2tlbmRDb21tYW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7CisgICAgICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoYmFja2Vu
ZENvbW1hbmRzLCBzdHJsZW4oYmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7CisgICAgbV9i
YWNrZW5kQ29tbWFuZHNVUkwgPSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIgKyBiYXNl
NjREYXRhOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkRpZENs
b3NlKCkKK3sKKyAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFw
LmNsZWFyKCk7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX29ic2Vy
dmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6aW5zcGVjdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQor
eworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjpt
YWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRh
cmdldElEXSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclByb3h5
PigqdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCk7CisgICAgfSk7CisgICAgaWYgKCFhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5z
aG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NvY2tldENvbm5lY3Rpb24t
PnNlbmRNZXNzYWdlKCJTZXR1cCIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9uSUQs
IHRhcmdldElEKSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOworfQor
Cit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0
X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNzYWdlVG9C
YWNrZW5kIiwgZ192YXJpYW50X25ldygiKHR0cykiLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBt
ZXNzYWdlLnV0ZjgoKS5kYXRhKCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OmNsb3NlRnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0
SUQpCit7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yUHJveHlNYXAuY29udGFpbnMoc3RkOjptYWtl
X3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpKTsKKyAgICBtX3NvY2tldENvbm5lY3Rpb24t
PnNlbmRNZXNzYWdlKCJGcm9udGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShz
dGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgVmVj
dG9yPFRhcmdldD4mJiB0YXJnZXRMaXN0KQoreworICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMg
dG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPHVpbnQ2NF90LCA0PiB0YXJnZXRzVG9SZW1vdmU7
CisgICAgZm9yIChhdXRvJiBjb25uZWN0aW9uVGFyZ2V0UGFpciA6IG1faW5zcGVjdG9yUHJveHlN
YXAua2V5cygpKSB7CisgICAgICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0UGFpci5maXJzdCAhPSBj
b25uZWN0aW9uSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsK
KyAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25k
KSB7CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoY29ubmVjdGlvblRh
cmdldFBhaXIpLT5zZXRUYXJnZXROYW1lKHRhcmdldC5uYW1lKTsKKyAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5h
cHBlbmQoY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChhdXRv
IHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQorICAgICAgICBtX2luc3BlY3RvclByb3h5TWFw
LnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisKKyAgICBt
X3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAgbV9v
YnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1
aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBhdXRvIHByb3h5
ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0
YXJnZXRJRCkpOworICAgIEFTU0VSVChwcm94eSk7CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAg
cmV0dXJuOworICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nOjpmcm9tVVRG
OChtZXNzYWdlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZGVlMDJjZTVkNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3Bl
Y3RvckNsaWVudC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1Nv
Y2tldENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlw
ZWRlZiBzdHJ1Y3QgX0dDYW5jZWxsYWJsZSBHQ2FuY2VsbGFibGU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1vdGVJbnNwZWN0
b3JQcm94eTsKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJ
bnNwZWN0b3JPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9y
T2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2Vk
KFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKK307CisKK2NsYXNzIFJlbW90ZUluc3BlY3Rv
ckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwg
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7
CisKKyAgICBzdHJ1Y3QgVGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ2NF90IGlk
OworICAgICAgICBDU3RyaW5nIHR5cGU7CisgICAgICAgIENTdHJpbmcgbmFtZTsKKyAgICAgICAg
Q1N0cmluZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3Rv
cjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorICAgIGNv
bnN0IFN0cmluZyYgaG9zdEFuZFBvcnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RBbmRQb3J0OyB9
CisgICAgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmRDb21tYW5kc1VSTDsgfQorCisgICAgdm9pZCBpbnNwZWN0KHVpbnQ2NF90IGNvbm5l
Y3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tl
bmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVp
bnQ2NF90IHRhcmdldElEKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgU29ja2V0Q29u
bmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKKyAgICB2b2lkIHNl
dHVwQ29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAgdm9pZCBjb25uZWN0
aW9uRGlkQ2xvc2UoKTsKKworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIq
KTsKKyAgICB2b2lkIHNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8
VGFyZ2V0PiYmKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25u
ZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKik7CisKKyAgICBTdHJpbmcg
bV9ob3N0QW5kUG9ydDsKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisgICAgUmVt
b3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7CisgICAgUmVmUHRyPFNvY2tldENvbm5l
Y3Rpb24+IG1fc29ja2V0Q29ubmVjdGlvbjsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9j
YW5jZWxsYWJsZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJn
ZXRzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi41OTljNDQ2NTc2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaApA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKKworY2xh
c3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYklu
c3BlY3RvclByb3h5Q2xpZW50KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBvcGVuV2lu
ZG93KFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShX
ZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KFdl
Ykluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFu
Z2VkKFdlYkluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBkZXRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9y
UHJveHkmLCB1bnNpZ25lZCB3aWR0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VB
dHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9yUHJveHkmLCBib29sIGF2YWlsYWJsZSkgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmRlMzQ5YmI3MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2Vi
SW5zcGVjdG9yUHJveHlHdGsuY3BwCkBAIC0wLDAgKzEsNTMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisj
aW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24u
aCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tDb250ZXh0TWVudUl0ZW0uaCIK
KyNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3Rv
cldpbmRvdy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRp
YyB2b2lkIGluc3BlY3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nh
c3Q8V2ViSW5zcGVjdG9yUHJveHkqPih1c2VyRGF0YSk7CisKKyAgICAvLyBJbmZvcm0gV2ViUHJv
Y2VzcyBhYm91dCB3ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAorICAgIC8vIHJl
c3VsdHMgaW4gZmFpbHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9y
LgorICAgIGluc3BlY3RvclByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYm
IGNsaWVudCkKK3sKKyAgICBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7CisgICAgd2Via2l0SW5zcGVjdG9yV2luZG93
U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCAh
bV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxTdHJpbmcudXRm
OCgpLmRhdGEoKSA6IG51bGxwdHIpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmln
aW5SZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNp
Z25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwg
dW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIHJl
dHVybiBzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRE
YXRhYmFzZVVzYWdlICogMS4yNSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFz
aChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV2ViSW5zcGVjdG9y
UHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkq
Pihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKHdlYkluc3BlY3Rv
clByb3h5KTsKKyAgICB3ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCitz
dGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdl
UmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBv
bGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdo
ZXJlLgorICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9u
QWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKKyAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJj
ZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVz
ZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgV2ViSW5zcGVjdG9y
UHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9y
UHJveHkqPihjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworCisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFj
dGlvblJlZiktPnJlcXVlc3QoKTsKKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4g
aW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJ
bnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJl
ZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUHJldmVudCBl
dmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgorICAg
IHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOworCisgICAgLy8gQW5kIGluc3RlYWQgbG9h
ZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3Bl
Y3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2
b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tB
cnJheVJlZiBwcm9wb3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVz
dFJlc3VsdFJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJh
eVJlZiBtZW51SXRlbXMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAgc2l6ZV90IGNv
dW50ID0gV0tBcnJheUdldFNpemUocHJvcG9zZWRNZW51UmVmKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgY29u
dGV4dE1lbnVJdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlH
ZXRJdGVtQXRJbmRleChwcm9wb3NlZE1lbnVSZWYsIGkpKTsKKyAgICAgICAgc3dpdGNoIChXS0Nv
bnRleHRNZW51SXRlbUdldFRhZyhjb250ZXh0TWVudUl0ZW0pKSB7CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tD
b250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgICAgIGNhc2Uga1dLQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0ZW1z
LCBjb250ZXh0TWVudUl0ZW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAqbmV3TWVudVJlZiA9IG1lbnVJdGVtczsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VS
VChpbnNwZWN0ZWRQYWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3KTsKKworICAg
IGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2Vi
S2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8g
QWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1
aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1l
c3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIHByZWZlcmVu
Y2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsKKyAgICB9KTsKKyAgICBhdXRvIHBhZ2VH
cm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJG
b3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9
IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkp
KTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRy
KCkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigp
KTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3Jl
YXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3Bv
aW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZtX2luc3BlY3RvclZpZXcpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yVmll
dywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsK
KworICAgIFdLUGFnZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7CisgICAgICAgIHsgMiwgdGhpcyB9
LAorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRo
VjAKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2xv
c2VQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cworICAgICAgICBudWxscHRyLCAv
LyBmb2N1cworICAgICAgICBudWxscHRyLCAvLyB1bmZvY3VzCisgICAgICAgIG51bGxwdHIsIC8v
IHJ1bkphdmFTY3JpcHRBbGVydAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29u
ZmlybQorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0CisgICAgICAgIG51
bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBt
aXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAg
IG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gYXJlVG9vbGJhcnNWaXNp
YmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJzVmlzaWJsZQorICAgICAgICBudWxs
cHRyLCAvLyBpc01lbnVCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldE1lbnVCYXJW
aXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzU3RhdHVzQmFyVmlzaWJsZQorICAgICAgICBu
dWxscHRyLCAvLyBzZXRTdGF0dXNCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzUmVz
aXphYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFJlc2l6YWJsZQorICAgICAgICBudWxscHRy
LCAvLyBnZXRXaW5kb3dGcmFtZSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUs
CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAorICAgICAg
ICBudWxscHRyLCAvLyBkaWREcmF3CisgICAgICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwK
KyAgICAgICAgZXhjZWVkZWREYXRhYmFzZVF1b3RhLAorICAgICAgICBudWxscHRyLCAvLyBydW5P
cGVuUGFuZWwsCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0CisgICAg
ICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAorICAgICAgICBudWxscHRyLCAvLyBkcmF3SGVh
ZGVyCisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIKKyAgICAgICAgbnVsbHB0ciwgLy8g
cHJpbnRGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAorICAgICAgICBudWxscHRy
LCAvLyB1bnVzZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fk
c0ZvbGRlcgorICAgICAgICBudWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0Cisg
ICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZVBhZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVs
bHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBp
Y2tlcgorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQK
KyAgICB9OworCisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQg
PSB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
UmVzcG9uc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAor
ICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAg
ICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgor
ICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIs
IC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJh
bWUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCisgICAgICAgIG51
bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8g
cmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAor
ICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5CisKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyB3
aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdh
dGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1
cmVTbmFwc2hvdAorICAgIH07CisKKyAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVudFYzIGNvbnRl
eHRNZW51Q2xpZW50ID0geworICAgICAgICB7IDMsIHRoaXMgfSwKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAK
KyAgICAgICAgbnVsbHB0ciwgLy8gY3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQKKyAgICAg
ICAgbnVsbHB0ciwgLy8gY29udGV4dE1lbnVEaXNtaXNzZWQKKyAgICAgICAgZ2V0Q29udGV4dE1l
bnVGcm9tUHJvcG9zZWRNZW51LAorICAgICAgICBudWxscHRyLCAvLyBzaG93Q29udGV4dE1lbnUK
KyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbnRleHRNZW51CisgICAgfTsKKworICAgIFdlYlBh
Z2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRShtX2luc3BlY3RvclZpZXcpKTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yUGFn
ZSk7CisKKyAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZ1
aUNsaWVudC5iYXNlKTsKKyAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShp
bnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7CisgICAgV0tQYWdlU2V0UGFn
ZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmY29udGV4dE1lbnVDbGll
bnQuYmFzZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAgaWYgKG1f
Y2xpZW50ICYmIG1fY2xpZW50LT5vcGVuV2luZG93KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9w
bGV2ZWwoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOworICAgIGlmICghV2ViQ29yZTo6
d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KGluc3BlY3RlZFZpZXdQYXJlbnQpKQorICAg
ICAgICBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gbnVsbHB0cjsKKworICAgIEFTU0VSVCghbV9pbnNw
ZWN0b3JXaW5kb3cpOworICAgIG1faW5zcGVjdG9yV2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2lu
ZG93TmV3KGluc3BlY3RlZFZpZXdQYXJlbnQgPyBHVEtfV0lORE9XKGluc3BlY3RlZFZpZXdQYXJl
bnQpIDogbnVsbHB0cik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2lu
c3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1f
aW5zcGVjdG9yVmlldyk7CisKKyAgICBpZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHko
KSkKKyAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKKworICAgIGdfb2JqZWN0
X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yV2luZG93KSk7CisgICAgZ3RrX3dpbmRvd19wcmVz
ZW50KEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYg
KG1faW5zcGVjdG9yVmlldykgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0
b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2xv
c2UoKnRoaXMpOworCisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a193
aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtSW52YWxpZGF0ZSgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIGlmIChtX2lzT3BlbmluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5icmluZ1RvRnJv
bnQoKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0
a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKFdlYkNvcmU6
OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQorICAgICAgICBndGtfd2lu
ZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJlbnQpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQo
KQoreworICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9p
bnNwZWN0b3JWaWV3KTsKKyAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVs
V2luZG93KHBhcmVudCkpCisgICAgICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBndGtfd2luZG93
X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBhcmVudCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgdXJsKQoreworICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJsOworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMs
IHVybCk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHVwZGF0ZUluc3Bl
Y3RvcldpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0
L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCIpOworfQorCitTdHJpbmcgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRt
bCIpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQor
eworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1Vz
ZXJJbnRlcmZhY2UvIik7Cit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94
eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCit7CisgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJv
dXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0
eSgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dIZWlnaHQoKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVp
Z2h0KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKK30KKwordW5zaWduZWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIHJldHVy
biBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lk
Z2V0KCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7
CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7
CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a19jb250YWluZXJfcmVt
b3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwor
ICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBt
X2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAgfQorCisgICAgLy8gU2V0IGEgZGVmYXVsdCBzaXpl
cyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLgorICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0gMzAwOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOworCisgICAgaWYgKG1fYXR0YWNobWVu
dFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgeworICAgICAgICB1bnNpZ25lZCBtYXhp
bXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAv
IDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWlu
aW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVt
QXR0YWNoZWRIZWlnaHQpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11
bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsK
KyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1B
dHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNo
ZWRXaWR0aCkpKTsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0dGFj
aCgqdGhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2Vi
SW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdl
dCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBtX2F0dGFjaG1lbnRTaWRlKTsKKyAgICBndGtfd2lkZ2V0
X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1EZXRhY2goKQoreworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJv
Y2VzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVj
dG9yVmlldyA9IG1faW5zcGVjdG9yVmlldzsKKyAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVu
dC0+ZGV0YWNoKCp0aGlzKSkgeworICAgICAgICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9p
c0F0dGFjaGVkIGlzIHRydWUsIGJ1dCBpdCBjb3VsZCBjYWxsZWQgYmVmb3JlCisgICAgICAgIC8v
IHRoZSBpbnNwZWN0b3IgaXMgb3BlbmVkIGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2Vk
IHF1aWNrbHkuIFNvLAorICAgICAgICAvLyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQu
CisgICAgICAgIGlmIChHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudCht
X2luc3BlY3RvclZpZXcpKQorICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NP
TlRBSU5FUihwYXJlbnQpLCBtX2luc3BlY3RvclZpZXcpOworICAgIH0KKworICAgIC8vIFJldHVy
biBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3
YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCisgICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRl
IGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgorICAgIGlmICghbV9pc1Zpc2libGUpIHsK
KyAgICAgICAgLy8gVGhlIGluc3BlY3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2Ug
ZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRoZQorICAgICAg
ICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JW
aWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhp
cyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGlmICgh
bV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKKyAg
ICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19C
QVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVk
IHdpZHRoKQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRo
KCp0aGlzLCB3aWR0aCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdp
ZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50
c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVj
dCk7CisgICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0
LCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcGFnZSA9
IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUpKTsKKyAgICBwYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSksIHBhZ2UtPndl
YlBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgVU5VU0VEX1BBUkFNKGZv
cmNlU2F2ZURpYWxvZyk7CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09u
c2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1Jl
ZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2No
b29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxlIiwKKyAgICAgICAgR1RLX1dJTkRPVyhwYXJlbnQp
LCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7CisKKyAg
ICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgp
KTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNo
b29zZXIsIFRSVUUpOworCisgICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3Ig
aW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCisgICAgLy8gYXMgd2ViLWlu
c3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTov
Ly8gVVJMCisgICAgLy8gdW5mb3J0dW5hdGVseS4KKyAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0
ZWRVUkwpOworICAgIC8vIFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVf
Y2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFU
SVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQorICAgICAg
ICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRh
dGFTdHJpbmc7CisgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgaWYgKCFiYXNlNjRE
ZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIH0g
ZWxzZQorICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7CisKKyAgICBjb25zdCBj
aGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRh
dGFWZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNO
dWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CisgICAgR1Jl
ZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNo
b29zZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUu
Z2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBk
YXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxzZSwKKyAgICAgICAgR19GSUxFX0NSRUFURV9S
RVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ss
IG1faW5zcGVjdG9yUGFnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFi
aWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywgYXZhaWxhYmxl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE0OTBmMGU2ZjMwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKKworI2luY2x1ZGUgIldlYkluc3BlY3Rv
clByb3h5LmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0cnVjdCBfV2Vi
S2l0SW5zcGVjdG9yV2luZG93IHsKKyAgICBHdGtXaW5kb3cgcGFyZW50OworCisgICAgR3RrV2lk
Z2V0KiBoZWFkZXJCYXI7Cit9OworCitzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNz
IHsKKyAgICBHdGtXaW5kb3dDbGFzcyBwYXJlbnQ7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktp
dEluc3BlY3RvcldpbmRvdywgd2Via2l0X2luc3BlY3Rvcl93aW5kb3csIEdUS19UWVBFX1dJTkRP
VykKKworc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfY2xhc3NfaW5pdChXZWJL
aXRJbnNwZWN0b3JXaW5kb3dDbGFzcyopCit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pbnNw
ZWN0b3Jfd2luZG93X2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3cpCit7CisgICAg
d2luZG93LT5oZWFkZXJCYXIgPSBndGtfaGVhZGVyX2Jhcl9uZXcoKTsKKyAgICBndGtfaGVhZGVy
X2Jhcl9zZXRfdGl0bGUoR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBfKCJXZWIg
SW5zcGVjdG9yIikpOworICAgIGd0a19oZWFkZXJfYmFyX3NldF9zaG93X2Nsb3NlX2J1dHRvbihH
VEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIFRSVUUpOworICAgIGd0a193aW5kb3df
c2V0X3RpdGxlYmFyKEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT5oZWFkZXJCYXIpOworICAg
IGd0a193aWRnZXRfc2hvdyh3aW5kb3ctPmhlYWRlckJhcik7Cit9CisKK0d0a1dpZGdldCogd2Vi
a2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KQoreworICAgIHJldHVybiBH
VEtfV0lER0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCAidHlw
ZSIsIEdUS19XSU5ET1dfVE9QTEVWRUwsICJ0cmFuc2llbnQtZm9yIiwgcGFyZW50LAorICAgICAg
ICAiZGVmYXVsdC13aWR0aCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgs
ICJkZWZhdWx0LWhlaWdodCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0
LCBudWxscHRyKSk7Cit9CisKK3ZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUo
V2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIHN1YnRpdGxlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1cod2luZG93KSk7
CisKKyAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc3VidGl0bGUoR1RLX0hFQURFUl9CQVIod2luZG93
LT5oZWFkZXJCYXIpLCBzdWJ0aXRsZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJkYzI4ZDEwOWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdElu
c3BlY3RvcldpbmRvdy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJ
TkRPVyAgICAgICAgICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJL
aXRJbnNwZWN0b3JXaW5kb3cpKQorI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9JTlNQRUNUT1JfV0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQorI2RlZmlu
ZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKKyNkZWZp
bmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0
SW5zcGVjdG9yV2luZG93Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9y
V2luZG93IFdlYktpdEluc3BlY3RvcldpbmRvdzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzczsKKworR1R5cGUgd2Vi
a2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7CisKK0d0a1dpZGdldCogd2Via2l0
SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKK3ZvaWQgd2Via2l0SW5zcGVj
dG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiwgY29uc3QgY2hhciog
c3VidGl0bGUpOworCitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE5ODM5MWM0MjBjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBIaWdobGlnaHQ7Cit9CisKK0BpbnRlcmZhY2UgV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3IDogVUlWaWV3IHsKKyAgICBOU011dGFibGVBcnJheSAqX2xheWVy
czsgLy8gQ0FTaGFwZUxheWVycy4KK30KKy0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpI
aWdobGlnaHQmKWhpZ2hsaWdodDsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdo
bGlnaHRWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNjVm
MGMwM2UzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCkBAIC0wLDAgKzEsMjgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFdlYkNv
cmUvRmxvYXRRdWFkLmg+CisjaW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKworQGltcGxlbWVudGF0aW9uIFdL
SW5zcGVjdG9ySGlnaGxpZ2h0VmlldworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZToo
Q0dSZWN0KWZyYW1lCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZy
YW1lXSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2xheWVycyA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICBbX2xheWVycyByZWxlYXNlXTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpX3JlbW92ZUFsbExheWVycworewor
ICAgIGZvciAoQ0FTaGFwZUxheWVyICpsYXllciBpbiBfbGF5ZXJzKQorICAgICAgICBbbGF5ZXIg
cmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtfbGF5ZXJzIHJlbW92ZUFsbE9iamVjdHNdOwor
fQorCistICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIpbnVtTGF5ZXJzCit7CisgICAg
aWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBudW1MYXllcnMpCisgICAgICAgIHJldHVybjsKKworICAg
IFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgbnVtTGF5ZXJzOyArK2kpIHsKKyAgICAgICAgQ0FTaGFwZUxheWVyICpsYXllciA9IFtbQ0FT
aGFwZUxheWVyIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW19sYXllcnMgYWRkT2JqZWN0OmxheWVy
XTsKKyAgICAgICAgW3NlbGYubGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOworICAgICAgICBbbGF5
ZXIgcmVsZWFzZV07CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBmaW5kSW50ZXJzZWN0aW9uT25M
aW5lQmV0d2VlblBvaW50cyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwMSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcDIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGQxLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMiwgV2ViQ29yZTo6RmxvYXRQb2ludCYgaW50ZXJzZWN0
aW9uKSAKK3sKKyAgICAvLyBEbyB0aGUgbGluZXMgaW50ZXJzZWN0PworICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgaWYgKCFmaW5kSW50ZXJz
ZWN0aW9uKHAxLCBwMiwgZDEsIGQyLCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0
aGUgdHdvIHBvaW50cyBvbiB0aGUgbGluZT8KKyAgICBpZiAocDEueCgpID49IHAyLngoKSkgewor
ICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDEueCgpIHx8IHRl
bXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAyLngoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9u
UG9pbnQueCgpID4gcDIueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAx
LngoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLnkoKSA+
PSBwMi55KCkpIHsKKyAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+
IHAxLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMi55KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHRlbXBvcmFy
eUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAyLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Q
b2ludC55KCkgPCBwMS55KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaW50ZXJzZWN0aW9uID0gdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKy8vIFRoaXMgcXVhZCBpbnRlcnNlY3Rpb24gd29ya3MgYmVjYXVzZSB0aGUg
dHdvIHF1YWRzIGFyZSBrbm93biB0byBiZSBhdCB0aGUgc2FtZQorLy8gcm90YXRpb24gYW5kIGNs
b2Nrd2lzZS1uZXNzLgorc3RhdGljIFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkSW50ZXJzZWN0aW9u
KFdlYkNvcmU6OkZsb2F0UXVhZCBib3VuZHMsIFdlYkNvcmU6OkZsb2F0UXVhZCB0b0NsYW1wKQor
eworICAgIC8vIFJlc3VsdGluZyBwb2ludHMuCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwMSwg
cDIsIHAzLCBwNDsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQxID0gZmFsc2U7CisgICAgYm9vbCBj
b250YWluc1BvaW50MiA9IGZhbHNlOworICAgIGJvb2wgY29udGFpbnNQb2ludDMgPSBmYWxzZTsK
KyAgICBib29sIGNvbnRhaW5zUG9pbnQ0ID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQ
b2ludDEgPSBmYWxzZTsKKyAgICBib29sIGludGVyc2VjdEZvclBvaW50MiA9IGZhbHNlOworICAg
IGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQ
b2ludDQgPSBmYWxzZTsKKworICAgIC8vIFRvcCAvIGJvdHRvbSB2ZXJ0aWNhbCBjbGFtcGluZy4K
KyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMSgpKSkgeworICAgICAgICBj
b250YWluc1BvaW50MSA9IHRydWU7CisgICAgICAgIHAxID0gdG9DbGFtcC5wMSgpOworICAgIH0g
ZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDEgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0
d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFt
cC5wNCgpLCBwMSkpKQorICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsKKworICAgIGlmIChib3Vu
ZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAyKCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQy
ID0gdHJ1ZTsKKyAgICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7CisgICAgfSBlbHNlIGlmICghKGlu
dGVyc2VjdEZvclBvaW50MiA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJv
dW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9DbGFtcC5wMigpLCB0b0NsYW1wLnAzKCksIHAyKSkp
CisgICAgICAgIHAyID0gdG9DbGFtcC5wMigpOworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1Bv
aW50KHRvQ2xhbXAucDMoKSkpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDMgPSB0cnVlOworICAg
ICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKKyAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9p
bnQzID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnA0KCksIGJv
dW5kcy5wMygpLCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwgcDMpKSkKKyAgICAgICAgcDMg
PSB0b0NsYW1wLnAzKCk7CisKKyAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5w
NCgpKSkgeworICAgICAgICBjb250YWluc1BvaW50NCA9IHRydWU7CisgICAgICAgIHA0ID0gdG9D
bGFtcC5wNCgpOworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDQgPSBmaW5kSW50
ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRv
Q2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwNCkpKQorICAgICAgICBwNCA9IHRvQ2xhbXAucDQo
KTsKKworICAgIC8vIElmIG9ubHkgb25lIG9mIHRoZSBwb2ludHMgaW50ZXJzZWN0ZWQgb24gZWl0
aGVyIHRoZSB0b3Agb3IgYm90dG9tIGxpbmUgdGhlbiB3ZQorICAgIC8vIGNhbiBjbGFtcCB0aGUg
b3RoZXIgcG9pbnQgb24gdGhhdCBsaW5lIHRvIHRoZSBjb3JuZXIgb2YgdGhlIGJvdW5kcy4KKyAg
ICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmIGludGVyc2VjdEZvclBvaW50MiAmJiAhaW50ZXJzZWN0
Rm9yUG9pbnQxKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1ZTsKKyAgICAgICAgcDEg
PSBib3VuZHMucDEoKTsKKyAgICB9IGVsc2UgaWYgKCFjb250YWluc1BvaW50MiAmJiBpbnRlcnNl
Y3RGb3JQb2ludDEgJiYgIWludGVyc2VjdEZvclBvaW50MikgeworICAgICAgICBjb250YWluc1Bv
aW50MiA9IHRydWU7CisgICAgICAgIHAyID0gYm91bmRzLnAyKCk7CisgICAgfQorICAgIGlmICgh
Y29udGFpbnNQb2ludDQgJiYgaW50ZXJzZWN0Rm9yUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQb2lu
dDQpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOworICAgICAgICBwNCA9IGJvdW5k
cy5wNCgpOworICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQzICYmIGludGVyc2VjdEZvclBv
aW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQzID0g
dHJ1ZTsKKyAgICAgICAgcDMgPSBib3VuZHMucDMoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2Ug
b25seSBuZWVkIHRvIHBlcmZvcm0gaG9yaXpvbnRhbCBjbGFtcGluZyBmb3IgdW5hZGp1c3RlZCBw
b2ludHMuCisgICAgaWYgKCFjb250YWluc1BvaW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQyKQor
ICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDIoKSwg
Ym91bmRzLnAzKCksIHAxLCBwMiwgcDIpOworICAgIGlmICghY29udGFpbnNQb2ludDMgJiYgIWlu
dGVyc2VjdEZvclBvaW50MykKKyAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Q
b2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwNCwgcDMsIHAzKTsKKyAgICBpZiAoIWNv
bnRhaW5zUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2ludDEpCisgICAgICAgIGZpbmRJbnRlcnNl
Y3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwgcDEsIHAy
LCBwMSk7CisgICAgaWYgKCFjb250YWluc1BvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KQor
ICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwg
Ym91bmRzLnA0KCksIHA0LCBwMywgcDQpOworCisgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UXVh
ZChwMSwgcDIsIHAzLCBwNCk7Cit9CisKK3N0YXRpYyB2b2lkIGxheWVyUGF0aFdpdGhIb2xlKENB
U2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIGhvbGVRdWFkKQoreworICAgIC8vIE5vdGhpbmcgdG8g
c2hvdy4KKyAgICBpZiAob3V0ZXJRdWFkID09IGhvbGVRdWFkIHx8IGhvbGVRdWFkLmNvbnRhaW5z
UXVhZChvdXRlclF1YWQpKSB7CisgICAgICAgIGxheWVyLnBhdGggPSBOVUxMOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMgYSBuZWdhdGl2ZSBtYXJnaW4gLyBw
YWRkaW5nIHRoZW4gdGhlIG91dGVyIGJveCBtaWdodCBub3QKKyAgICAvLyBmdWxseSBjb250YWlu
IHRoZSBob2xlIGJveC4gSW4gc3VjaCBjYXNlcyB3ZSByZWNhbGN1bGF0ZSB0aGUgaG9sZSB0bwor
ICAgIC8vIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBxdWFkcy4KKyAgICBXZWJDb3Jl
OjpGbG9hdFF1YWQgaW5uZXJIb2xlOworICAgIGlmIChvdXRlclF1YWQuY29udGFpbnNRdWFkKGhv
bGVRdWFkKSkKKyAgICAgICAgaW5uZXJIb2xlID0gaG9sZVF1YWQ7CisgICAgZWxzZQorICAgICAg
ICBpbm5lckhvbGUgPSBxdWFkSW50ZXJzZWN0aW9uKG91dGVyUXVhZCwgaG9sZVF1YWQpOworCisg
ICAgLy8gQ2xvY2t3aXNlIGluc2lkZSByZWN0IChob2xlKSwgQ291bnRlci1DbG9ja3dpc2Ugb3V0
c2lkZSByZWN0IChmaWxsKS4KKyAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVh
dGVNdXRhYmxlKCk7CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAx
KCkueCgpLCBpbm5lckhvbGUucDEoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBh
dGgsIDAsIGlubmVySG9sZS5wMigpLngoKSwgaW5uZXJIb2xlLnAyKCkueSgpKTsKKyAgICBDR1Bh
dGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDMoKS54KCksIGlubmVySG9sZS5w
MygpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnA0
KCkueCgpLCBpbm5lckhvbGUucDQoKS55KCkpOworICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgs
IDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKKyAgICBDR1BhdGhB
ZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgp
LnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCku
eCgpLCBvdXRlclF1YWQucDMoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgs
IDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAgICBsYXllci5w
YXRoID0gcGF0aDsKKyAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBs
YXllclBhdGgoQ0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBv
dXRlclF1YWQpCit7CisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0
YWJsZSgpOworICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngo
KSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAw
LCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7CisgICAgQ0dQYXRoQWRk
TGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55
KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngo
KSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAgICBsYXllci5wYXRoID0gcGF0aDsKKyAgICBDR1Bh
dGhSZWxlYXNlKHBhdGgpOworfQorCistICh2b2lkKV9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0Oihj
b25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodCBvZmZzZXQ6KHVuc2lnbmVkKW9mZnNl
dAoreworICAgIEFTU0VSVChbX2xheWVycyBjb3VudF0gPj0gb2Zmc2V0ICsgNCk7CisgICAgQVNT
RVJUKGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPj0gb2Zmc2V0ICsgNCk7CisgICAgaWYgKFtfbGF5
ZXJzIGNvdW50XSA8IG9mZnNldCArIDQgfHwgaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSA8IG9mZnNl
dCArIDQpCisgICAgICAgIHJldHVybjsKKworICAgIENBU2hhcGVMYXllciAqbWFyZ2luTGF5ZXIg
PSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldF07CisgICAgQ0FTaGFwZUxheWVyICpib3Jk
ZXJMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgMV07CisgICAgQ0FTaGFw
ZUxheWVyICpwYWRkaW5nTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDJd
OworICAgIENBU2hhcGVMYXllciAqY29udGVudExheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRl
eDpvZmZzZXQgKyAzXTsKKworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBtYXJnaW5RdWFkID0gaGln
aGxpZ2h0LnF1YWRzW29mZnNldF07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIGJvcmRlclF1YWQg
PSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMV07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIHBh
ZGRpbmdRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDJdOworICAgIFdlYkNvcmU6OkZs
b2F0UXVhZCBjb250ZW50UXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAzXTsKKworICAg
IG1hcmdpbkxheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0Lm1hcmdpbkNv
bG9yKTsKKyAgICBib3JkZXJMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdo
dC5ib3JkZXJDb2xvcik7CisgICAgcGFkZGluZ0xheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29s
b3IoaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7CisgICAgY29udGVudExheWVyLmZpbGxDb2xvciA9
IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7CisKKyAgICBsYXllclBhdGhX
aXRoSG9sZShtYXJnaW5MYXllciwgbWFyZ2luUXVhZCwgYm9yZGVyUXVhZCk7CisgICAgbGF5ZXJQ
YXRoV2l0aEhvbGUoYm9yZGVyTGF5ZXIsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkKTsKKyAgICBs
YXllclBhdGhXaXRoSG9sZShwYWRkaW5nTGF5ZXIsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCk7
CisgICAgbGF5ZXJQYXRoKGNvbnRlbnRMYXllciwgY29udGVudFF1YWQpOworfQorCistICh2b2lk
KV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0Jilo
aWdobGlnaHQKK3sKKyAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5zaXplKCkpIHsKKyAgICAgICAg
W3NlbGYgX3JlbW92ZUFsbExheWVyc107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBub2RlQ291bnQgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgpIC8gNDsKKyAgICBbc2Vs
ZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3VudCAqIDRdOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vZGVDb3VudDsgKytpKQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUhpZ2hs
aWdodDpoaWdobGlnaHQgb2Zmc2V0OmkgKiA0XTsKK30KKworLSAodm9pZClfbGF5b3V0Rm9yUmVj
dHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Cit7CisgICAg
TlNVSW50ZWdlciBudW1MYXllcnMgPSBoaWdobGlnaHQucXVhZHMuc2l6ZSgpOworICAgIGlmICgh
bnVtTGF5ZXJzKSB7CisgICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgW3NlbGYgX2NyZWF0ZUxheWVyczpudW1MYXllcnNdOworCisg
ICAgQ0dDb2xvclJlZiBjb250ZW50Q29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5jb250
ZW50Q29sb3IpOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytp
KSB7CisgICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4
OmldOworICAgICAgICBsYXllci5maWxsQ29sb3IgPSBjb250ZW50Q29sb3I7CisgICAgICAgIGxh
eWVyUGF0aChsYXllciwgaGlnaGxpZ2h0LnF1YWRzW2ldKTsKKyAgICB9Cit9CisKKy0gKHZvaWQp
dXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAoreworICAgIGlmICho
aWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpOb2RlIHx8IGhpZ2hsaWdo
dC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGVMaXN0KQorICAgICAgICBbc2Vs
ZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6aGlnaGxpZ2h0XTsKKyAgICBlbHNlIGlmICho
aWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpSZWN0cykKKyAgICAgICAg
W3NlbGYgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0OmhpZ2hsaWdodF07Cit9CisKK0BlbmQKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9z
L1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmYmE2OTVl
NmJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCkBAIC0wLDAgKzEs
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8
VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplci5oPgorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVjb2duaXplcgorLSAoQ0dQb2lu
dClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldzsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDY3ZmU3YmNjZGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVj
dG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1w
b3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyU3ViY2xhc3MuaD4KKyNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1
cmVSZWNvZ25pemVyIHsKKyAgICBSZXRhaW5QdHI8VUlUb3VjaD4gX3RvdWNoOworfQorCistIChD
R1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Cit7CisgICAgcmV0dXJuIFtfdG91
Y2ggbG9jYXRpb25JblZpZXc6dmlld107Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NUb3VjaGVzOihO
U1NldCAqKXRvdWNoZXMgc3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSluZXdTdGF0ZQor
eworICAgIEFTU0VSVChfdG91Y2gpOworICAgIGlmIChbdG91Y2hlcyBjb250YWluc09iamVjdDpf
dG91Y2guZ2V0KCldKQorICAgICAgICBzZWxmLnN0YXRlID0gbmV3U3RhdGU7Cit9CisKKy0gKHZv
aWQpdG91Y2hlc0JlZ2FuOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZl
bnQKK3sKKyAgICBpZiAoc2VsZi5zdGF0ZSAhPSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3Nz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFfdG91Y2gpOworICAgIF90b3Vj
aCA9IFt0b3VjaGVzIGFueU9iamVjdF07CisKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91
Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbl07Cit9CisKKy0gKHZvaWQp
dG91Y2hlc01vdmVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQK
K3sKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVDaGFuZ2VkXTsKK30KKworLSAodm9pZCl0b3VjaGVzRW5kZWQ6KE5TU2V0ICop
dG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAoreworICAgIFtzZWxmIF9wcm9jZXNz
VG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkXTsKK30K
KworLSAodm9pZCl0b3VjaGVzQ2FuY2VsbGVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihV
SUV2ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0
ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWRdOworfQorCistICh2b2lkKXJlc2V0
Cit7CisgICAgX3RvdWNoID0gbmlsOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjRhYmRlYjVmNmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpAQCAtMCww
ICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlN
ZXNzYWdlcy5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2lt
cG9ydCAiV0tGcmFtZUluZm8uaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
aCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkFjdGlvbi5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9u
RGVsZWdhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQ
YWdlUHJveHkuaCIKKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5l
bC5oPgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNl
NjQuaD4KKworQGludGVyZmFjZSBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIg
OiBOU09iamVjdCA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRl
bGVnYXRlPiB7CisgICAgV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3Rv
clByb3h5OworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
CisKKy0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0
OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBpZiAoX2lu
c3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJv
eHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndp
ZHRoKCksIDApOworICAgIHJldHVybiByZWN0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eSopaW5zcGVjdG9yUHJveHkKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3Rv
clZpZXdDb250cm9sbGVyCit7CisgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgp
OworfQorCistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRl
c3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgor
eworICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCk7Cit9CisKK0BlbmQK
KworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0tXZWJW
aWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6d2ViVmlldygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW5zcGVjdG9yVmlldy5nZXQoKS53ZWJWaWV3OworfQorCitXZWJQYWdlUHJveHkqIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpCit7CisgICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
dGhpc10pOworCisgICAgbV9pbnNwZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTpudWxscHRyXSk7CisgICAg
W21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsK
KworICAgIG1fd2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93
KE5TWmVyb1JlY3QsIFdlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVt
b3RlKTsKKyAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Cisg
ICAgW21fd2luZG93IHNldEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JX
aW5kb3dGcmFtZSJdOworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgp
LmNvbnRlbnRWaWV3OworICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRz
XTsKKyAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOworCisgICAgcmV0dXJu
IHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX3dp
bmRvdykgeworICAgICAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21f
d2luZG93IGNsb3NlXTsKKyAgICAgICAgbV93aW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgaWYg
KG1faW5zcGVjdG9yVmlldykgeworICAgICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERl
bGVnYXRlOm5pbF07CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsKKyAgICB9CisKKyAg
ICBpZiAobV9vYmpDQWRhcHRlcikKKyAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAg
ICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVVc2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3NhdmVO
YW1lXV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdU
b0Zyb250KCkKK3sKKyAgICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKKyAg
ICBbbV93aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9y
Y2VTYXZlRGlhbG9nKQoreworICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclBy
b3h5TWFjLgorCisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAg
ICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdn
ZXN0ZWRVUkwpLmdldCgpOworICAgIGlmICghcGxhdGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZv
cm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBU
aGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8g
dGhlbS4KKyAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcg
c3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKKyAgICBTdHJpbmcgY29udGVudENvcHkg
PSBjb250ZW50OworCisgICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsK
KyAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVh
bFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKKworICAgICAgICBpZiAo
YmFzZTY0RW5jb2RlZCkgeworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAg
ICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFk
ZGluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUmV0YWluUHRyPE5T
RGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVz
Om91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVu
dCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6
WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOworCisgICAgICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQ
YWdlLT53ZWJQYWdlSUQoKSk7CisgICAgfTsKKworICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7
CisgICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAg
ICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9u
ZW50OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQg
dGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKKyAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0
b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQg
YmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cu
CisgICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5
VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAg
ICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAg
IGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAg
c2F2ZVRvVVJMKHBhbmVsLlVSTCk7CisgICAgfTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBt
X3dpbmRvdyA/IG1fd2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdp
bmRvdykKKyAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29t
cGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5z
cGVjdG9yUHJveHlNYWMuCisKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwor
ICAgIAorICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVh
bFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0
aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisg
ICAgaWYgKCFhY3R1YWxVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAq
aGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVS
TC5nZXQoKSBlcnJvcjpOVUxMXTsKKyAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAg
W2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddXTsKKyAgICBbaGFuZGxlIGNsb3NlRmlsZV07CisKKyAgICBXZWJQYWdlUHJveHkq
IGluc3BlY3RvclBhZ2UgPSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOworICAgIGluc3BlY3RvclBh
Z2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBw
ZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlE
KCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJlY3QgPSByZWN0Owor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJh
ZygpCit7CisgICAgd2ViVmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYgdXJsKQoreworICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOnVybF1dOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNl
cnRpZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkp
OworCisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9
IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKworICAgIEFTU0VS
VChtX3dpbmRvdyk7CisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2Vy
dGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVs
ZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpj
ZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKKyNlbHNlCisgICAgW2NlcnRp
ZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVn
YXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNh
dGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3Jv
dXA6WUVTXTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUg
dHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZp
ZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5kLgorICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0
aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOworICAgIFtj
ZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107CisgICAgW2NlcnRpZmljYXRlVmll
dyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlE
ZXRhaWxzOllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllF
U107Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjA4YmQwOGZmOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0
aW9uLmg+CisjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKwor
T0JKQ19DTEFTUyBXS1dlYlZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFn
ZVByb3h5OworfQorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRl
OworCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFdLV2ViVmlldyAqd2ViVmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+
KWluc3BlY3RlZFBhZ2U7CisKKysgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmlldzooTlNWaWV3
ICopdmlldzsKKworQGVuZAorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRl
bGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJv
bGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXI7CistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVj
dG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3
Q29udHJvbGxlcjsKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93
OihOU1dpbmRvdyAqKW5ld1dpbmRvdzsKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJE
aWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3
Q29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5MjYzZTBmZDZlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCisKKyNpZiBQ
TEFURk9STShNQUMpCisKKyNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKKyNpbXBvcnQgIlZlcnNp
b25DaGVja3MuaCIKKyNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCisjaW1wb3J0ICJXS0luc3BlY3Rv
cldLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW1wb3J0ICJX
S05hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmgi
CisjaW1wb3J0ICJXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tQcm9jZXNzUG9v
bEludGVybmFsLmgiCisjaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0
ZS5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbXBvcnQgIldlYkluc3BlY3Rv
clV0aWxpdGllcy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDx3dGYvV2Vh
a09iakNQdHIuaD4KKworQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICgpIDxX
S1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS0luc3BlY3RvcldLV2ViVmlld0Rl
bGVnYXRlPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB7CisgICAgTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9pbnNwZWN0ZWRQYWdlOwor
ICAgIFJldGFpblB0cjxXS0luc3BlY3RvcldLV2ViVmlldz4gX3dlYlZpZXc7CisgICAgV2Vha09i
akNQdHI8aWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2Vi
S2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBhZ2UKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIFRoZSAobG9jYWwpIGlu
c3BlY3RlZCBwYWdlIGlzIG5pbCBpZiB0aGUgY29udHJvbGxlciBpcyBob3N0aW5nIGEgUmVtb3Rl
IFdlYiBJbnNwZWN0b3Igdmlldy4KKyAgICBfaW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKF93
ZWJWaWV3KSB7CisgICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5pbF07CisgICAgICAg
IFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW193ZWJWaWV3
IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOm5pbF07CisgICAgICAgIF93ZWJWaWV3ID0g
bmlsOworICAgIH0KKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoaWQgPFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVn
YXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQorCistIChXS1dlYlZpZXcgKil3ZWJWaWV3Cit7Cisg
ICAgLy8gQ29uc3RydWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIGRlbGVnYXRl
IGJlZm9yZSB0aGUgV2ViVmlldyBpcyBjcmVhdGVkLgorICAgIGlmICghX3dlYlZpZXcpIHsKKyAg
ICAgICAgTlNSZWN0IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpXZWJJ
bnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsKKyAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5TKFtb
V0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1lIGNv
bmZpZ3VyYXRpb246W3NlbGYgY29uZmlndXJhdGlvbl1dKTsKKyAgICAgICAgW193ZWJWaWV3IHNl
dFVJRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdh
dGU6c2VsZl07CisgICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZTpzZWxmXTsKKyAgICAgICAgW193ZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRl
bnRJbnNldHM6Tk9dOworICAgICAgICBbX3dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6
WUVTXTsKKyAgICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhT
aXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07CisgICAgfQorCisgICAgcmV0dXJuIF93ZWJW
aWV3LmdldCgpOworfQorCistICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRl
OworfQorCistIChXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAg
IGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CisKKyAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IGNvbmZpZ3Vy
YXRpb24uZ2V0KCkucHJlZmVyZW5jZXM7CisgICAgcHJlZmVyZW5jZXMuX2FsbG93RmlsZUFjY2Vz
c0Zyb21GaWxlVVJMcyA9IFlFUzsKKyAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJz
YWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKKyAgICBwcmVmZXJlbmNlcy5fc3RvcmFnZUJsb2Nr
aW5nUG9saWN5ID0gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QWxsb3dBbGw7CisgICAgcHJlZmVy
ZW5jZXMuX2phdmFTY3JpcHRSdW50aW1lRmxhZ3MgPSAwOworCisjaWZuZGVmIE5ERUJVRworICAg
IC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1
ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJlbmNlcy5fZGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IFlFUzsKKyAgICBwcmVmZXJlbmNlcy5fbG9nc1BhZ2VNZXNz
YWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQgPSBZRVM7CisjZW5kaWYKKworICAgIHByZWZlcmVu
Y2VzLl9kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQgPSBZRVM7CisKKyAgICBpZiAoISFfZGVsZWdh
dGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZp
ZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KV0pIHsKKyAgICAgICAgaWYgKFtfZGVs
ZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpzZWxmXSkg
eworICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdF
bmFibGVkID0gTk87CisgICAgICAgICAgICBwcmVmZXJlbmNlcy5fcGFnZVZpc2liaWxpdHlCYXNl
ZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQgPSBOTzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFtjb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29sOndyYXBwZXIoV2ViS2l0OjppbnNwZWN0b3JQ
cm9jZXNzUG9vbChXZWJLaXQ6Omluc3BlY3RvckxldmVsRm9yUGFnZShfaW5zcGVjdGVkUGFnZSkp
KV07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEdyb3VwSWRlbnRpZmllcjpXZWJLaXQ6Omluc3Bl
Y3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKV07CisKKyAgICBy
ZXR1cm4gY29uZmlndXJhdGlvbi5hdXRvcmVsZWFzZSgpOworfQorCisrIChCT09MKXZpZXdJc0lu
c3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW3ZpZXcgaXNLaW5k
T2ZDbGFzczpbV0tJbnNwZWN0b3JXS1dlYlZpZXcgY2xhc3NdXTsKK30KKworLy8gTUFSSzogV0tV
SURlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQ0dSZWN0KSlj
b21wbGV0aW9uSGFuZGxlcgoreworICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQorICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDR1JlY3RaZXJvKTsKKyAgICBlbHNlCisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKE5TUmVjdFRvQ0dSZWN0KFt3ZWJWaWV3IGZyYW1lXSkpOworfQorCist
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOihDR1Jl
Y3QpZnJhbWUKK3sKKyAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgcmV0
dXJuOworCisgICAgW193ZWJWaWV3LmdldCgpLndpbmRvdyBzZXRGcmFtZTpOU1JlY3RGcm9tQ0dS
ZWN0KGZyYW1lKSBkaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyBydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczooV0tPcGVuUGFuZWxQYXJhbWV0
ZXJzICopcGFyYW1ldGVycyBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVVJMICo+ICpVUkxzKSljb21wbGV0
aW9uSGFuZGxlcgoreworICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFuZWwg
b3BlblBhbmVsXTsKKyAgICBvcGVuUGFuZWwuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBwYXJh
bWV0ZXJzLmFsbG93c011bHRpcGxlU2VsZWN0aW9uOworCisgICAgYXV0byByZXBvcnRTZWxlY3Rl
ZEZpbGVzID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNN
b2RhbFJlc3BvbnNlT0spCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihvcGVuUGFuZWwu
VVJMcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7
CisgICAgfTsKKworICAgIGlmIChfd2ViVmlldy5nZXQoKS53aW5kb3cpCisgICAgICAgIFtvcGVu
UGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93Ol93ZWJWaWV3LmdldCgpLndpbmRvdyBjb21w
bGV0aW9uSGFuZGxlcjpyZXBvcnRTZWxlY3RlZEZpbGVzXTsKKyAgICBlbHNlCisgICAgICAgIHJl
cG9ydFNlbGVjdGVkRmlsZXMoW29wZW5QYW5lbCBydW5Nb2RhbF0pOworfQorCistICh2b2lkKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjooV0tTZWN1cml0eU9yaWdpbiAqKXNlY3VyaXR5T3JpZ2luIGN1cnJlbnRRdW90YToo
dW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6KHVuc2ln
bmVkIGxvbmcgbG9uZyljdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6KHVu
c2lnbmVkIGxvbmcgbG9uZyljdXJyZW50VXNhZ2UgZXhwZWN0ZWRVc2FnZToodW5zaWduZWQgbG9u
ZyBsb25nKWV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKSh1bnNpZ25lZCBs
b25nIGxvbmcgbmV3UXVvdGEpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIGRlY2lzaW9uSGFuZGxl
cihzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2Fn
ZSAqIDEuMjUpKTsKK30KKworLSAoTlNNZW51ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgY29udGV4dE1lbnU6KE5TTWVudSAqKW1lbnUgZm9yRWxlbWVudDooX1dLQ29udGV4dE1lbnVF
bGVtZW50SW5mbyAqKWVsZW1lbnQKK3sKKyAgICBmb3IgKE5TSW50ZWdlciBpID0gbWVudS5udW1i
ZXJPZkl0ZW1zIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqaXRlbSA9
IFttZW51IGl0ZW1BdEluZGV4OmldOworICAgICAgICBzd2l0Y2ggKGl0ZW0udGFnKSB7CisgICAg
ICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAg
ICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAg
ICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAg
ICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAg
ICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAg
ICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAg
ICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAg
ICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAg
ICAgICAgIFttZW51IHJlbW92ZUl0ZW1BdEluZGV4OmldOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWVudTsKK30KKworLy8gTUFSSzogV0tOYXZp
Z2F0aW9uRGVsZWdhdGUgbWV0aG9kcworCistICh2b2lkKXdlYlZpZXdXZWJDb250ZW50UHJvY2Vz
c0RpZFRlcm1pbmF0ZTooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghIV9kZWxlZ2F0
ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOnNlbGZdOworfQorCistICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRs
ZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCit7
CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAg
IGlmICghbmF2aWdhdGlvbkFjdGlvbi50YXJnZXRGcmFtZS5pc01haW5GcmFtZSkgeworICAgICAg
ICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNw
ZWN0b3IgZmlsZS4KKyAgICBpZiAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JU
ZXN0SW5zcGVjdG9yUGFnZShuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMKSkgeworICAgICAg
ICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UuCisgICAg
ZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAgCisg
ICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgaWYg
KF9pbnNwZWN0ZWRQYWdlKQorICAgICAgICBfaW5zcGVjdGVkUGFnZS0+bG9hZFJlcXVlc3QobmF2
aWdhdGlvbkFjdGlvbi5yZXF1ZXN0KTsKK30KKworLy8gTUFSSzogV0tJbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihX
S0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIV9pbnNwZWN0ZWRQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6UmVsb2FkT3B0aW9u
PiByZWxvYWRPcHRpb25zOworICAgIGlmIChXZWJLaXQ6OmxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6
OlNES1ZlcnNpb246OkZpcnN0V2l0aEV4cGlyZWRPbmx5UmVsb2FkQmVoYXZpb3IpKQorICAgICAg
ICByZWxvYWRPcHRpb25zLmFkZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KTsK
KworICAgIF9pbnNwZWN0ZWRQYWdlLT5yZWxvYWQocmVsb2FkT3B0aW9ucyk7Cit9CisKKy0gKHZv
aWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dlYlZp
ZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgX2luc3BlY3RlZFBhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkZy
b21PcmlnaW4pOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JX
S1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93
Cit7CisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjp3aWxsTW92ZVRvV2luZG93OildKQor
ICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyOnNlbGYgd2lsbE1vdmVU
b1dpbmRvdzpuZXdXaW5kb3ddOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1v
dmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEh
X2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzopXSkKKyAgICAgICAgW19kZWxlZ2F0
ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzpzZWxmXTsKK30KKworQGVu
ZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNTdlNzdjZmU3ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0
b3JXS1dlYlZpZXcuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKwor
QHByb3RvY29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7CisKK0BpbnRlcmZhY2UgV0tJ
bnNwZWN0b3JXS1dlYlZpZXcgOiBXS1dlYlZpZXcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFr
KSBpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4gaW5zcGVjdG9yV0tXZWJWaWV3RGVs
ZWdhdGU7CitAZW5kCisKK0Bwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlCitA
cmVxdWlyZWQKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldL
V2ViVmlldyAqKXdlYlZpZXc7CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21P
cmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKKy0gKHZvaWQpaW5zcGVjdG9y
V0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2lsbE1vdmVUb1dpbmRv
dzooTlNXaW5kb3cgKiluZXdXaW5kb3c7CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1v
dmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OworQGVuZAorCisjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRiZmVmNGEwMWJhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2Vi
Vmlldy5tbQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmlldy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQor
CisjaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQgPHd0Zi9XZWFrT2Jq
Q1B0ci5oPgorCitAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JXS1dlYlZpZXcgeworICAgIFdl
YWtPYmpDUHRyPGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPj4gX2luc3BlY3RvcldL
V2ViVmlld0RlbGVnYXRlOworfQorCistIChOU1JlY3QpX29wYXF1ZVJlY3RGb3JXaW5kb3dNb3Zl
V2hlbkluVGl0bGViYXIKK3sKKyAgICAvLyBUaGlzIGNvbnZpbmNlcyBBcHBLaXQgdG8gYWxsb3cg
d2luZG93IG1vdmVzIHdoZW4gY2xpY2tpbmcgYW55d2hlcmUgaW4gdGhlIHRpdGxlYmFyICh0b3Ag
MjJwdCkKKyAgICAvLyB3aGVuIHRoaXMgdmlldydzIGNvbnRlbnRzIGNvdmVyIHRoZSBlbnRpcmUg
d2luZG93J3MgY29udGVudHMsIGluY2x1ZGluZyB0aGUgdGl0bGViYXIuCisgICAgcmV0dXJuIE5T
WmVyb1JlY3Q7Cit9CisKKy0gKE5TSW50ZWdlcil0YWcKK3sKKyAgICByZXR1cm4gV0tJbnNwZWN0
b3JWaWV3VGFnOworfQorCistIChpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4paW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2luc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKXNldEluc3BlY3RvcldL
V2ViVmlld0RlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4pZGVsZWdh
dGUKK3sKKyAgICBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKwor
LSAoSUJBY3Rpb24pcmVsb2FkOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dl
YlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWQ6c2VsZl07Cit9CisKKy0gKElC
QWN0aW9uKXJlbG9hZEZyb21PcmlnaW46KGlkKXNlbmRlcgoreworICAgIFtzZWxmLmluc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46c2Vs
Zl07Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2lu
ZG93Cit7CisgICAgW3N1cGVyIHZpZXdXaWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107CisgICAg
W3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3OnNlbGYg
d2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9X
aW5kb3cKK3sKKyAgICBbc3VwZXIgdmlld0RpZE1vdmVUb1dpbmRvd107CisgICAgW3NlbGYuaW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93
OnNlbGZdOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiZTcyOGQ0MzVjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNw
ZWN0b3JQcm94eU1hYy5tbQpAQCAtMCwwICsxLDgwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaWYgUExB
VEZPUk0oTUFDKQorCisjaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQg
IldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLVmlld0ludGVybmFsLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlN
ZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJv
eHkuaCIKKyNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNw
ZWN0b3JXaW5kb3cuaCIKKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQ
YW5lbC5oPgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW1wb3J0IDxXZWJDb3JlL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3N0YXRpYyBjb25zdCBO
U1VJbnRlZ2VyIHdpbmRvd1N0eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNX
aW5kb3dTdHlsZU1hc2tDbG9zYWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUg
fCBOU1dpbmRvd1N0eWxlTWFza1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVD
b250ZW50VmlldzsKKworLy8gVGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZv
cmUgY2xvc2luZyBpdCBhbmQgaXRzIHByb2Nlc3MuCisvLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGlt
cHJvdmVzIHN0YXJ0IHVwIHRpbWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0
aGUgSW5zcGVjdG9yLgorc3RhdGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7
IDFfbWluIH07CisKK3N0YXRpYyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29u
dGV4dCA9ICZrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dDsKKworQGludGVyZmFj
ZSBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVsZWdhdGUsIFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3Rv
clByb3h5OworLSAodm9pZClpbnZhbGlkYXRlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgeworICAgIFdlYktpdDo6V2ViSW5zcGVjdG9y
UHJveHkqIF9pbnNwZWN0b3JQcm94eTsKK30KKworLSAoV0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9y
UmVmCit7CisgICAgcmV0dXJuIHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Cit9CisKKy0gKF9XS0lu
c3BlY3RvciAqKWluc3BlY3RvcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAg
IHJldHVybiB3cmFwcGVyKCpfaW5zcGVjdG9yUHJveHkpOworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQoreworICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9y
UHJveHksIGluc3BlY3RvclByb3h5KTsKKworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJl
ZmVyZW5jZSBjeWNsZS4KKyAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfaW5zcGVj
dG9yUHJveHkgPSBudWxscHRyOworfQorCistIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdp
bmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVj
dClyZWN0Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIE5TTWFr
ZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3Rv
clByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKwor
LSAodm9pZCl3aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorewor
ICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93
RnJhbWVEaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAg
ICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOworfQorCistICh2b2lk
KXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBp
ZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Cit9
CisKKy0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0
b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRv
d0RpZEV4aXRGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAg
IGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVs
bFNjcmVlbkRpZENoYW5nZSgpOworfQorCistICh2b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENo
YW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICAvLyBSZXNpemluZyB0
aGUgdmlld3Mgd2hpbGUgaW5zaWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCBy
ZXN1bHRzIHdoZW4gZW50ZXJpbmcKKyAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBh
dm9pZCB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBv
bmx5CisgICAgLy8gZGVwZW5kIG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0
cmFpbnRzLCBzbyBhIHNtYWxsIGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0CisgICAgLy8gb2Yg
dGhlIHRpbWUgdGhlIHZpZXdzIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBi
ZWNhdXNlIG9mIGF1dG9yZXNpemluZyBtYXNrcy4KKworICAgIGRpc3BhdGNoX2FmdGVyKERJU1BB
VENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAo
X2luc3BlY3RvclByb3h5KQorICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRW
aWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVG
b3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6
KE5TRGljdGlvbmFyeTxOU0tleVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoo
dm9pZCAqKWNvbnRleHQKK3sKKyAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVudExheW91
dE9ic2VydmVyQ29udGV4dCkgeworICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0
aDprZXlQYXRoIG9mT2JqZWN0Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0
OworICAgIEFTU0VSVChbd2luZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNzXV0pOwor
ICAgIGlmICh3aW5kb3cuaW5MaXZlUmVzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNw
YXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwg
XnsKKyAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgICAgIF9pbnNwZWN0b3JQ
cm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7CisgICAgfSk7Cit9CisKKy8vIE1B
Uks6IFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQp
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0
b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisK
Ky0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAg
cmV0dXJuIF9pbnNwZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6
IGZhbHNlOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRv
dzooTlNXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAg
ICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCistICh2b2lkKWluc3BlY3Rv
clZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQor
ICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOworfQorCitAZW5kCisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpu
ZXdWaWV3KQoreworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVt
b3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uIG9iamVjdDpvbGRWaWV3XTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6
QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVE
aWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOworCisgICAgaWYgKG1faXNBdHRh
Y2hlZCkKKyAgICAgICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRX
aW5kb3cpCit7CisgICAgaWYgKG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgeworICAg
ICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSBmYWxzZTsKKyAgICAgICAgW29s
ZFdpbmRvdyByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJj
b250ZW50TGF5b3V0UmVjdCIgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29u
dGV4dF07CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50RGlk
TW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpCit7CisgICAgaWYgKG1faXNBdHRhY2hl
ZCAmJiAhIW5ld1dpbmRvdykgeworICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJl
Y3QgPSB0cnVlOworICAgICAgICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIu
Z2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDpr
V2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07CisgICAgICAgIGluc3BlY3RlZFZp
ZXdGcmFtZURpZENoYW5nZSgpOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIGlmICghbV9pbnNwZWN0
b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVj
dGlvbkxldmVsKCk7CisgICAgaWYgKGxldmVsID4gMSkgeworICAgICAgICBOU1N0cmluZyAqZGVi
dWdUaXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJ
bnNwZWN0b3IgWyVkXSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBp
bnNwZWN0aW5nIFdlYiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5n
XTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0bGVdOworICAg
IH0gZWxzZSB7CisgICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0
b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKKyAgICAgICAgW21f
aW5zcGVjdG9yV2luZG93IHNldFRpdGxlOnRpdGxlXTsKKyAgICB9Cit9CisKK1JldGFpblB0cjxO
U1dpbmRvdz4gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBz
YXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQoreworICAg
IE5TUmVjdCB3aW5kb3dGcmFtZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8g
c2F2ZWRXaW5kb3dGcmFtZSA6IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBp
bml0aWFsV2luZG93SGVpZ2h0KTsKKyAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNw
ZWN0b3JXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVN
YXNrOndpbmRvd1N0eWxlTWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6
Tk9dKTsKKyAgICBbd2luZG93IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lk
dGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKKyAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNs
b3NlZDpOT107CisgICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29s
bGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblBy
aW1hcnkpXTsKKworICAgIGJvb2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNw
ZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlOworICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0
OmZvclJlbW90ZVRhcmdldF07CisKKyAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVu
U2l6ZSA9IChbd2luZG93IHNjcmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKKyAgICBD
R0Zsb2F0IG1pbmltdW1GdWxsU2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFw
cHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSk7CisgICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVu
Q29udGVudFNpemU6TlNNYWtlU2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2lu
ZG93SGVpZ2h0KV07CisgICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cg
Y29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVl
bkFsbG93c1RpbGluZyldOworCisgICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3Bh
cmVudDpZRVNdOworCisgICAgLy8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1l
IHdhcyBlbXB0eS4KKyAgICBpZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKKyAg
ICAgICAgW3dpbmRvdyBjZW50ZXJdOworCisgICAgcmV0dXJuIHdpbmRvdzsKK30KKworV2ViUGFn
ZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQor
eworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQ
YWdlKTsKKworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsK
KworICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7CisgICAgICAgIEFTU0VSVCht
X29iakNBZGFwdGVyKTsKKyAgICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVy
IHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKKyAgICB9CisKKyAgICBtX29iakNBZGFwdGVyID0gYWRv
cHROUyhbW1dLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJ
bnNwZWN0b3JQcm94eTp0aGlzXSk7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVj
dGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBz
ZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1Zp
ZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107CisKKyAg
ICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsK
KyAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNB
ZGFwdGVyLmdldCgpXTsKKworICAgIFdlYlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKKyAgICBBU1NFUlQo
aW5zcGVjdG9yUGFnZSk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAg
QVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7CisKKyAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dG
cmFtZVN0cmluZyA9IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5p
bnNwZWN0b3JXaW5kb3dGcmFtZSgpOworICAgIE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNS
ZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nKTsKKworICAgIG1faW5zcGVjdG9y
V2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2lu
ZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlOjpMb2NhbCk7CisgICAgW21faW5zcGVjdG9y
V2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgV0tXZWJWaWV3
ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Cisg
ICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107
CisgICAgaW5zcGVjdG9yVmlldy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNdOworICAgIFtj
b250ZW50VmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXddOworCisgICAgdXBkYXRlSW5zcGVj
dG9yV2luZG93VGl0bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9u
dGVuZFBhZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3Rvcldp
bmRvdyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgeworICAgICAgICBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAg
ICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29i
akNBZGFwdGVyKSB7CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICAgICAgW21fb2Jq
Q0FkYXB0ZXIgaW52YWxpZGF0ZV07CisgICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7CisgICAg
fQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2
aXR5VGltZXJGaXJlZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7
CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRv
dyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwor
ICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBtX2Nsb3NlRnJv
bnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Nsb3NlVGltZW91
dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFz
aCgpCit7CisgICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwor
CisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lci5zdG9wKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIGlmIChtX2lzQXR0YWNoZWQp
IHsKKyAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cg
c2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKKyAg
ICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIGluc3BlY3RlZFBhZ2UoKS0+
cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7Cisg
ICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdpbmRv
dyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcsCisgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlb3BlbiB0
aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93LgorICAg
IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3aW5kb3cg
aW4gU2FmYXJpLgorICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgd2ViVmlld10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3co
KSkgeworICAgICAgICBvcGVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBG
SVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEgYmFj
a2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93LgorICAg
IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFuZE9y
ZGVyRnJvbnQ6bmlsXTsKKyAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10u
d2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJW
aWV3XV07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpCit7CisgICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3co
KSBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkz
NzY4OD46IHRoaXMgd2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91bmQgdGFiIGlu
IFNhZmFyaSwgb25seSBhIGJhY2tncm91bmQgd2luZG93LgorICAgIHJldHVybiBtX2lzVmlzaWJs
ZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cuaXNNYWluV2lu
ZG93OworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChib29s
IHdlYlByb2Nlc3NDYW5BdHRhY2gpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5z
cGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIGlmIChbV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZpZXdd
KQorICAgICAgICByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKKworICAgIHN0YXRpYyBjb25z
dCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKKyAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7CisKKyAgICBOU1JlY3QgaW5zcGVjdGVk
Vmlld0ZyYW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKKworICAgIGZsb2F0IG1heGltdW1BdHRh
Y2hlZEhlaWdodCA9IE5TSGVpZ2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNo
ZWRIZWlnaHRSYXRpbzsKKyAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGlt
dW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3Bl
Y3RlZFZpZXdGcmFtZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0
YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKK3sKKyAgICAvLyBEbyBub3Ro
aW5nLgorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENo
YW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgbV91cmxTdHJpbmcgPSB1cmxT
dHJpbmc7CisKKyAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5p
c0VtcHR5KCkpOworCisgICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNh
dGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKwor
ICAgIE5TV2luZG93ICp3aW5kb3c7CisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAg
ICB3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHdp
bmRvdyA9IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5kb3ddOworCisg
ICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5kb3ddOworCisj
aWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBi
ZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3Rv
cjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkg
c2hvd0dyb3VwOllFU107CisjZWxzZQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRG
b3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29u
dGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8u
Y2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAgICAvLyBUaGlz
IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQs
IGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCisg
ICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVs
IGNlcnRpZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6
WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOworICAgIFtj
ZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVW
aWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7Cisg
ICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxh
dGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdl
dCgpOworICAgIGlmICghcGxhdGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0
IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAg
ICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRm
b3JtVVJMKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJM
Q29weSA9IHN1Z2dlc3RlZFVSTDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50Owor
CisgICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNT
RVJUKGFjdHVhbFVSTCk7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQo
c3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2Rl
ZCkgeworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNv
bnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkg
bGVuZ3RoOm91dC5zaXplKCldKTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJM
OmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
W2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFth
Y3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7
CisgICAgfTsKKworICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VS
TChwbGF0Zm9ybVVSTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5l
bCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRT
dHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisgICAgLy8gSWYg
d2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0
aCBhbmQKKyAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVy
d2lzZSwgdXNlIHRoZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBp
bml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3Jt
VVJMLmlzRmlsZVVSTCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJM
IFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25I
YW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNN
b2RhbFJlc3BvbnNlQ2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVS
TCk7CisgICAgfTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/
IG1faW5zcGVjdG9yV2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdp
bmRvdykKKyAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29t
cGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1
YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3Mg
dGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgor
ICAgIGlmICghYWN0dWFsVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0ZpbGVIYW5kbGUg
KmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxV
UkwuZ2V0KCkgZXJyb3I6TlVMTF07CisgICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOworICAg
IFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXV07CisgICAgW2hhbmRsZSBjbG9zZUZpbGVdOworCisgICAgbV9pbnNwZWN0b3JQ
YWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChb
YWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSgpCit7
CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOworICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7Cisg
ICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQgfHwg
IW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9pbnNwZWN0b3JX
aW5kb3cgZnJhbWVdKTsKKyAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVu
Y2VzKCkuc2V0SW5zcGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5Ojp3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NF
UlQoIW1faXNBdHRhY2hlZCk7CisgICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQo
bV9pbnNwZWN0b3JXaW5kb3cpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2li
bGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBhdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uo
Q0dGbG9hdCBjdXJyZW50RGltZW5zaW9uKQoreworICAgIGlmICghbV9pc1Zpc2libGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9pc0F0dGFjaGVkKSB7CisgICAgICAgIC8vIENoZWNr
IGlmIHRoZSBhdHRhY2ggYXZhaWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBo
ZXJlIGluIGNhc2UKKyAgICAgICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBub3QgdGhlIFdL
Vmlldy4KKyAgICAgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFj
aChjYW5BdHRhY2goKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpbnNw
ZWN0ZWRQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVmlldyAqaW5zcGVjdGVkVmll
dyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dl
YlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3
XTsKKworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1l
OworICAgIE5TUmVjdCBvbGRJbnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1l
OworICAgIE5TUmVjdCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0OworICAgIE5T
UmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHM7CisgICAg
Q0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdGcmFtZSk7CisK
KyAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpCb3R0b206IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAgICAgICAgICAg
Y3VycmVudERpbWVuc2lvbiA9IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAg
ICAgICAgQ0dGbG9hdCBwYXJlbnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3VuZHMpOworICAg
ICAgICBDR0Zsb2F0IGluc3BlY3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVuc2lvbiwgcGFy
ZW50SGVpZ2h0KTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRo
ZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgorICAgICAg
ICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3RvckhlaWdodCwgTlNX
aWR0aChwYXJlbnRCb3VuZHMpLCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsK
KyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRo
KGluc3BlY3RlZFZpZXdGcmFtZSksIGluc3BlY3RvckhlaWdodCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7CisgICAgICAgIGlmICgh
Y3VycmVudERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRo
KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9
IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dX
aWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7CisKKyAgICAgICAgLy8gUHJlc2Vy
dmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBT
YWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0CisgICAgICAgIC8vIHRvcCBwb3Np
dGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRj
aCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KKyAgICAgICAgaW5zcGVjdGVkVmlld0Zy
YW1lID0gTlNNYWtlUmVjdCgwLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNw
ZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVj
dChwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWln
aHQocGFyZW50Qm91bmRzKSk7CisKKyAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5k
b3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgeworICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRM
YXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3Rv
cldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOworICAgICAgICAgICAgbmV3
SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdG
cmFtZSwgY29udGVudExheW91dFJlY3QpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6IHsKKyAgICAgICAgaWYgKCFjdXJy
ZW50RGltZW5zaW9uKQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xk
SW5zcGVjdG9yVmlld0ZyYW1lKTsKKworICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNX
aWR0aChwYXJlbnRCb3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRo
KGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0
aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFy
aSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKKyAgICAgICAgLy8gdG9wIHBvc2l0aW9u
IGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFz
IHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUg
PSBOU01ha2VSZWN0KGluc3BlY3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3Rvcldp
ZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0g
TlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7
CisKKyAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3
LndpbmRvdykgeworICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3Bl
Y3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5
b3V0UmVjdCBmcm9tVmlldzpuaWxdOworICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1l
ID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91
dFJlY3QpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoTlNFcXVhbFJlY3RzKG9sZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVjdG9yVmlld0Zy
YW1lKSAmJiBOU0VxdWFsUmVjdHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3
RnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVz
IHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgor
ICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hd
OworCisgICAgW2luc3BlY3RvclZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsK
KyAgICBbaW5zcGVjdGVkVmlldyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVdOworfQorCit1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQo
KQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVj
dG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5z
cGVjdGVkVmlldyBmcmFtZV07CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNw
ZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdodCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3Bl
Y3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Cisg
ICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0
aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAg
ICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFj
aG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgd2ViVmlld107CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsK
KyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFtt
X2luc3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmls
OworICAgIH0KKworICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisg
ICAgQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uOworICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lk
ZSkgeworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAgICAgICAgW2luc3BlY3Rv
clZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZ
TWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRv
cmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKKyAg
ICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3Bl
Y3RvckF0dGFjaGVkV2lkdGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6TGVmdDoKKyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpO
U1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbl07CisgICAgICAgIGN1cnJlbnRE
aW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdp
ZHRoKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGluc3BlY3RlZFZpZXdGcmFtZURp
ZENoYW5nZShjdXJyZW50RGltZW5zaW9uKTsKKworICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmll
dyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0
aXZlVG86aW5zcGVjdGVkVmlld107CisgICAgW2luc3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJz
dFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3XTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1EZXRhY2goKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3Rl
ZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dlYlZpZXcgKmluc3Bl
Y3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKworICAgIFtp
bnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW2luc3BlY3RvclZpZXcg
c2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXph
YmxlXTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3BlY3RlZCB2aWV3
J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRo
YXQgdGhlCisgICAgLy8gYXR0YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0
b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0
aWxsIHdvcmsuCisKKyAgICBpbnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBO
U1dpZHRoKGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShpbnNwZWN0ZWRW
aWV3LmZyYW1lKSk7CisKKyAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxl
LiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAorICAg
IC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRv
dy4KKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBvcGVuKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgbV9zaGVldFJlY3QgPSByZWN0OworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgW21faW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKK30KKworU3Ry
aW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICBOU0J1bmRs
ZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
Ykluc3BlY3RvclVJIl07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJNYWlu
IiBvZlR5cGU6QCJodG1sIl07CisgICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOworICAg
IGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Cit9
CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQorewor
ICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJj
b20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0Lmh0bWwgaW4g
UHJvZHVjdGlvbiBidWlsZHMuCisgICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JS
ZXNvdXJjZTpAIlRlc3QiIG9mVHlwZTpAImh0bWwiXTsKKyAgICBpZiAoIXBhdGgpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBh
dGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBb
TlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUki
XTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTlNT
dHJpbmcgKnBhdGggPSBidW5kbGUucmVzb3VyY2VQYXRoOworICAgIEFTU0VSVChwYXRoICYmIHBh
dGgubGVuZ3RoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNE
aXJlY3Rvcnk6WUVTXS5hYnNvbHV0ZVN0cmluZzsKK30KKworc3RhdGljIE5TRGljdGlvbmFyeSAq
c3lzdGVtVmVyc2lvblBsaXN0KCkKK3sKKyAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGgg
PSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5
LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKKyAgICBOU1N0cmlu
ZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJd
OworICAgIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoQ29udGVudHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07CisgICAg
cmV0dXJuIHN5c3RlbVZlcnNpb25JbmZvOworfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5z
cGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIE5TRGljdGlvbmFy
eSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9uUGxpc3QoKTsKKworICAgIERlYnVnZ2FibGVJbmZvRGF0
YSByZXN1bHQ7CisgICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dh
YmxlVHlwZTo6V2ViUGFnZTsKKyAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1hY09T
Il9zOworICAgIHJlc3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RCdWls
ZFZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtAIlBy
b2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24iXTsKKyAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0b3Ig
PSBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYmVlNWNkZmYz
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQ
SURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIK
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmlu
YWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVt
b3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0
aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVn
Z2FibGVUeXBlKQorICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNy
ZWF0ZSgpKQorICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAg
ICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCisgICAgICAgICwgbV90YXJnZXRJ
RCh0YXJnZXRJRCkKKyAgICAgICAgLCBtX2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQor
ICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5S
ZW1vdGVJbnNwZWN0b3JQcm94eSgpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQo
bnVsbHB0cik7CisgICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWQoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIwNTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRl
YnVnIHRhcmdldC4KKyAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJ
bmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1w
dHkoKSk7CisgICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVn
Z2FibGVUeXBlKTsKKyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZv
KSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOworICAgIH0KKworICAg
IHZvaWQgc2hvdygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAg
IHsKKyAgICAgICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOworICAg
IH0KKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VU
b0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgIH0KKwor
ICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9p
bnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0
SUQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+
IG1fcHJveHk7CisgICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsK
KyAgICBDb25uZWN0aW9uSUQgbV9jb25uZWN0aW9uSUQ7CisgICAgVGFyZ2V0SUQgbV90YXJnZXRJ
RDsKKyAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIG1fZGVidWdnYWJsZVR5cGU7Cit9Owor
CitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2Vy
dmVyKQoreworICAgIGlmICghdXJsLmhvc3QoKSB8fCAhdXJsLnBvcnQoKSkgeworICAgICAgICBM
T0dfRVJST1IoIkludmFsaWQgaW5zcGVjdG9yIHVybDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nvbm5lY3Rpb25JRCA9
IGNvbm5lY3RJbmV0KHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgp
KTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbklEKSB7CisgICAgICAgIExPR19FUlJPUigiSW5zcGVj
dG9yIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0SW5pdGlhbENvbW11
bmljYXRpb24oKTsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9y
Q2xpZW50KCkKK3sKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNw
ZWN0b3JFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOworICAgIGF1dG8g
bWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKKyAgICBzZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2Fn
ZS5sZW5ndGgoKSk7Cit9CisKK0hhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpkaXNwYXRjaE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3Ry
aW5nLCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5k
bGVyPih7CisgICAgICAgIHsgIkJhY2tlbmRDb21tYW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhh
bmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcykgfSwKKyAg
ICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QpIH0sCisgICAgICAgIHsgIlNlbmRNZXNz
YWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKKyAgICB9KTsKKworICAgIHJldHVy
biBkaXNwYXRjaE1hcDsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5p
dGlhbENvbW11bmljYXRpb24oKQoreworICAgIGF1dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JD
bGllbnQiX3MpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5n
KCkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgp
Cit7CisgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVh
cigpOworICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7CisgICAgbV9vYnNl
cnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpkaWRDbG9zZShDb25uZWN0aW9uSUQpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChb
dGhpc10geworICAgICAgICBjb25uZWN0aW9uQ2xvc2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQs
IFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVU
eXBlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9u
SUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZV0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRl
YnVnZ2FibGVUeXBlKTsKKyAgICB9KTsKKworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOwor
ICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklE
KTsKKyAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwor
ICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisK
KyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVj
dGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IGF1dG8gYmFja2VuZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBiYWNrZW5k
RXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7Cisg
ICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25J
RCk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQp
OworICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKKyAg
ICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9
CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0
aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBhdXRvIGNsb3Nl
ZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0U3Ry
aW5nKCJldmVudCJfcywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOworICAgIGNsb3NlZEV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7CisgICAgY2xvc2VkRXZl
bnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYkluc3Bl
Y3RvckV2ZW50KGNsb3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBtX2luc3BlY3Rv
clByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7
Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29u
c3QgRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNz
YWdlLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYmFja2VuZENvbW1hbmRz
VVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZShldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghZXZl
bnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKKyAgICBpZiAoIUpTT046OlZhbHVl
OjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKKyAgICBp
ZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OworICAgIGZvciAoYXV0byYgaXRlbVZh
bHVlIDogKm1lc3NhZ2VBcnJheSkgeworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVt
T2JqZWN0OworICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBUYXJnZXQgdGFyZ2V0OworICAgICAgICBp
ZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCisgICAg
ICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkK
KyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVy
bCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdl
dC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldExpc3QuYXBw
ZW5kKFdURk1vdmUodGFyZ2V0KSk7CisgICAgfQorCisgICAgYXV0byBjb25uZWN0aW9uSUQgPSBl
dmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKKworICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMg
dG8gcmVtb3ZlIHRoZW0uCisgICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7
CisgICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKKyAg
ICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHRh
cmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5z
ZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKQor
ICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7CisgICAgfQor
ICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCisgICAgICAgIG1faW5z
cGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExp
c3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVu
dCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdl
dElEIHx8ICFldmVudC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByb3h5
ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlv
bklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKKyAgICBpZiAoIXByb3h5KSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmNTFkNjNkZWEwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9SZW1vdGVDb250cm9sbGFibGVUYXJnZXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9S
ZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNw
ZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJ
bnNwZWN0b3JPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9y
T2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2Vk
KFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKK307CisKK3VzaW5nIENvbm5lY3Rpb25JRCA9
IEluc3BlY3Rvcjo6Q29ubmVjdGlvbklEOwordXNpbmcgVGFyZ2V0SUQgPSBJbnNwZWN0b3I6OlRh
cmdldElEOworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChVUkws
IFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJik7CisgICAgflJlbW90ZUluc3BlY3RvckNsaWVudCgp
OworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1cGRhdGUgdGhlIG1lc3NhZ2luZyBwcm90b2Nv
bCB0byB1c2UgRGVidWdnYWJsZVR5cGUgaW5zdGVhZCBvZiBTdHJpbmcgZm9yIHRoZSB0YXJnZXQg
dHlwZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2
MDQ3CisgICAgc3RydWN0IFRhcmdldCB7CisgICAgICAgIFRhcmdldElEIGlkOworICAgICAgICBT
dHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyB1cmw7Cisg
ICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4m
IHRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldHM7IH0KKyAgICBjb25zdCBTdHJpbmcm
IGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJM
OyB9CisKKyAgICB2b2lkIGluc3BlY3QoQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZSk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0
aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250
ZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBOZXZlckRlc3Ryb3llZDxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+OworCisgICAgdm9pZCBzdGFy
dEluaXRpYWxDb21tdW5pY2F0aW9uKCk7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKCk7CisK
KyAgICB2b2lkIHNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYpOworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRz
KGNvbnN0IEV2ZW50Jik7CisKKyAgICB2b2lkIGRpZENsb3NlKENvbm5lY3Rpb25JRCkgZmluYWw7
CisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBmaW5hbDsK
KworICAgIHZvaWQgc2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAg
U3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOworICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVy
JiBtX29ic2VydmVyOworICAgIE9wdGlvbmFsPENvbm5lY3Rpb25JRD4gbV9jb25uZWN0aW9uSUQ7
CisgICAgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7Cisg
ICAgSGFzaE1hcDxzdGQ6OnBhaXI8Q29ubmVjdGlvbklELCBUYXJnZXRJRD4sIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YmM0NTVkM2U2MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkFQSUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNp
bmNsdWRlICJBUElVc2VyQ29udGVudFdvcmxkLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhh
bmRsZXIuaCIKKyNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBTY3JpcHRNZXNzYWdlQ2xpZW50IGZpbmFs
IDogcHVibGljIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpDbGllbnQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNjcmlwdE1lc3NhZ2VDbGllbnQoUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpCisgICAg
ICAgIDogbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
KSB7IH0KKworICAgIH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9CisKKyAgICB2b2lkIGRpZFBv
c3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZvRGF0YSYmLCBXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGF1dG8gdG9rZW5zID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlLnRvU3RyaW5n
KCkuc3BsaXQoIjoiKTsKKyAgICAgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBVUkwgcmVxdWVzdFVSTCB7IHsgfSwgcGFnZS5wYWdlTG9h
ZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaW5z
cGVjdChyZXF1ZXN0VVJMLmhvc3RBbmRQb3J0KCksIHRva2Vuc1swXS50b1VJbnRTdHJpY3QoKSwg
dG9rZW5zWzFdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMl0pOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1faW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyOworfTsKKworY2xhc3MgTG9hZGVyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6TG9h
ZGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBM
b2FkZXJDbGllbnQoRnVuY3Rpb248dm9pZCgpPiYmIGxvYWRlZENhbGxiYWNrKQorICAgICAgICA6
IG1fbG9hZGVkQ2FsbGJhY2sgeyBXVEZNb3ZlKGxvYWRlZENhbGxiYWNrKSB9IHsgfQorCisgICAg
dm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6
OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCopIGZpbmFsCisg
ICAgeworICAgICAgICBtX2xvYWRlZENhbGxiYWNrKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEZ1bmN0aW9uPHZvaWQoKT4gbV9sb2FkZWRDYWxsYmFjazsKK307CisKK3N0YXRpYyBPcHRpb25h
bDxJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlPiBwYXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIGRlYnVnZ2FibGVUeXBlU3RyaW5nKQoreworICAgIGlmIChkZWJ1Z2dh
YmxlVHlwZVN0cmluZyA9PSAiamF2YXNjcmlwdCJfcykKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6RGVidWdnYWJsZVR5cGU6OkphdmFTY3JpcHQ7CisgICAgaWYgKGRlYnVnZ2FibGVUeXBlU3Ry
aW5nID09ICJwYWdlIl9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlw
ZTo6UGFnZTsKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInNlcnZpY2Utd29ya2Vy
Il9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6U2VydmljZVdv
cmtlcjsKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gIndlYi1wYWdlIl9zKQorICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyOjppbnNwZWN0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCBjb25u
ZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAg
YXV0byBkZWJ1Z2dhYmxlVHlwZSA9IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKHR5cGUp
OworICAgIGlmICghZGVidWdnYWJsZVR5cGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmtub3du
IGRlYnVnZ2FibGUgdHlwZTogXCIlc1wiIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2luc3BlY3RvckNsaWVudCkKKyAgICAgICAgbV9p
bnNwZWN0b3JDbGllbnQtPmluc3BlY3QoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJs
ZVR5cGUudmFsdWUoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
OjpydW5TY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCit7CisgICAgbV9wYWdlLnJ1bkphdmFT
Y3JpcHRJbk1haW5GcmFtZSh7IHNjcmlwdCwgZmFsc2UsIFdURjo6bnVsbG9wdCwgZmFsc2UgfSwg
CisgICAgICAgIFtdKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgT3B0aW9uYWw8V2ViQ29y
ZTo6RXhjZXB0aW9uRGV0YWlscz4gZXhjZXB0aW9uRGV0YWlscywgQ2FsbGJhY2tCYXNlOjpFcnJv
cikgeworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpCisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJFeGNlcHRpb24gcnVubmluZyBzY3JpcHQgXCIlc1wiIiwgZXhjZXB0aW9uRGV0
YWlscy0+bWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3Rv
ckNsaWVudCYgY2xpZW50KQoreworICAgIFN0cmluZ0J1aWxkZXIgaHRtbDsKKyAgICBpZiAoY2xp
ZW50LnRhcmdldHMoKS5pc0VtcHR5KCkpCisgICAgICAgIGh0bWwuYXBwZW5kKCI8cD5ObyB0YXJn
ZXRzIGZvdW5kPC9wPiJfcyk7CisgICAgZWxzZSB7CisgICAgICAgIGh0bWwuYXBwZW5kKCI8dGFi
bGU+Iik7CisgICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50LnRhcmdldHMo
KS5rZXlzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogY2xpZW50LnRhcmdl
dHMoKS5nZXQoY29ubmVjdGlvbklEKSkgeworICAgICAgICAgICAgICAgIGh0bWwuYXBwZW5kKG1h
a2VTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRyPiIKKyAgICAgICAgICAg
ICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0bmFtZVwiPiIs
IHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVybFwiPiIsIHRhcmdldC51
cmwsICI8L2Rpdj48L3RkPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImlucHV0
XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNsaWNrPVwid2lu
ZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdlKFxcJyIsIGNv
bm5lY3Rpb25JRCwgIjoiLCB0YXJnZXQuaWQsICI6IiwgdGFyZ2V0LnR5cGUsICJcXCcpO1wiPjwv
dGQ+IgorICAgICAgICAgICAgICAgICAgICAiPC90cj48L3Rib2R5PiIKKyAgICAgICAgICAgICAg
ICApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBodG1sLmFwcGVuZCgiPC90
YWJsZT4iKTsKKyAgICB9CisgICAgbV90YXJnZXRMaXN0c0h0bWwgPSBodG1sLnRvU3RyaW5nKCk7
CisgICAgaWYgKG1fcGFnZUxvYWRlZCkKKyAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOworfQor
Cit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6dXBkYXRlVGFyZ2V0TGlzdCgp
Cit7CisgICAgaWYgKCFtX3RhcmdldExpc3RzSHRtbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcnVu
U2NyaXB0KG1ha2VTdHJpbmcoInVwZGF0ZVRhcmdldHMoYCIsIG1fdGFyZ2V0TGlzdHNIdG1sLCAi
YCk7IikpOworICAgICAgICBtX3RhcmdldExpc3RzSHRtbCA9IHsgfTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQ
YWdlUHJveHkmIHBhZ2VQcm94eSwgV2ViVVJMU2NoZW1lVGFzayYgdGFzaykKK3sKKyAgICBhdXRv
JiByZXF1ZXN0VVJMID0gdGFzay5yZXF1ZXN0KCkudXJsKCk7CisKKyAgICAvLyBEZXN0cm95IHRo
ZSBjbGllbnQgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24gc28gaXQgY2FuIGNvbm5l
Y3QgdG8gdGhlIHNhbWUgcG9ydAorICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbnVsbHB0cjsKKyAg
ICBtX2luc3BlY3RvckNsaWVudCA9IG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Pihy
ZXF1ZXN0VVJMLCAqdGhpcyk7CisKKyAgICAvLyBTZXR1cCB0YXJnZXQgcG9zdE1lc3NhZ2UgbGlz
dGVuZXIKKyAgICBhdXRvIGhhbmRsZXIgPSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Y3JlYXRl
KG1ha2VVbmlxdWU8U2NyaXB0TWVzc2FnZUNsaWVudD4oKnRoaXMpLCAiaW5zcGVjdG9yIiwgQVBJ
OjpVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKKyAgICBwYWdlUHJveHkucGFnZUdy
b3VwKCkudXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVy
KGhhbmRsZXIuZ2V0KCkpOworCisgICAgLy8gU2V0dXAgbG9hZGVyIGNsaWVudCB0byBnZXQgbm90
aWZpZWQgb2YgcGFnZSBsb2FkCisgICAgbV9wYWdlLnNldExvYWRlckNsaWVudChtYWtlVW5pcXVl
PExvYWRlckNsaWVudD4oW3RoaXNdIHsKKyAgICAgICAgbV9wYWdlTG9hZGVkID0gdHJ1ZTsKKyAg
ICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOworICAgIH0pKTsKKyAgICBtX3BhZ2VMb2FkZWQgPSBm
YWxzZTsKKworICAgIFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7CisgICAgaHRtbEJ1aWxkZXIu
YXBwZW5kKAorICAgICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3Rp
dGxlPiIKKyAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50
PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz4iCisgICAgICAgICI8c3R5bGU+IgorICAg
ICAgICAiICBoMSB7IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsg
bWFyZ2luLWJvdHRvbTogMDsgfSIKKyAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Vi
a2l0LXN5c3RlbS1mb250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5n
OiAyMHB4IDIwcHggMCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCisgICAgICAg
ICIgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVm
dCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEs
ICNmNmY2ZjQpKTsiCisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVt
OyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IgorICAgICAgICAiICB0YWJsZSB7IHdp
ZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB0YWJsZS1sYXlvdXQ6IGZpeGVk
OyB9IgorICAgICAgICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBi
b3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9IgorICAgICAgICAiICBwIHsg
bWFyZ2luLWJvdHRvbTogMzBweDsgfSIKKyAgICAgICAgIiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9
IgorICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9IgorICAgICAgICAiICAudGFy
Z2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFj
ZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9IgorICAgICAgICAiICAudGFyZ2V0
dXJsIHsgY29sb3I6ICNiYWJkYjY7IGJhY2tncm91bmQ6ICNlZWU7IHdvcmQtd3JhcDogYnJlYWst
d29yZDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgfSIKKyAgICAgICAgIiAgdGQuaW5wdXQg
eyB3aWR0aDogNjRweDsgfSIKKyAgICAgICAgIiAgaW5wdXQgeyB3aWR0aDogMTAwJTsgcGFkZGlu
ZzogOHB4OyB9IgorICAgICAgICAiPC9zdHlsZT4iCisgICAgICAgICI8L2hlYWQ+PGJvZHk+PGgx
Pkluc3BlY3RhYmxlIHRhcmdldHM8L2gxPiIKKyAgICAgICAgIjxkaXYgaWQ9XCJ0YXJnZXRsaXN0
XCI+PHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD48L2Rpdj48L2JvZHk+IgorICAgICAgICAiPHNjcmlw
dD4iCisgICAgICAgICJmdW5jdGlvbiB1cGRhdGVUYXJnZXRzKHN0cikgeyIKKyAgICAgICAgICAg
ICJsZXQgdGFyZ2V0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldGxpc3QnKTsi
CisgICAgICAgICAgICAidGFyZ2V0RGl2LmlubmVySFRNTCA9IHN0cjsiCisgICAgICAgICJ9Igor
ICAgICAgICAiPC9zY3JpcHQ+Iik7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8L2h0bWw+Iik7
CisKKyAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBh
dXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShodG1sLmRhdGEoKSwgaHRtbC5sZW5ndGgo
KSk7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9odG1s
Il9zLCBodG1sLmxlbmd0aCgpLCAiVVRGLTgiX3MpOworICAgIHRhc2suZGlkUmVjZWl2ZVJlc3Bv
bnNlKHJlc3BvbnNlKTsKKyAgICB0YXNrLmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoZGF0YSkpOwor
ICAgIHRhc2suZGlkQ29tcGxldGUoUmVzb3VyY2VFcnJvcigpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjYwMGVmZGVkNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxlci5oIgorCitu
YW1lc3BhY2UgV1RGIHsKK2NsYXNzIFVSTDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlVSTFNjaGVtZVRhc2s7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlciBmaW5hbCA6IHB1YmxpYyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciwgcHVibGljIFdlYlVS
TFNjaGVtZUhhbmRsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyPiBjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihwYWdlKSk7IH0KKworICAg
IHZvaWQgaW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQsIFRh
cmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpOworCitwcml2YXRlOgorICAgIFJlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgICAgIDogbV9wYWdl
KHBhZ2UpIHsgfQorCisgICAgLy8gUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKKyAgICB2b2lkIHRh
cmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOworICAgIHZvaWQg
Y29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0KKworICAg
IC8vIFdlYlVSTFNjaGVtZUhhbmRsZXIKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBh
Z2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRmb3JtU3Rv
cFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorICAgIHZv
aWQgcGxhdGZvcm1UYXNrQ29tcGxldGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KKwor
ICAgIHZvaWQgdXBkYXRlVGFyZ2V0TGlzdCgpOworCisgICAgdm9pZCBydW5TY3JpcHQoY29uc3Qg
U3RyaW5nJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PiBt
X2luc3BlY3RvckNsaWVudDsKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICBib29sIG1f
cGFnZUxvYWRlZCB7IGZhbHNlIH07CisgICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNIdG1sOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4v
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM5MGMyYjk0ZjJmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eVdpbi5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0
aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdl
R3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3Lmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitz
dGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgi
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNz
IjsKKworTFJFU1VMVCBDQUxMQkFDSyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhI
V05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAg
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90
ZVdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5UG9pbnRlclByb3ApKTsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpF
OgorICAgICAgICByZXR1cm4gY2xpZW50LT5zaXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9T
RToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNn
LCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3Mo
KQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsK
KyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xB
U1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJv
YyAgICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNF
eHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaElu
c3RhbmNlICAgICAgPSAwOworICAgIHdjZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXgu
aEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJC
YWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5s
cHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOworICAgIHdj
ZXguaEljb25TbSAgICAgICAgPSAwOworCisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9
IHRydWU7CisgICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VM
VCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2l6ZUNoYW5nZSgpCit7CisgICAgaWYgKCFtX3dl
YlZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xp
ZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcmVjdCk7CisgICAgOjpTZXRXaW5kb3dQb3MobV93
ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJl
Y3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICByZXR1
cm4gMDsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCit7
CisgICAgOjpTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250
ZW5kRGlkQ2xvc2UoKTsKKyAgICByZXR1cm4gMDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQor
eworICAgIFJlZlB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNl
czo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyAgICBwcmVmZXJl
bmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOworCisjaWYgRU5BQkxF
KERFVkVMT1BFUl9NT0RFKQorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1D
b25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorCisgICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4g
cGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRp
ZmllckZvclBhZ2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5z
ZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdl
KG51bGxwdHIpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZl
cmVuY2VzLmdldCgpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VH
cm91cC5nZXQoKSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwg
MTAwMCk7CisgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUg
PSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAw
LCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgMCwgMCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9m
cm9udGVuZEhhbmRsZSwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRl
cnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRIYW5k
bGUsIFNXX1NIT1cpOworCisgICAgUkVDVCByOworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250
ZW5kSGFuZGxlLCAmcik7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VD
b25maWd1cmF0aW9uLCBtX2Zyb250ZW5kSGFuZGxlKTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5w
YWdlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRT
dGF0ZSgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1Rv
RnJvbnQoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVl
dFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25z
dCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgOjpE
ZXN0cm95V2luZG93KG1fZnJvbnRlbmRIYW5kbGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclBy
b3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmRlYWM5
NzMxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcApAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5
LmgiCisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlv
bkFjdGlvbi5oIgorI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAi
UGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHku
aCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
CisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZv
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2Vi
Q29yZUJ1bmRsZVdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KKyNpbmNs
dWRlIDxXZWJLaXQvV0tQYWdlLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL0NG
VVJMRXh0cmFzLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25z
dCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYkluc3BlY3RvclBy
b3h5UG9pbnRlciI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94eUNsYXNz
TmFtZSA9IEwiV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7CisKK3N0cnVjdCBJbnNwZWN0ZWRXaW5k
b3dJbmZvIHsKKyAgICBpbnQgbGVmdDsKKyAgICBpbnQgdG9wOworICAgIGludCB2aWV3V2lkdGg7
CisgICAgaW50IHZpZXdIZWlnaHQ7CisgICAgaW50IHBhcmVudFdpZHRoOworICAgIGludCBwYXJl
bnRIZWlnaHQ7Cit9OworCitzdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJbnNwZWN0ZWRX
aW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRvdykKK3sKKyAg
ICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRvdywgJnJlY3Qp
OworICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50V2luZG93LCAo
TFBQT0lOVCkmcmVjdCwgMik7CisKKyAgICBSRUNUIHBhcmVudFJlY3Q7CisgICAgOjpHZXRDbGll
bnRSZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJlY3QpOworICAgIHJldHVybiB7IHJlY3QubGVm
dCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50
b3AsIHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJlY3QuYm90dG9t
IC0gcGFyZW50UmVjdC50b3AgfTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93
UmVjZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNIGxQYXJh
bSkKK3sKKyAgICBzd2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6
IHsKKyAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJh
bSk7CisKKyAgICAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOwor
ICAgICAgICBSRUNUIHBhcmVudFJlY3Q7CisgICAgICAgIEdldENsaWVudFJlY3QocGFyZW50LCAm
cGFyZW50UmVjdCk7CisKKyAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OworICAgICAgICBHZXRD
bGllbnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3QpOworCisgICAg
ICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgICAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpCb3R0b206IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRX
aW5kb3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcCwgd2lu
ZG93UG9zLT5jeSk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdo
dDsKKyAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwg
d2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4
LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBjYXNl
IEF0dGFjaG1lbnRTaWRlOjpSaWdodDogeworICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9y
V2lkdGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5l
ZEF0dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3RvclJlY3Qu
bGVmdCwgd2luZG93UG9zLT5jeCk7CisgICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09IGluc3Bl
Y3RvcldpZHRoOworICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2lu
ZG93LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnksIGluc3Bl
Y3RvcldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJveHk6OnduZFBy
b2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sK
KyAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNw
ZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9w
KSk7CisgICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIDo6U2V0
V2luZG93UG9zKGNsaWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBMT1dPUkQo
bFBhcmFtKSwgSElXT1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7CisgICAgICAgIHJldHVybiAw
OworICAgIGNhc2UgV01fQ0xPU0U6CisgICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK2Jvb2wg
V2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBi
b29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKworICAgIGlmIChoYXZlUmVn
aXN0ZXJlZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBoYXZlUmVnaXN0
ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4
LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LnN0eWxlID0gMDsKKyAgICB3
Y2V4LmxwZm5XbmRQcm9jID0gd25kUHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAwOworICAg
IHdjZXguY2JXbmRFeHRyYSA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0
YW5jZUhhbmRsZSgpOworICAgIHdjZXguaEljb24gPSAwOworICAgIHdjZXguaEN1cnNvciA9IExv
YWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgPSAwOworICAg
IHdjZXgubHBzek1lbnVOYW1lID0gMDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNw
ZWN0b3JQcm94eUNsYXNzTmFtZTsKKyAgICB3Y2V4LmhJY29uU20gPSAwOworICAgIHJldHVybiA6
OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJl
ZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJS
ZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICAvLyBBbGxvdyBu
b24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCisgICAgQVBJOjpGcmFtZUluZm8q
IHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgp
OworICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsK
KyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkg
PSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOworICAg
IEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOworCisg
ICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBpZiAo
V2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwo
KSkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRp
bmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCisgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdu
b3JlKCk7CisKKyAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFn
ZS4KKyAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChX
VEZNb3ZlKHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdL
UGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94
eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNv
bnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJv
eHkpOworICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKK1dlYlBh
Z2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkK
K3sKKyAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMg
PSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4i
KTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0
byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5n
aW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVk
KHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25z
b2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVB
Y2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7CisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRS
dW50aW1lRmxhZ3MoeyB9KTsKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3Jl
YXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkp
OworICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpj
cmVhdGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3Rv
clByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24t
PnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlv
bi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7CisKKyAgICBXS1BhZ2VOYXZpZ2F0aW9u
Q2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKKyAgICAgICAgeyAwLCB0aGlzIH0sCisgICAg
ICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCisgICAgICAgIG51bGxwdHIsIC8v
IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQorICAgICAgICBudWxscHRyLCAvLyBk
ZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJv
dmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRG
YWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5h
dmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgorICAgICAg
ICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRG
YWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQorICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5p
c2hEb2N1bWVudExvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbgorICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZQorICAg
ICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorICAg
ICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCisgICAgICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlw
dG9NYXN0ZXJLZXkKKworICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0
dXJlCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAg
ICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAv
LyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CisgICAgfTsKKworICAgIFJFQ1Qg
ciA9IHsgMCwgMCwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwgc3RhdGlj
X2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd0hlaWdodCkgfTsKKyAgICBhdXRvIHBhZ2UgPSBpbnNw
ZWN0ZWRQYWdlKCk7CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmlld1dpZGdl
dCgpOworICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KG1faW5z
cGVjdGVkVmlld1dpbmRvdyk7CisgICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBh
Z2VDb25maWd1cmF0aW9uLCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIG1faW5z
cGVjdG9yVmlldyA9ICZ2aWV3LmxlYWtSZWYoKTsKKyAgICBhdXRvIGluc3BlY3RvclBhZ2UgPSBt
X2luc3BlY3RvclZpZXctPnBhZ2UoKTsKKyAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBpbnNw
ZWN0b3JQYWdlLT52aWV3V2lkZ2V0KCk7CisgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGll
bnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworCisgICAg
cmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFdlYkNvcmU6OldpbmRvd01l
c3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0
aGlzKTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAgIG1faW5zcGVjdG9yUGFn
ZSA9IG51bGxwdHI7CisgICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgeworICAgICAgICA6
OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0
b3JWaWV3V2luZG93ID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNo
V2luZG93KSB7CisgICAgICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywg
V2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCk7CisgICAgICAgIDo6RGVzdHJveVdpbmRvdyht
X2luc3BlY3RvckRldGFjaFdpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93
ID0gbnVsbHB0cjsKKyAgICB9CisgICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsK
KyAgICBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOworfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworI2lmIFVTRShDRikKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJl
c291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBDRlNUUigi
aHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOworICAgIHJldHVybiBDRlVSTEdldFN0
cmluZyhodG1sVVJMUmVmLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgor
fQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sK
KyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRD
RihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIo
IlRlc3QiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICBy
ZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVy
biB7IH07CisjZW5kaWYKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JC
YXNlVVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJM
UmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5k
bGUoKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIiksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBy
ZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoYmFzZVVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVy
biB7IH07CisjZW5kaWYKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5
OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KKyAg
ICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit1bnNpZ25lZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIFJF
Q1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVj
dCk7CisgICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Cit9CisKK3Vuc2lnbmVkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBS
RUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJl
Y3QpOworICAgIHJldHVybiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
aW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CisKKyAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hX
aW5kb3cgJiYgOjpHZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3Rv
ckRldGFjaFdpbmRvdykgeworICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5k
b3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7CisgICAgICAgIDo6U2hvd1dpbmRvdyht
X2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfSElERSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6
V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5k
b3csIHRoaXMpOworCisgICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6
OkJvdHRvbSkgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6
Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihk
ZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAgICB9CisgICAg
OjpTaG93V2luZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKK3sKKyAgICBpZiAoIWluc3BlY3Rl
ZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2luc3BlY3RvckRldGFjaFdpbmRvdykgeworICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNz
KCk7CisgICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgw
LCBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAg
ICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0
aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwKKyAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6Omluc3Rh
bmNlSGFuZGxlKCksIDApOworICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3csIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExF
Pih0aGlzKSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVy
OjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOworCisgICAgUkVD
VCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgJnJl
Y3QpOworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0
UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOwor
ICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVjdC5y
aWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsK
KyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8u
bGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZv
LmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pP
UkRFUik7CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisgICAgICAgIDo6U2hvd1dpbmRvdyhtX2lu
c3BlY3RvckRldGFjaFdpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorewor
ICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRW
aWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0V2luZG93
UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZv
LnBhcmVudEhlaWdodCAtIGhlaWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0lu
Zm8ubGVmdCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5z
cGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2lu
ZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRI
ZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRo
KQoreworICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0
V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJlbnRXaWR0
aCAtIHdpZHRoLCB3aW5kb3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0
IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9p
bnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3
aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVu
dEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5n
JiAvKiB1cmwgKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9v
bCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWlsYWJsZSAqLykKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRh
cmdldFByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyOGNhMmZiZmIu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdl
dFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkluc3BlY3RvclRhcmdldFByb3h5LmgiCi0KLSNpbmNsdWRlICJQcm92aXNpb25hbFBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1zdGQ6OnVuaXF1
ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUo
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldFR5cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnNwZWN0
b3JUYXJnZXRQcm94eT4ocGFnZSwgdGFyZ2V0SWQsIHR5cGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9w
dHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoUHJv
dmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCi17Ci0gICAgYXV0byB0YXJn
ZXQgPSBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZS5wYWdlKCks
IHRhcmdldElkLCB0eXBlKTsKLSAgICB0YXJnZXQtPm1fcHJvdmlzaW9uYWxQYWdlID0gbWFrZVdl
YWtQdHIocHJvdmlzaW9uYWxQYWdlKTsKLSAgICByZXR1cm4gdGFyZ2V0OwotfQotCi1JbnNwZWN0
b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlw
ZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9pZGVudGlmaWVyKHRhcmdldElkKQotICAg
ICwgbV90eXBlKHR5cGUpCi17Ci19Ci0KLXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNvbm5l
Y3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25U
eXBlKQotewotICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewotICAgICAgICBtX3Byb3Zpc2lv
bmFsUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlm
aWVyKCksIGNvbm5lY3Rpb25UeXBlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5
cGUpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlzY29ubmVjdCgpCi17Ci0g
ICAgaWYgKGlzUGF1c2VkKCkpCi0gICAgICAgIHJlc3VtZSgpOwotCi0gICAgaWYgKG1fcHJvdmlz
aW9uYWxQYWdlKSB7Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAg
ICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVu
dGlmaWVyKCkpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6c2VuZE1lc3NhZ2VU
b1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChtX3Byb3Zp
c2lvbmFsUGFnZSkgewotICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdl
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQ
cm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVz
c2FnZVRvVGFyZ2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKQotewotICAg
IG1fcHJvdmlzaW9uYWxQYWdlID0gbnVsbHB0cjsKLX0KLQotYm9vbCBJbnNwZWN0b3JUYXJnZXRQ
cm94eTo6aXNQcm92aXNpb25hbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9wcm92aXNpb25h
bFBhZ2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGEyMjM5Y2VjOGUxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFByb3Zpc2lvbmFsUGFnZVByb3h5OwotY2xhc3MgV2ViUGFn
ZVByb3h5OwotCi0vLyBOT1RFOiBUaGlzIFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBk
b2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZyb250ZW5kIGNoYW5uZWwsIHNpbmNlCi0vLyBhbnkgdGFy
Z2V0IC0+IGZyb250ZW5kIG1lc3NhZ2VzIHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJv
eHkgd2l0aCBhIHRhcmdldElkLgotCi1jbGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkp
OwotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+IGNyZWF0ZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgSW5z
cGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICB+SW5zcGVjdG9yVGFyZ2V0UHJv
eHkoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlw
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIFN0cmluZyBpZGVudGlmaWVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0KLSAgICB2b2lkIGRpZENv
bW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7Ci0gICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAgIFN0cmlu
ZyBtX2lkZW50aWZpZXI7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlw
ZTsKLSAgICBXZWFrUHRyPFByb3Zpc2lvbmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMTkyYzI5ZjQxOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgi
Ci0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRp
ZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkKLSAgICA6IG1fZGVidWdnYWJs
ZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1w
dHkoKSkpCi17Ci19Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp+UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkoKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Ojpsb2FkKFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYmIGRlYnVnZ2Fi
bGVJbmZvLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCkKLXsKLSAgICBjcmVhdGVG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3Zl
KGRlYnVnZ2FibGVJbmZvKTsKLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21t
YW5kc1VSTDsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OkluaXRpYWxpemUobV9kZWJ1Z2dhYmxlSW5mby0+ZGVidWdnYWJsZUluZm9E
YXRhKCksIGJhY2tlbmRDb21tYW5kc1VSTCkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJl
cXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQot
ewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUNyYXNoKCkKLXsKLSAgICAvLyBCZWhhdmUgYXMgaWYg
dGhlIGZyb250ZW5kIGp1c3QgY2xvc2VkLCBzbyBjbGllbnRzIGFyZSBpbmZvcm1lZCB0aGUgZnJv
bnRlbmQgaXMgZ29uZS4KLSAgICBmcm9udGVuZERpZENsb3NlKCk7Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQotewotICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQotewot
ICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBp
ZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5jbG9zZUZyb21Gcm9udGVuZCgpOwotCi0g
ICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cmVvcGVuKCkKLXsKLSAgICBBU1NFUlQoIW1fYmFja2VuZENvbW1hbmRzVVJM
LmlzRW1wdHkoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIGxv
YWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5UmVmKCksIG1fYmFja2VuZENvbW1hbmRzVVJMKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgcGxh
dGZvcm1SZXNldFN0YXRlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmJy
aW5nVG9Gcm9udCgpCi17Ci0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
RGlhbG9nKQotewotICAgIHBsYXRmb3JtU2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRlbnQsIGJhc2U2
NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxvZyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBj
b250ZW50KQotewotICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIHBsYXRmb3JtT3Blbklu
TmV3VGFiKHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0
aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3Nh
Z2VUb0JhY2tlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVh
dGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2lu
c3BlY3RvclBhZ2UsIG51bGxwdHIpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7
Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVS
TCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgp
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotCi0gICAgdW50cmFja0luc3BlY3RvclBh
Z2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0K
LSAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLSNpZiAhRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RL
KSAmJiAhUExBVEZPUk0oV0lOKSkKLVdlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9v
bCwgYm9vbCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVu
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0
IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikgeyB9Ci12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkgeyB9Ci0j
ZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYjU4ZjhjZTA2Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLU9C
SkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5
T2JqQ0FkYXB0ZXI7Ci1PQkpDX0NMQVNTIFdLV2ViVmlldzsKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewot
Y2xhc3MgRGVidWdnYWJsZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBX
ZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJWaWV3OwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlRnJvbUZyb250
ZW5kKCkgPSAwOwotfTsKLQotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgOiBwdWJsaWMg
UmVmQ291bnRlZDxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5KCkpOwotICAgIH0KLQotICAgIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eSgpOwotCi0gICAgdm9pZCBzZXRDbGllbnQoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQq
IGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5n
QXZhaWxhYmxlKGJvb2wpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2b2lkIGxv
YWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1h
bmRzVVJMKTsKLSAgICB2b2lkIGNsb3NlRnJvbUJhY2tlbmQoKTsKLSAgICB2b2lkIHNob3coKTsK
LQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgTlNXaW5kb3cgKndpbmRvdygpIGNvbnN0IHsgcmV0
dXJuIG1fd2luZG93LmdldCgpOyB9Ci0gICAgV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7Ci0K
LSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hlZXRSZWN0OyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHVw
ZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0o
V0lOX0NBSVJPKQotICAgIExSRVNVTFQgc2l6ZUNoYW5nZSgpOwotICAgIExSRVNVTFQgb25DbG9z
ZSgpOwotCi0gICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBX
UEFSQU0sIExQQVJBTSk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY2xvc2VGcm9tQ3Jhc2goKTsKLQot
cHJpdmF0ZToKLSAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwotCi0gICAgLy8gUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkgbWVzc2FnZXMuCi0gICAgdm9pZCBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAgdm9pZCBy
ZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgp
OwotICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKLSAg
ICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lk
IHN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYg
dXJsKTsKLSAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm8mKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci0KLSAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHZv
aWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIC8vIFBsYXRmb3JtIGltcGxl
bWVudGF0aW9ucy4KLSAgICBXZWJQYWdlUHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJp
bmdUb0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VT
YXZlQXMpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0Ry
YWcoKTsKLSAgICB2b2lkIHBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKTsK
LSAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYpOwotCi0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQqIG1fY2xpZW50
IHsgbnVsbHB0ciB9OwotICAgIFdlYlBhZ2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0
ciB9OwotCi0gICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IG1fZGVidWdnYWJsZUluZm87Ci0g
ICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXc7Ci0g
ICAgUmV0YWluUHRyPE5TV2luZG93PiBtX3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8V0tSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOwotICAgIEhhc2hNYXA8
U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOwotICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdU
SykKLSAgICBHdGtXaWRnZXQqIG1fd2ViVmlldyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQq
IG1fd2luZG93IHsgbnVsbHB0ciB9OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQot
ICAgIEhXTkQgbV9mcm9udGVuZEhhbmRsZTsKLSAgICBSZWZQdHI8V2ViVmlldz4gbV93ZWJWaWV3
OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMDkxYjc4ZmI2Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5t
ZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkgewotICAgIEZyb250ZW5kRGlkQ2xvc2UoKQotICAgIFJlb3BlbigpCi0gICAgUmVzZXRT
dGF0ZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBT
dHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotICAg
IEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAgU2V0U2hlZXRS
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLQot
ICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQotICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQotCi0gICAgU2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoU3RyaW5nIG1lc3NhZ2UpCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhOTgzOTFjNDIwYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPFVJS2l0
L1VJS2l0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVjdCBIaWdobGlnaHQ7Ci19Ci0K
LUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IDogVUlWaWV3IHsKLSAgICBOU011
dGFibGVBcnJheSAqX2xheWVyczsgLy8gQ0FTaGFwZUxheWVycy4KLX0KLS0gKHZvaWQpdXBkYXRl
Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodDsKLUBlbmQKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWYwYzAzZTMzLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgiCi0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbnNw
ZWN0b3JPdmVybGF5Lmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvckhpZ2hsaWdodFZp
ZXcKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIF9sYXllcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3NlbGYgX3JlbW92
ZUFsbExheWVyc107Ci0gICAgW19sYXllcnMgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tICh2b2lkKV9yZW1vdmVBbGxMYXllcnMKLXsKLSAgICBmb3IgKENBU2hhcGVMYXll
ciAqbGF5ZXIgaW4gX2xheWVycykKLSAgICAgICAgW2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVy
XTsKLSAgICBbX2xheWVycyByZW1vdmVBbGxPYmplY3RzXTsKLX0KLQotLSAodm9pZClfY3JlYXRl
TGF5ZXJzOihOU1VJbnRlZ2VyKW51bUxheWVycwotewotICAgIGlmIChbX2xheWVycyBjb3VudF0g
PT0gbnVtTGF5ZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5
ZXJzXTsKLQotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7
Ci0gICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbW0NBU2hhcGVMYXllciBhbGxvY10gaW5p
dF07Ci0gICAgICAgIFtfbGF5ZXJzIGFkZE9iamVjdDpsYXllcl07Ci0gICAgICAgIFtzZWxmLmxh
eWVyIGFkZFN1YmxheWVyOmxheWVyXTsKLSAgICAgICAgW2xheWVyIHJlbGVhc2VdOwotICAgIH0K
LX0KLQotc3RhdGljIGJvb2wgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHAy
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgZDIsIFdlYkNvcmU6OkZsb2F0UG9pbnQmIGludGVyc2VjdGlvbikgCi17Ci0gICAgLy8gRG8g
dGhlIGxpbmVzIGludGVyc2VjdD8KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlbXBvcmFyeUlu
dGVyc2VjdGlvblBvaW50OwotICAgIGlmICghZmluZEludGVyc2VjdGlvbihwMSwgcDIsIGQxLCBk
MiwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBJcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIHR3byBwb2ludHMgb24gdGhl
IGxpbmU/Ci0gICAgaWYgKHAxLngoKSA+PSBwMi54KCkpIHsKLSAgICAgICAgaWYgKHRlbXBvcmFy
eUludGVyc2VjdGlvblBvaW50LngoKSA+IHAxLngoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Q
b2ludC54KCkgPCBwMi54KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+IHAyLngoKSB8
fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPCBwMS54KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChwMS55KCkgPj0gcDIueSgpKSB7Ci0gICAgICAg
IGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPiBwMS55KCkgfHwgdGVtcG9yYXJ5
SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwgcDIueSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55
KCkgPiBwMi55KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwgcDEueSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludGVyc2VjdGlvbiA9IHRl
bXBvcmFyeUludGVyc2VjdGlvblBvaW50OwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGlz
IHF1YWQgaW50ZXJzZWN0aW9uIHdvcmtzIGJlY2F1c2UgdGhlIHR3byBxdWFkcyBhcmUga25vd24g
dG8gYmUgYXQgdGhlIHNhbWUKLS8vIHJvdGF0aW9uIGFuZCBjbG9ja3dpc2UtbmVzcy4KLXN0YXRp
YyBXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZEludGVyc2VjdGlvbihXZWJDb3JlOjpGbG9hdFF1YWQg
Ym91bmRzLCBXZWJDb3JlOjpGbG9hdFF1YWQgdG9DbGFtcCkKLXsKLSAgICAvLyBSZXN1bHRpbmcg
cG9pbnRzLgotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcDEsIHAyLCBwMywgcDQ7Ci0gICAgYm9v
bCBjb250YWluc1BvaW50MSA9IGZhbHNlOwotICAgIGJvb2wgY29udGFpbnNQb2ludDIgPSBmYWxz
ZTsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQzID0gZmFsc2U7Ci0gICAgYm9vbCBjb250YWluc1Bv
aW50NCA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQxID0gZmFsc2U7Ci0gICAg
Ym9vbCBpbnRlcnNlY3RGb3JQb2ludDIgPSBmYWxzZTsKLSAgICBib29sIGludGVyc2VjdEZvclBv
aW50MyA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmFsc2U7Ci0KLSAg
ICAvLyBUb3AgLyBib3R0b20gdmVydGljYWwgY2xhbXBpbmcuCi0gICAgaWYgKGJvdW5kcy5jb250
YWluc1BvaW50KHRvQ2xhbXAucDEoKSkpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDEgPSB0cnVl
OwotICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsKLSAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0
Rm9yUG9pbnQxID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAx
KCksIGJvdW5kcy5wMigpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAucDQoKSwgcDEpKSkKLSAgICAg
ICAgcDEgPSB0b0NsYW1wLnAxKCk7Ci0KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9D
bGFtcC5wMigpKSkgewotICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Ci0gICAgICAgIHAy
ID0gdG9DbGFtcC5wMigpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDIgPSBm
aW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAy
KCksIHRvQ2xhbXAucDIoKSwgdG9DbGFtcC5wMygpLCBwMikpKQotICAgICAgICBwMiA9IHRvQ2xh
bXAucDIoKTsKLQotICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAzKCkpKSB7
Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKLSAgICAgICAgcDMgPSB0b0NsYW1wLnAz
KCk7Ci0gICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MyA9IGZpbmRJbnRlcnNlY3Rp
b25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wNCgpLCBib3VuZHMucDMoKSwgdG9DbGFtcC5w
MigpLCB0b0NsYW1wLnAzKCksIHAzKSkpCi0gICAgICAgIHAzID0gdG9DbGFtcC5wMygpOwotCi0g
ICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDQoKSkpIHsKLSAgICAgICAgY29u
dGFpbnNQb2ludDQgPSB0cnVlOwotICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsKLSAgICB9IGVs
c2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdl
ZW5Qb2ludHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAu
cDQoKSwgcDQpKSkKLSAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7Ci0KLSAgICAvLyBJZiBvbmx5
IG9uZSBvZiB0aGUgcG9pbnRzIGludGVyc2VjdGVkIG9uIGVpdGhlciB0aGUgdG9wIG9yIGJvdHRv
bSBsaW5lIHRoZW4gd2UKLSAgICAvLyBjYW4gY2xhbXAgdGhlIG90aGVyIHBvaW50IG9uIHRoYXQg
bGluZSB0byB0aGUgY29ybmVyIG9mIHRoZSBib3VuZHMuCi0gICAgaWYgKCFjb250YWluc1BvaW50
MSAmJiBpbnRlcnNlY3RGb3JQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MSkgewotICAgICAg
ICBjb250YWluc1BvaW50MSA9IHRydWU7Ci0gICAgICAgIHAxID0gYm91bmRzLnAxKCk7Ci0gICAg
fSBlbHNlIGlmICghY29udGFpbnNQb2ludDIgJiYgaW50ZXJzZWN0Rm9yUG9pbnQxICYmICFpbnRl
cnNlY3RGb3JQb2ludDIpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVlOwotICAgICAg
ICBwMiA9IGJvdW5kcy5wMigpOwotICAgIH0KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQ0ICYmIGlu
dGVyc2VjdEZvclBvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KSB7Ci0gICAgICAgIGNvbnRh
aW5zUG9pbnQ0ID0gdHJ1ZTsKLSAgICAgICAgcDQgPSBib3VuZHMucDQoKTsKLSAgICB9IGVsc2Ug
aWYgKCFjb250YWluc1BvaW50MyAmJiBpbnRlcnNlY3RGb3JQb2ludDQgJiYgIWludGVyc2VjdEZv
clBvaW50MykgewotICAgICAgICBjb250YWluc1BvaW50MyA9IHRydWU7Ci0gICAgICAgIHAzID0g
Ym91bmRzLnAzKCk7Ci0gICAgfQotCi0gICAgLy8gTm93IHdlIG9ubHkgbmVlZCB0byBwZXJmb3Jt
IGhvcml6b250YWwgY2xhbXBpbmcgZm9yIHVuYWRqdXN0ZWQgcG9pbnRzLgotICAgIGlmICghY29u
dGFpbnNQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MikKLSAgICAgICAgZmluZEludGVyc2Vj
dGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwMSwgcDIs
IHAyKTsKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQb2ludDMpCi0g
ICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMigpLCBi
b3VuZHMucDMoKSwgcDQsIHAzLCBwMyk7Ci0gICAgaWYgKCFjb250YWluc1BvaW50MSAmJiAhaW50
ZXJzZWN0Rm9yUG9pbnQxKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBv
aW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHAxLCBwMiwgcDEpOwotICAgIGlmICghY29u
dGFpbnNQb2ludDQgJiYgIWludGVyc2VjdEZvclBvaW50NCkKLSAgICAgICAgZmluZEludGVyc2Vj
dGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wNCgpLCBwNCwgcDMs
IHA0KTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFF1YWQocDEsIHAyLCBwMywgcDQpOwot
fQotCi1zdGF0aWMgdm9pZCBsYXllclBhdGhXaXRoSG9sZShDQVNoYXBlTGF5ZXIgKmxheWVyLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRR
dWFkJiBob2xlUXVhZCkKLXsKLSAgICAvLyBOb3RoaW5nIHRvIHNob3cuCi0gICAgaWYgKG91dGVy
UXVhZCA9PSBob2xlUXVhZCB8fCBob2xlUXVhZC5jb250YWluc1F1YWQob3V0ZXJRdWFkKSkgewot
ICAgICAgICBsYXllci5wYXRoID0gTlVMTDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIElmIHRoZXJlIGlzIGEgbmVnYXRpdmUgbWFyZ2luIC8gcGFkZGluZyB0aGVuIHRoZSBvdXRl
ciBib3ggbWlnaHQgbm90Ci0gICAgLy8gZnVsbHkgY29udGFpbiB0aGUgaG9sZSBib3guIEluIHN1
Y2ggY2FzZXMgd2UgcmVjYWxjdWxhdGUgdGhlIGhvbGUgdG8KLSAgICAvLyBiZSB0aGUgaW50ZXJz
ZWN0aW9uIG9mIHRoZSB0d28gcXVhZHMuCi0gICAgV2ViQ29yZTo6RmxvYXRRdWFkIGlubmVySG9s
ZTsKLSAgICBpZiAob3V0ZXJRdWFkLmNvbnRhaW5zUXVhZChob2xlUXVhZCkpCi0gICAgICAgIGlu
bmVySG9sZSA9IGhvbGVRdWFkOwotICAgIGVsc2UKLSAgICAgICAgaW5uZXJIb2xlID0gcXVhZElu
dGVyc2VjdGlvbihvdXRlclF1YWQsIGhvbGVRdWFkKTsKLQotICAgIC8vIENsb2Nrd2lzZSBpbnNp
ZGUgcmVjdCAoaG9sZSksIENvdW50ZXItQ2xvY2t3aXNlIG91dHNpZGUgcmVjdCAoZmlsbCkuCi0g
ICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENH
UGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMSgpLngoKSwgaW5uZXJIb2xlLnAx
KCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDIo
KS54KCksIGlubmVySG9sZS5wMigpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0
aCwgMCwgaW5uZXJIb2xlLnAzKCkueCgpLCBpbm5lckhvbGUucDMoKS55KCkpOwotICAgIENHUGF0
aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wNCgpLngoKSwgaW5uZXJIb2xlLnA0
KCkueSgpKTsKLSAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDEoKS54
KCksIG91dGVyUXVhZC5wMSgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwg
MCwgb3V0ZXJRdWFkLnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOwotICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCku
eSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDIoKS54
KCksIG91dGVyUXVhZC5wMigpLnkoKSk7Ci0gICAgbGF5ZXIucGF0aCA9IHBhdGg7Ci0gICAgQ0dQ
YXRoUmVsZWFzZShwYXRoKTsKLX0KLQotc3RhdGljIHZvaWQgbGF5ZXJQYXRoKENBU2hhcGVMYXll
ciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkKQotewotICAgIENH
TXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR1BhdGhN
b3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDEoKS54KCksIG91dGVyUXVhZC5wMSgpLnko
KSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnA0KCkueCgp
LCBvdXRlclF1YWQucDQoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAs
IG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKLSAgICBDR1BhdGhBZGRM
aW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91dGVyUXVhZC5wMigpLnko
KSk7Ci0gICAgbGF5ZXIucGF0aCA9IHBhdGg7Ci0gICAgQ0dQYXRoUmVsZWFzZShwYXRoKTsKLX0K
LQotLSAodm9pZClfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxp
Z2h0JiloaWdobGlnaHQgb2Zmc2V0Oih1bnNpZ25lZClvZmZzZXQKLXsKLSAgICBBU1NFUlQoW19s
YXllcnMgY291bnRdID49IG9mZnNldCArIDQpOwotICAgIEFTU0VSVChoaWdobGlnaHQucXVhZHMu
c2l6ZSgpID49IG9mZnNldCArIDQpOwotICAgIGlmIChbX2xheWVycyBjb3VudF0gPCBvZmZzZXQg
KyA0IHx8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPCBvZmZzZXQgKyA0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDQVNoYXBlTGF5ZXIgKm1hcmdpbkxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJ
bmRleDpvZmZzZXRdOwotICAgIENBU2hhcGVMYXllciAqYm9yZGVyTGF5ZXIgPSBbX2xheWVycyBv
YmplY3RBdEluZGV4Om9mZnNldCArIDFdOwotICAgIENBU2hhcGVMYXllciAqcGFkZGluZ0xheWVy
ID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAyXTsKLSAgICBDQVNoYXBlTGF5ZXIg
KmNvbnRlbnRMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgM107Ci0KLSAg
ICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFyZ2luUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXRd
OwotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBib3JkZXJRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29m
ZnNldCArIDFdOwotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBwYWRkaW5nUXVhZCA9IGhpZ2hsaWdo
dC5xdWFkc1tvZmZzZXQgKyAyXTsKLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgY29udGVudFF1YWQg
PSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgM107Ci0KLSAgICBtYXJnaW5MYXllci5maWxsQ29s
b3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5tYXJnaW5Db2xvcik7Ci0gICAgYm9yZGVyTGF5
ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuYm9yZGVyQ29sb3IpOwotICAg
IHBhZGRpbmdMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5wYWRkaW5n
Q29sb3IpOwotICAgIGNvbnRlbnRMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hs
aWdodC5jb250ZW50Q29sb3IpOwotCi0gICAgbGF5ZXJQYXRoV2l0aEhvbGUobWFyZ2luTGF5ZXIs
IG1hcmdpblF1YWQsIGJvcmRlclF1YWQpOwotICAgIGxheWVyUGF0aFdpdGhIb2xlKGJvcmRlckxh
eWVyLCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCk7Ci0gICAgbGF5ZXJQYXRoV2l0aEhvbGUocGFk
ZGluZ0xheWVyLCBwYWRkaW5nUXVhZCwgY29udGVudFF1YWQpOwotICAgIGxheWVyUGF0aChjb250
ZW50TGF5ZXIsIGNvbnRlbnRRdWFkKTsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9yTm9kZUxpc3RI
aWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Ci17Ci0gICAgaWYg
KCFoaWdobGlnaHQucXVhZHMuc2l6ZSgpKSB7Ci0gICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXll
cnNdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0g
aGlnaGxpZ2h0LnF1YWRzLnNpemUoKSAvIDQ7Ci0gICAgW3NlbGYgX2NyZWF0ZUxheWVyczpub2Rl
Q291bnQgKiA0XTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsr
aSkKLSAgICAgICAgW3NlbGYgX2xheW91dEZvck5vZGVIaWdobGlnaHQ6aGlnaGxpZ2h0IG9mZnNl
dDppICogNF07Ci19Ci0KLS0gKHZvaWQpX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0Oihjb25zdCBX
ZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAotewotICAgIE5TVUludGVnZXIgbnVtTGF5ZXJz
ID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKTsKLSAgICBpZiAoIW51bUxheWVycykgewotICAgICAg
ICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFtzZWxmIF9jcmVhdGVMYXllcnM6bnVtTGF5ZXJzXTsKLQotICAgIENHQ29sb3JSZWYgY29udGVu
dENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuY29udGVudENvbG9yKTsKLSAgICBmb3Ig
KE5TVUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgewotICAgICAgICBDQVNoYXBl
TGF5ZXIgKmxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgbGF5ZXIu
ZmlsbENvbG9yID0gY29udGVudENvbG9yOwotICAgICAgICBsYXllclBhdGgobGF5ZXIsIGhpZ2hs
aWdodC5xdWFkc1tpXSk7Ci0gICAgfQotfQotCi0tICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29y
ZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKLXsKLSAgICBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2Vi
Q29yZTo6SGlnaGxpZ2h0VHlwZTo6Tm9kZSB8fCBoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpI
aWdobGlnaHRUeXBlOjpOb2RlTGlzdCkKLSAgICAgICAgW3NlbGYgX2xheW91dEZvck5vZGVMaXN0
SGlnaGxpZ2h0OmhpZ2hsaWdodF07Ci0gICAgZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2Vi
Q29yZTo6SGlnaGxpZ2h0VHlwZTo6UmVjdHMpCi0gICAgICAgIFtzZWxmIF9sYXlvdXRGb3JSZWN0
c0hpZ2hsaWdodDpoaWdobGlnaHRdOwotfQotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyM2Q3MDVlODNlNy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJ
TmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgot
I2luY2x1ZGUgIkFQSVVJQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViQXV0b21hdGlvblNlc3Npb24u
aCIKLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAi
V2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNz
UG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
Q2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Nb2NrUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1RleHRFbmNvZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5o
PgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dXaWR0
aCA9IDUwMDsKLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93
SGVpZ2h0ID0gNDAwOwotCi1jb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlh
bFdpbmRvd1dpZHRoID0gMTAwMDsKLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojpp
bml0aWFsV2luZG93SGVpZ2h0ID0gNjUwOwotCi1XZWJJbnNwZWN0b3JQcm94eTo6V2ViSW5zcGVj
dG9yUHJveHkoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICA6IG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJldlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5
VGltZXJGaXJlZCkKLSNlbmRpZgotewotICAgIGlmIChpbnNwZWN0ZWRQYWdlICYmIGluc3BlY3Rl
ZFBhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlID0g
aW5zcGVjdGVkUGFnZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgfQotfQot
Ci1XZWJJbnNwZWN0b3JQcm94eTo6fldlYkluc3BlY3RvclByb3h5KCkKLXsKLX0KLQotdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGluc3BlY3RvckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpOwotfQotCi1XZWJQcmVm
ZXJlbmNlcyYgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgcmV0dXJuIG1faW5zcGVj
dG9yUGFnZS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKLSAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3Rl
ZFBhZ2UtPndlYlBhZ2VJRCgpKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7
Ci0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxs
cHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi0vLyBQdWJs
aWMgQVBJcwotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6aXNGcm9udCgpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwbGF0
Zm9ybUlzRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCgpCi17
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X3Nob3dNZXNzYWdlU2VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG93TWVzc2FnZVNl
bnQgPSB0cnVlOwotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSB0cnVlOwotCi0gICAg
Y3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Ok5vdGlmeU5lZWREZWJ1Z2dlckJy
ZWFrKCksIDApOwotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTaG93KCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93KCkKLXsKLSAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzQ29u
bmVjdGVkKCkpIHsKLSAgICAgICAgYnJpbmdUb0Zyb250KCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb25uZWN0KCk7Ci0KLSAgICAvLyBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGJy
aW5nVG9Gcm9udCBzbyBpdCBvcGVucyB0aGUgSW5zcGVjdG9yLgotICAgIG1faWdub3JlRmlyc3RC
cmluZ1RvRnJvbnQgPSBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aGlkZSgp
Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
aXNWaXNpYmxlID0gZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybUhpZGUoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6Y2xvc2UoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6Q2xvc2UoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZvckNyYXNoKCkKLXsKLSAgICBjbG9z
ZSgpOwotCi0gICAgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnJlb3BlbigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNsb3NlKCk7Ci0gICAgc2hvdygpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkKLXsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5j
ZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpOwotICAgIGluc3BlY3RvclBhZ2VQ
cmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICBpbnNwZWN0
b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpOwotICAg
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
KCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93
RnJhbWUoKTsKLQotICAgIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpyZXNldCgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkgewotICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVk
UGFnZS0+d2ViUGFnZUlEKCkpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nl
c3MoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0
ZWRQYWdlKTsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBh
Z2UgPSBpbnNwZWN0ZWRQYWdlOwotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotCi0gICAgaWYg
KG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6VXBkYXRlQ29ubmVjdGlvbigpKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0
aW9uSWRlbnRpZmllcikKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0g
ICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25z
b2xlKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93UmVzb3VyY2VzKCkKLXsK
LSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRl
RnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3Rvcjo6U2hvd1Jlc291cmNlcygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lKQotewotICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9u
dGVuZFBhZ2UoKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hCb3R0b20oKQotewotICAgIGF0dGFjaChB
dHRhY2htZW50U2lkZTo6Qm90dG9tKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0
YWNoUmlnaHQoKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6UmlnaHQpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hMZWZ0KCkKLXsKLSAgICBhdHRhY2goQXR0YWNo
bWVudFNpZGU6OkxlZnQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2goQXR0
YWNobWVudFNpZGUgc2lkZSkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhY2FuQXR0
YWNoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNBdHRhY2hlZCA9IHRydWU7Ci0gICAg
bV9hdHRhY2htZW50U2lkZSA9IHNpZGU7Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5zZXRJbnNwZWN0b3JBdHRhY2htZW50U2lkZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkp
OwotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5j
ZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKLQotICAgIG1faW5zcGVjdGVk
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7Ci0K
LSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpCb3R0b206Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkF0dGFjaGVkQm90dG9tKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
QXR0YWNobWVudFNpZGU6OlJpZ2h0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGxhdGZvcm1BdHRhY2goKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9p
c1Zpc2libGUpCi0gICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZChmYWxzZSkpOwotICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOwotCi0gICAg
cGxhdGZvcm1EZXRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGluc3BlY3RvclBhZ2VQcmVm
ZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGhlaWdodCk7Ci0gICAgcGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlu
c3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkV2lkdGgod2lkdGgp
OwotICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWco
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCi17
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2lzUHJvZmlsaW5nUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlN0b3BQYWdlUHJvZmlsaW5nKCkpOwotICAgIGVsc2UKLSAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0UGFnZVBy
b2ZpbGluZygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlRWxlbWVudFNl
bGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUpIHsKLSAgICAgICAgbV9pZ25vcmVF
bGVtZW50U2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGNvbm5lY3QoKTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBh
Z2UoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgLy8gVXNlIFVSTCBzbyB3ZSBjYW4gY29tcGFyZSB0
aGUgcGF0aHMgYW5kIHByb3RvY29scy4KLSAgICBVUkwgbWFpblBhZ2VVUkwoVVJMKCksIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpOwotICAgIGlmICh1cmwucHJvdG9jb2wo
KSA9PSBtYWluUGFnZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1
cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobWFpblBhZ2VVUkwucGF0aCgp
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRl
c3QgVVJMIGluIFByb2R1Y3Rpb24gYnVpbGRzLgotICAgIFN0cmluZyB0ZXN0UGFnZVVSTFN0cmlu
ZyA9IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIGlmICh0
ZXN0UGFnZVVSTFN0cmluZy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
VVJMIHRlc3RQYWdlVVJMKFVSTCgpLCB0ZXN0UGFnZVVSTFN0cmluZyk7Ci0gICAgcmV0dXJuIHVy
bC5wcm90b2NvbCgpID09IHRlc3RQYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0ZXN0UGFn
ZVVSTC5wYXRoKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVu
ZFBhZ2UoKQotewotICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0gICAg
QVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG1f
aW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCAqdGhpcyk7Ci0gICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0
b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5B
dHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuaGFzTG9jYWxGcm9udGVuZCgpKSB7Ci0gICAgICAgIHNob3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OwotICAgIGNyZWF0ZUZy
b250ZW5kUGFnZSgpOwotCi0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFt
X2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkVzdGFibGlzaENvbm5lY3Rpb24obV9pbnNw
ZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCksIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKSwgbV91bmRl
clRlc3QsIGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0KLSAgICBBU1NFUlQoIW1faXNBY3RpdmVGcm9u
dGVuZCk7Ci0gICAgbV9pc0FjdGl2ZUZyb250ZW5kID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RlZFBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotCi0gICAg
aWYgKCFtX3VuZGVyVGVzdCkgewotICAgICAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0
YWNoKGNhbkF0dGFjaCk7Ci0gICAgICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hl
ZCgpOwotICAgICAgICBtX2F0dGFjaG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNp
ZGU+KGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkp
OwotCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTZXRBdHRhY2hlZChtX2lzQXR0YWNoZWQpKTsKLQotICAgICAgICBpZiAobV9pc0F0dGFjaGVk
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgICAg
IGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lk
ZTo6UmlnaHQ6Ci0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRh
Y2hlZExlZnQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2Nh
bkF0dGFjaCkpOwotICAgIH0KLQotICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBs
b2NhbCBpbnNwZWN0b3IgYXR0YWNoZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMg
cHJpb3IgdG8gdGhlIF9XS0luc3BlY3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KLSAgICBtX2lu
c3BlY3RlZFBhZ2UtPnVpQ2xpZW50KCkuZGlkQXR0YWNoSW5zcGVjdG9yKCptX2luc3BlY3RlZFBh
Z2UsICp0aGlzKTsKLQotICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjbGllbnQgY2xvc2VkIHRoZSBp
bnNwZWN0b3IgZnJvbSB0aGUgZGVsZWdhdGUgbWV0aG9kLgotICAgIGlmICghbV9pbnNwZWN0b3JQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0
KFVSTChVUkwoKSwgbV91bmRlclRlc3QgPyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVz
dFBhZ2VVUkwoKSA6IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6b3BlbigpCi17Ci0gICAgaWYgKG1fdW5kZXJUZXN0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU2V0Rm9yU2NvcGU8Ym9vbD4gaXNPcGVuaW5nKG1faXNPcGVuaW5nLCB0
cnVlKTsKLSAgICBtX2lzVmlzaWJsZSA9IHRydWU7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0K
LSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIGVs
c2UKLSAgICAgICAgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotCi0gICAgcGxhdGZv
cm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQ2xvc2Uo
KQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAoIW1f
aW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxz
ZTsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGZhbHNlOwotICAgIG1fc2hvd01lc3NhZ2VTZW50
ID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotCi0gICAg
dW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlz
aWJsZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCkpOwotCi0gICAgaWYgKG1faXNBY3RpdmVGcm9u
dGVuZCkgewotICAgICAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSBmYWxzZTsKLSAgICAgICAgbV9p
bnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCp0
aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybURl
dGFjaCgpOwotCi0gICAgLy8gTnVsbCBvdXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVyIHBsYXRmb3Jt
RGV0YWNoKCksIHNvIHRoZSB2aWV3cyBjYW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0bHkuCi0gICAg
bV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLQotICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwot
ICAgIG1fY2FuQXR0YWNoID0gZmFsc2U7Ci0gICAgbV91bmRlclRlc3QgPSBmYWxzZTsKLQotICAg
IHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lu
c3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJv
bnRlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kTG9h
ZGVkKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNz
KCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKQotICAgICAgICBhdXRvbWF0aW9u
U2Vzc2lvbi0+aW5zcGVjdG9yRnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVkUGFnZSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB0ZWxscyB1cyB0byBkbyB0aGlzIG9uIGxv
YWQuIFdlIHdhbnQgdG8KLSAgICAvLyBpZ25vcmUgaXQgb25jZSBpZiB3ZSBvbmx5IHdhbnRlZCB0
byBjb25uZWN0LiBUaGlzIGFsbG93cyB0aGUgSW5zcGVjdG9yIHRvIGxhdGVyCi0gICAgLy8gcmVx
dWVzdCB0byBiZSBicm91Z2h0IHRvIHRoZSBmcm9udCB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQg
b3Igc29tZSBvdGhlciBhY3Rpb24uCi0gICAgaWYgKG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQp
IHsKLSAgICAgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBwbGF0Zm9ybUJy
aW5nVG9Gcm9udCgpOwotICAgIGVsc2UKLSAgICAgICAgb3BlbigpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpicmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBwbGF0Zm9y
bUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBib29s
IHByZXZpb3VzQ2FuQXR0YWNoID0gbV9jYW5BdHRhY2g7Ci0KLSAgICBtX2NhbkF0dGFjaCA9IHBs
YXRmb3JtQ2FuQXR0YWNoKGF2YWlsYWJsZSk7Ci0KLSAgICBpZiAocHJldmlvdXNDYW5BdHRhY2gg
PT0gbV9jYW5BdHRhY2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2luc3BlY3RvclBh
Z2UgJiYgIW1fdW5kZXJUZXN0KQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7
Ci0KLSAgICBwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQotewotICAgIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxT
dHJpbmcpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29u
c3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9lbGVtZW50
U2VsZWN0aW9uQWN0aXZlID0gYWN0aXZlOwotCi0gICAgaWYgKG1faWdub3JlRWxlbWVudFNlbGVj
dGlvbkNoYW5nZSkgewotICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSBm
YWxzZTsKLSAgICAgICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAgICAgIGNsb3NlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aXZlKQotICAgICAgICBwbGF0Zm9y
bUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLSAgICBlbHNlIGlmIChpc0Nvbm5lY3RlZCgp
KQotICAgICAgICBicmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIG1faXNQcm9maWxp
bmdQYWdlID0gYWN0aXZlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRNb2NrQ2Fw
dHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLXsKLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWRPdmVycmlkZShlbmFibGVkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQp
OwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVM
RU1FVFJZKQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUpLCBt
X2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGF2
YWlsYWJsZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKLXsKLSAgICBwbGF0Zm9ybVNhdmUoZmlsZW5hbWUsIGNv
bnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29u
dGVudCkKLXsKLSAgICBwbGF0Zm9ybUFwcGVuZChmaWxlbmFtZSwgY29udGVudCk7Ci19Ci0KLWJv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OnNob3VsZE9wZW5BdHRhY2hlZCgpCi17Ci0gICAgcmV0dXJu
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkgJiYg
Y2FuQXR0YWNoKCk7Ci19Ci0KLS8vIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGNhbiB1c2Ug
dGhlIHN0dWJzIHByb3ZpZGVkIGhlcmUuCi0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2
NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAw
OwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5k
b3dXaWR0aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9y
UGFnZVVSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEg
V2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyYjFmZGZjYTFkZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDMw
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJBdHRhY2ht
ZW50LmgiCi0jaW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBM
QVRGT1JNKE1BQykKLSNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotT0JKQ19DTEFTUyBOU1VSTDsKLU9C
SkNfQ0xBU1MgTlNWaWV3OwotT0JKQ19DTEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV0tXZWJJ
bnNwZWN0b3JQcm94eU9iakNBZGFwdGVyOwotT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyOwotI2VsaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci19Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJGcmFtZVByb3h5OwotY2xhc3MgV2ViSW5zcGVj
dG9yUHJveHlDbGllbnQ7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcmVmZXJlbmNl
czsKLQotZW51bSBjbGFzcyBBdHRhY2htZW50U2lkZSB7Ci0gICAgQm90dG9tLAotICAgIFJpZ2h0
LAotICAgIExlZnQsCi19OwotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eQotICAgIDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6SW5zcGVjdG9yPgotICAgICwgcHVi
bGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwKLSNpZiBQTEFURk9STShXSU4pCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93
TWVzc2FnZUxpc3RlbmVyCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYklu
c3BlY3RvclByb3h5PiBjcmVhdGUoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yUHJveHkoaW5zcGVjdGVk
UGFnZSkpOwotICAgIH0KLQotICAgIH5XZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgdm9pZCBp
bnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBQdWJsaWMgQVBJcwotICAgIFdlYlBhZ2VQcm94eSogaW5z
cGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQotICAgIFdlYlBh
Z2VQcm94eSogaW5zcGVjdG9yUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsg
fQotCi0gICAgYm9vbCBpc0Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQ
YWdlOyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsg
fQotICAgIGJvb2wgaXNGcm9udCgpOwotCi0gICAgdm9pZCBjb25uZWN0KCk7Ci0KLSAgICB2b2lk
IHNob3coKTsKLSAgICB2b2lkIGhpZGUoKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdm9pZCBj
bG9zZUZvckNyYXNoKCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUo
KTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNz
KFdlYlBhZ2VQcm94eSopOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGVudW0gY2xhc3MgSW5z
cGVjdGlvblRhcmdldFR5cGUgeyBMb2NhbCwgUmVtb3RlIH07Ci0gICAgc3RhdGljIFJldGFpblB0
cjxOU1dpbmRvdz4gY3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUs
IEluc3BlY3Rpb25UYXJnZXRUeXBlKTsKLQotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93
VGl0bGUoKSBjb25zdDsKLSAgICB2b2lkIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zs
b2F0ID0gMCk7Ci0gICAgdm9pZCB3aW5kb3dGcmFtZURpZENoYW5nZSgpOwotICAgIHZvaWQgd2lu
ZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotICAgIE5TV2luZG93KiBpbnNwZWN0b3JXaW5kb3co
KSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsgfQotCi0gICAgdm9pZCBj
bG9zZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0
eVRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgYXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3
ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcpOwotICAgIHZvaWQgYXR0YWNobWVudFdpbGxNb3Zl
RnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KTsKLSAgICB2b2lkIGF0dGFjaG1lbnREaWRN
b3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dpbmRvdyk7Ci0KLSAgICBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXcoKSBj
b25zdCB7IHJldHVybiBtX2luc3BlY3RvclZpZXc7IH07Ci0gICAgdm9pZCBzZXRDbGllbnQoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmKTsKLSNlbmRpZgotCi0gICAg
dm9pZCBzaG93Q29uc29sZSgpOwotICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOwotICAgIHZvaWQg
c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqKTsKLQotICAgIEF0dGFjaG1l
bnRTaWRlIGF0dGFjaG1lbnRTaWRlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2lkZTsg
fQotICAgIGJvb2wgaXNBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdHRhY2hlZDsgfQot
ICAgIHZvaWQgYXR0YWNoUmlnaHQoKTsKLSAgICB2b2lkIGF0dGFjaExlZnQoKTsKLSAgICB2b2lk
IGF0dGFjaEJvdHRvbSgpOwotICAgIHZvaWQgYXR0YWNoKEF0dGFjaG1lbnRTaWRlID0gQXR0YWNo
bWVudFNpZGU6OkJvdHRvbSk7Ci0gICAgdm9pZCBkZXRhY2goKTsKLQotICAgIHZvaWQgc2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dX
aWR0aCh1bnNpZ25lZCk7Ci0KLSAgICB2b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKLQotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7Ci0KLSAgICBib29sIGlz
UHJvZmlsaW5nUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQcm9maWxpbmdQYWdlOyB9Ci0gICAg
dm9pZCB0b2dnbGVQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICBib29sIGlzRWxlbWVudFNlbGVjdGlv
bkFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZTsgfQotICAg
IHZvaWQgdG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpOwotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKGJvb2wpOwotCi0gICAgLy8gUHJvdmlkZWQgYnkgcGxhdGZvcm0gV2Vi
SW5zcGVjdG9yUHJveHkgaW1wbGVtZW50YXRpb25zLgotICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVj
dG9yUGFnZVVSTCgpOwotICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsK
LSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvckJhc2VVUkwoKTsKLSAgICBzdGF0aWMgYm9vbCBp
c01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBEZWJ1Z2dh
YmxlSW5mb0RhdGEgaW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpOwotCi0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dXaWR0aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWluaW11bVdpbmRvd0hlaWdodDsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFs
V2luZG93V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWln
aHQ7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVBy
b3h5Kik7Ci0KLSAgICB2b2lkIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0g
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKLQotICAgIC8vIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0gICAgdm9p
ZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsK
LSAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIENvbm5lY3Rpb25UeXBlOjpMb2NhbDsgfQotCi0gICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdp
bmRvdygpOwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwot
Ci0gICAgdm9pZCBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsKLSAgICB2b2lkIHBsYXRmb3Jt
SW52YWxpZGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBh
Z2VUb0Zyb250KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUhpZGUoKTsKLSAgICBib29sIHBsYXRmb3Jt
SXNGcm9udCgpOwotICAgIHZvaWQgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJv
b2wpOwotICAgIHZvaWQgcGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYp
OwotICAgIHZvaWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvJik7Ci0gICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQo
KTsKLSAgICB1bnNpZ25lZCBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIHZvaWQgcGxhdGZvcm1EZXRhY2goKTsKLSAgICB2b2lk
IHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgcGxh
dGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKTsKLSAgICB2b2lkIHBsYXRmb3Jt
U2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZv
cm1TdGFydFdpbmRvd0RyYWcoKTsKLSAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKLSNlbHNl
Ci0gICAgYm9vbCBwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsg
cmV0dXJuIHdlYlByb2Nlc3NDYW5BdHRhY2g7IH0KLSNlbmRpZgotCi0gICAgLy8gQ2FsbGVkIGJ5
IFdlYkluc3BlY3RvclByb3h5IG1lc3NhZ2VzCi0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpOwotICAgIHZvaWQgc2V0RnJv
bnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCk7Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLSAg
ICB2b2lkIGRpZENsb3NlKCk7Ci0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLSAgICB2b2lkIGJy
aW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsKLSAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNo
YW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYp
OwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpOwotICAgIHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCB0
aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURl
dmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzYXZlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotCi0gICAgYm9vbCBjYW5BdHRhY2go
KSBjb25zdCB7IHJldHVybiBtX2NhbkF0dGFjaDsgfQotICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFj
aGVkKCk7Ci0KLSAgICB2b2lkIG9wZW4oKTsKLQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZl
bCgpIGNvbnN0OwotCi0gICAgV2ViUHJlZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpIGNvbnN0OwotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCi0gICAgdm9p
ZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5U
LCBXUEFSQU0sIExQQVJBTSk7Ci0gICAgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAg
dm9pZCB3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92
ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51
bGxwdHIgfTsKLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsK
LQotICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Zpc2libGUg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0F0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
Y2FuQXR0YWNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1fc2hvd01lc3NhZ2VTZW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdu
b3JlRmlyc3RCcmluZ1RvRnJvbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0
aW9uQWN0aXZlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNo
YW5nZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzT3BlbmluZyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2lzQWN0aXZlRnJvbnRlbmQgeyBmYWxzZSB9OwotCi0gICAgQXR0YWNobWVudFNpZGUgbV9h
dHRhY2htZW50U2lkZSB7QXR0YWNobWVudFNpZGU6OkJvdHRvbX07Ci0KLSNpZiBQTEFURk9STShN
QUMpCi0gICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRv
dzsKLSAgICBSZXRhaW5QdHI8V0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNB
ZGFwdGVyOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3Rl
ZFRvQWN0dWFsVVJMTWFwOwotICAgIFJ1bkxvb3A6OlRpbWVyPFdlYkluc3BlY3RvclByb3h5PiBt
X2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcjsKLSAgICBTdHJpbmcgbV91cmxTdHJp
bmc7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OwotICAgIGJvb2wgbV9pc09i
c2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0IHsgZmFsc2UgfTsKLSNlbGlmIFBMQVRGT1JNKEdUSykK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5zcGVjdG9yUHJveHlDbGllbnQ+IG1fY2xpZW50Owot
ICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdl
dCogbV9pbnNwZWN0b3JXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX2hlYWRl
ckJhciB7IG51bGxwdHIgfTsKLSAgICBTdHJpbmcgbV9pbnNwZWN0ZWRVUkxTdHJpbmc7Ci0jZWxp
ZiBQTEFURk9STShXSU4pCi0gICAgSFdORCBtX2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRy
IH07Ci0gICAgSFdORCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07Ci0g
ICAgSFdORCBtX2luc3BlY3RvclZpZXdXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2lu
c3BlY3RvckRldGFjaFdpbmRvdyB7IG51bGxwdHIgfTsKLSAgICBSZWZQdHI8V2ViVmlldz4gbV9p
bnNwZWN0b3JWaWV3OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjc3NTUzYzZiLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdl
cy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yUHJveHkg
ewotICAgIE9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVu
ZGVyVGVzdCkKLSAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5l
Y3Rpb25JZGVudGlmaWVyKQotCi0gICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3Nh
Z2UpCi0KLSAgICBGcm9udGVuZExvYWRlZCgpCi0gICAgRGlkQ2xvc2UoKQotICAgIEJyaW5nVG9G
cm9udCgpCi0gICAgQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi0gICAgUmVvcGVuKCkKLSAg
ICBSZXNldFN0YXRlKCkKLQotICAgIEluc3BlY3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmlu
ZykKLSAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmlj
YXRlSW5mbykKLSAgICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLSAgICBU
aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi0gICAgU2V0TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi0KLSAgICBTYXZl
KFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVBcykKLSAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVu
dCkKLQotICAgIEF0dGFjaEJvdHRvbSgpCi0gICAgQXR0YWNoUmlnaHQoKQotICAgIEF0dGFjaExl
ZnQoKQotICAgIERldGFjaCgpCi0KLSAgICBBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wg
YXZhaWxhYmxlKQotCi0gICAgU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0
KQotICAgIFNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi0KLSAgICBTZXRT
aGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0KLSAgICBTdGFydFdpbmRvd0RyYWco
KQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRp
bGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGll
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZWExNWVlNjU3Li4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0KLSNpbmNs
dWRlICJBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi10eXBl
ZGVmIEhhc2hNYXA8V2ViUGFnZVByb3h5KiwgdW5zaWduZWQ+IFBhZ2VMZXZlbE1hcDsKLQotc3Rh
dGljIFBhZ2VMZXZlbE1hcCYgcGFnZUxldmVsTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UGFnZUxldmVsTWFwPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdW5zaWduZWQg
aW5zcGVjdG9yTGV2ZWxGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICBpZiAocGFn
ZSkgewotICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBwYWdlTGV2ZWxNYXAoKS5maW5kKHBhZ2Up
OwotICAgICAgICBpZiAoZmluZFJlc3VsdCAhPSBwYWdlTGV2ZWxNYXAoKS5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJu
IDE7Ci19Ci0KLVN0cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQ
YWdlUHJveHkqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIl9fV2ViSW5zcGVjdG9y
UGFnZUdyb3VwTGV2ZWwiLCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UocGFnZSksICJfXyIpOwotfQot
Ci12b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdl
YlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKLXsKLSAgICBwYWdlTGV2ZWxNYXAoKS5zZXQoaW5z
cGVjdG9yUGFnZSwgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UpKTsKLX0KLQot
dm9pZCB1bnRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UpCi17
Ci0gICAgcGFnZUxldmVsTWFwKCkucmVtb3ZlKGluc3BlY3RvclBhZ2UpOwotfQotCi1zdGF0aWMg
V2ViUHJvY2Vzc1Bvb2wqIHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sOwotc3RhdGljIFdlYlBy
b2Nlc3NQb29sKiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sOwotCi1XZWJQcm9jZXNzUG9v
bCYgaW5zcGVjdG9yUHJvY2Vzc1Bvb2wodW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAg
IC8vIEhhdmluZyBvdXIgb3duIHByb2Nlc3MgcG9vbCByZW1vdmVzIHVzIGZyb20gdGhlIG1haW4g
cHJvY2VzcyBwb29sIGFuZAotICAgIC8vIGd1YXJhbnRlZXMgbm8gcHJvY2VzcyBzaGFyaW5nIGZv
ciBvdXIgdXNlciBpbnRlcmZhY2UuCi0gICAgV2ViUHJvY2Vzc1Bvb2wqJiBwb29sID0gKGluc3Bl
Y3Rpb25MZXZlbCA9PSAxKSA/IHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sIDogc19uZXN0ZWRJ
bnNwZWN0b3JQcm9jZXNzUG9vbDsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgYXV0byBjb25m
aWd1cmF0aW9uID0gQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAg
ICAgICBwb29sID0gJldlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbi5nZXQoKSku
bGVha1JlZigpOwotICAgICAgICAvLyBEbyBub3QgZGVsYXkgcHJvY2VzcyBsYXVuY2ggZm9yIGlu
c3BlY3RvciBwYWdlcyBhcyBpbnNwZWN0b3IgcGFnZXMgZG8gbm90IGtub3cgaG93IHRvIHRyYW5z
aXRpb24gZnJvbSBhIHRlcm1pbmF0ZWQgcHJvY2Vzcy4KLSAgICAgICAgcG9vbC0+ZGlzYWJsZURl
bGF5ZWRXZWJQcm9jZXNzTGF1bmNoKCk7Ci0gICAgfQotICAgIHJldHVybiAqcG9vbDsKLX0KLQot
Ym9vbCBpc0luc3BlY3RvclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkK
LXsKLSAgICByZXR1cm4gKHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sICYmIHNfbWFpbkluc3Bl
Y3RvclByb2Nlc3NQb29sID09ICZwcm9jZXNzUG9vbCkKLSAgICAgICAgfHwgKHNfbmVzdGVkSW5z
cGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCA9PSAmcHJv
Y2Vzc1Bvb2wpOwotfQotCi1ib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmIHdlYlBh
Z2UpCi17Ci0gICAgcmV0dXJuIHBhZ2VMZXZlbE1hcCgpLmNvbnRhaW5zKCZ3ZWJQYWdlKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
Ykluc3BlY3RvclV0aWxpdGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTll
YTc1ODhjYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5z
cGVjdG9yVXRpbGl0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlByb2Nl
c3NQb29sOwotCi0vLyBUaGUgaW5zcGVjdG9yIHBhZ2UgZ3JvdXBzIGFyZSB1c2VkIHRvIGdpdmUg
ZGlmZmVyZW50IHByZWZlcmVuY2VzIHRvIGVhY2gKLS8vIGluc3BlY3RvciBsZXZlbCBieSBzZXR0
aW5nIGEgcGVyLWxldmVsIHBhZ2UgZ3JvdXAgaWRlbnRpZmllci4KLXVuc2lnbmVkIGluc3BlY3Rv
ckxldmVsRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKLVN0cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJ
ZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKLXZvaWQgdHJhY2tJbnNwZWN0b3JQYWdl
KFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdl
KTsKLXZvaWQgdW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdl
KTsKLQotV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVkIGluc3Bl
Y3Rpb25MZXZlbCk7Ci1ib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wm
KTsKLWJvb2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYpOwotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJlYmJkZjg3YWNlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgotCi0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0j
aW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLVdlYlBhZ2VEZWJ1Z2dhYmxlOjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkm
IHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLXsKLX0KLQotU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dh
YmxlOjpuYW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7Ci0KLSAgICBpZiAoIW1fcGFnZS5tYWluRnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fcGFnZS5tYWlu
RnJhbWUoKS0+dGl0bGUoKTsKLX0KLQotU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwoKSBj
b25zdAotewotICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gV1RG
OjpibGFua1VSTCgpLnN0cmluZygpOwotCi0gICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWluRnJh
bWUoKS0+dXJsKCkuc3RyaW5nKCk7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gdXJsOwotfQotCi1i
b29sIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7Ci19
Ci0KLXZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFu
bmVsLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNlKQot
ewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5u
ZWwsIGlzQXV0b21hdGljQ29ubmVjdGlvbiwgaW1tZWRpYXRlbHlQYXVzZSk7Ci19Ci0KLXZvaWQg
V2ViUGFnZURlYnVnZ2FibGU6OmRpc2Nvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQot
ewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNo
YW5uZWwpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VGcm9t
UmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3BhZ2UuaW5zcGVjdG9yQ29u
dHJvbGxlcigpLmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQotdm9p
ZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCi17Ci0g
ICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcp
OwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIG1fbmFtZU92ZXJyaWRlID0gbmFtZTsKLSAgICB1cGRhdGUoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1
Z2dhYmxlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjg0OGRlMTE2YS4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdGlvblRhcmdldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViUGFnZVByb3h5OwotCi1jbGFzcyBXZWJQYWdlRGVidWdnYWJsZSBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rpb25UYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VEZWJ1Z2dhYmxlKTsKLXB1
YmxpYzoKLSAgICBXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmKTsKLSAgICB+V2ViUGFn
ZURlYnVnZ2FibGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xs
YWJsZVRhcmdldDo6VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpS
ZW1vdGVDb250cm9sbGFibGVUYXJnZXQ6OlR5cGU6OldlYlBhZ2U7IH0KLQotICAgIFN0cmluZyBu
YW1lKCkgY29uc3QgZmluYWw7Ci0gICAgU3RyaW5nIHVybCgpIGNvbnN0IGZpbmFsOwotICAgIGJv
b2wgaGFzTG9jYWxEZWJ1Z2dlcigpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBjb25uZWN0KElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBm
YWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIGZpbmFsOwotICAgIHZvaWQgZGlz
Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIGZpbmFsOwotICAgIHZvaWQgZGlz
cGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOwotICAg
IHZvaWQgc2V0SW5kaWNhdGluZyhib29sKSBmaW5hbDsKLQotICAgIGNvbnN0IFN0cmluZyYgbmFt
ZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7IH0KLSAgICB2b2lkIHNl
dE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlUHJv
eHkmIG1fcGFnZTsKLSAgICBTdHJpbmcgbV9uYW1lT3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DT05UUk9MTEFCTEVfVEFSR0VU
KFdlYktpdDo6V2ViUGFnZURlYnVnZ2FibGUsIFdlYlBhZ2UpOwotCi0jZW5kaWYgLy8gRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFlZTI4YmY3MTYzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5o
IgotCi0jaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJGcmFt
ZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgotI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50
QmFzZS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1zdGF0aWMgU3RyaW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zp
c2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsK
LX0KLQotV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9u
dGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRlKCkpCi0gICAgLCBtX2JhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVm
KCkpKQotewotICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdl
dEFnZW50PihtX2Zyb250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgp
KTsKLQotICAgIG1fdGFyZ2V0QWdlbnQgPSB0YXJnZXRBZ2VudC5nZXQoKTsKLQotICAgIG1fYWdl
bnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdldEFnZW50KSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXI6OmluaXQoKQotewotICAgIFN0cmluZyBwYWdlVGFyZ2V0SWQgPSBXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG1fcGFnZS53ZWJQYWdlSUQoKSk7Ci0gICAg
Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlOjpQYWdlKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
cGFnZUNsb3NlZCgpCi17Ci0gICAgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOwotCi0gICAgbV9h
Z2VudHMuZGlzY2FyZFZhbHVlcygpOwotfQotCi1ib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpoYXNMb2NhbEZyb250ZW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcm9udGVuZFJv
dXRlci0+aGFzTG9jYWxGcm9udGVuZCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIGZyb250
ZW5kQ2hhbm5lbCwgYm9vbCwgYm9vbCkKLXsKLSAgICBib29sIGNvbm5lY3RpbmdGaXJzdEZyb250
ZW5kID0gIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpOwotCi0gICAgbV9mcm9udGVu
ZFJvdXRlci0+Y29ubmVjdEZyb250ZW5kKGZyb250ZW5kQ2hhbm5lbCk7Ci0KLSAgICBpZiAoY29u
bmVjdGluZ0ZpcnN0RnJvbnRlbmQpCi0gICAgICAgIG1fYWdlbnRzLmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZCgmbV9mcm9udGVuZFJvdXRlci5nZXQoKSwgJm1fYmFja2VuZERpc3BhdGNoZXIu
Z2V0KCkpOwotCi0gICAgbV9wYWdlLmRpZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291bnQobV9m
cm9udGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQotICAgIGlmIChoYXNMb2NhbEZyb250ZW5kKCkpCi0gICAgICAgIG1fcGFnZS5yZW1v
dGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZChGcm9udGVuZENoYW5u
ZWwmIGZyb250ZW5kQ2hhbm5lbCkKLXsKLSAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0
RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVsKTsKLQotICAgIGJvb2wgZGlzY29ubmVjdGluZ0xhc3RG
cm9udGVuZCA9ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKLSAgICBpZiAoZGlz
Y29ubmVjdGluZ0xhc3RGcm9udGVuZCkKLSAgICAgICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdG9yRGVzdHJveWVkKTsKLQot
ICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0
ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkKLSAgICAgICAgbV9wYWdlLnJlbW90ZUlu
c3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEFsbEZyb250ZW5kcygpCi17Ci0gICAgLy8g
RklYTUU6IEhhbmRsZSBhIGxvY2FsIGluc3BlY3RvciBjbGllbnQuCi0KLSAgICBpZiAoIW1fZnJv
bnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBO
b3RpZnkgYWdlbnRzIGZpcnN0LCBzaW5jZSB0aGV5IG1heSBuZWVkIHRvIHVzZSBJbnNwZWN0b3JD
bGllbnQuCi0gICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29u
bmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsKLQotICAgIC8vIERpc2Nvbm5l
Y3QgYW55IHJlbWFpbmluZyByZW1vdGUgZnJvbnRlbmRzLgotICAgIG1fZnJvbnRlbmRSb3V0ZXIt
PmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0
b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5m
b3JtYXRpb25EaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPmRpc3BhdGNoKG1lc3NhZ2UpOwotfQot
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKLXsKLSNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBtX3BhZ2Uuc2V0SW5kaWNhdGluZyhpbmRpY2F0aW5nKTsKLSNlbHNl
Ci0gICAgaWYgKGluZGljYXRpbmcpCi0gICAgICAgIG1fcGFnZS5zaG93SW5zcGVjdG9ySW5kaWNh
dGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYWdlLmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9u
KCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCi17Ci0gICAgYWRkVGFyZ2V0KEluc3BlY3RvclRh
cmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSkpOwotfQotCi12b2lkIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQpCi17Ci0gICAgYXV0byBpdCA9IG1fdGFyZ2V0cy5maW5kKHRhcmdldElk
KTsKLSAgICBpZiAoaXQgPT0gbV90YXJnZXRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCppdC0+dmFsdWUpOwotICAgIG1fdGFyZ2V0
cy5yZW1vdmUoaXQpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5k
TWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRh
cmdldFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2UpOwotfQotCi1ib29sIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjpzaG91bGRQYXVzZUxvYWRpbmcoY29uc3QgUHJvdmlzaW9uYWxQYWdl
UHJveHkmIHByb3Zpc2lvbmFsUGFnZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmRSb3V0
ZXItPmhhc0Zyb250ZW5kcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiB0
YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOwotICAg
IEFTU0VSVCh0YXJnZXQpOwotICAgIHJldHVybiB0YXJnZXQtPmlzUGF1c2VkKCk7Ci19Ci0KLXZv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNr
KGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIFdURjo6RnVuY3Rp
b248dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5n
ZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci0gICAgQVNTRVJUKHRhcmdldCk7Ci0g
ICAgdGFyZ2V0LT5zZXRSZXN1bWVDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQ
cm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIGFkZFRhcmdldChJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQo
cHJvdmlzaW9uYWxQYWdlKSwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7
Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxEZXN0cm95UHJvdmlz
aW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCi17
Ci0gICAgZGVzdHJveUluc3BlY3RvclRhcmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2Up
KTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlz
aW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlEKQotewotICAgIFN0cmluZyBvbGRJRCA9IFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQob2xkV2ViUGFnZUlEKTsKLSAgICBTdHJpbmcg
bmV3SUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7
Ci0gICAgYXV0byBuZXdUYXJnZXQgPSBtX3RhcmdldHMudGFrZShuZXdJRCk7Ci0gICAgQVNTRVJU
KG5ld1RhcmdldCk7Ci0gICAgbmV3VGFyZ2V0LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgp
OwotICAgIG1fdGFyZ2V0QWdlbnQtPmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBu
ZXdJRCk7Ci0KLSAgICAvLyBXZSd2ZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5k
IHdpbGwgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2UgZnJvbSBpdCwgc28KLSAgICAvLyB3ZSBkZXN0
cm95IGV2ZXJ5dGhpbmcgYnV0IHRoZSBuZXcgdGFyZ2V0IGhlcmUuCi0gICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8yMDI5Mzc+IGRvIG5vdCBkZXN0cm95IHRhcmdldHMgdGhhdCBi
ZWxvbmcgdG8gdGhlIGNvbW1pdHRlZCBwYWdlLgotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90
YXJnZXRzLnZhbHVlcygpKQotICAgICAgICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQo
KnRhcmdldCk7Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV90YXJnZXRzLnNldChuZXdU
YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZShuZXdUYXJnZXQpKTsKLX0KLQotdm9pZCBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0
b3JUYXJnZXRQcm94eT4mJiB0YXJnZXQpCi17Ci0gICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0Q3Jl
YXRlZCgqdGFyZ2V0KTsKLSAgICBtX3RhcmdldHMuc2V0KHRhcmdldC0+aWRlbnRpZmllcigpLCBX
VEZNb3ZlKHRhcmdldCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNhZWRmMGMwYy4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkluc3BlY3RvclRhcmdl
dFByb3h5LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRSZWdpc3Ry
eS5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgQmFja2VuZERpc3BhdGNo
ZXI7Ci1jbGFzcyBGcm9udGVuZENoYW5uZWw7Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcik7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7Ci0KLSAgICB2b2lkIGluaXQoKTsKLSAgICB2b2lk
IHBhZ2VDbG9zZWQoKTsKLQotICAgIGJvb2wgaGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29s
IGlzQXV0b21hdGljSW5zcGVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBm
YWxzZSk7Ci0gICAgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENo
YW5uZWwmKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIHZvaWQg
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCk7
Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgdm9pZCBkZXN0
cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOwotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSAgICBib29sIHNob3VsZFBhdXNlTG9hZGluZyhjb25zdCBQ
cm92aXNpb25hbFBhZ2VQcm94eSYpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGludWVMb2FkaW5n
Q2FsbGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
KT4mJik7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBh
Z2VQcm94eSYpOwotICAgIHZvaWQgd2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJv
dmlzaW9uYWxQYWdlUHJveHkmKTsKLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIG5ld1dlYlBhZ2VJRCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmKTsKLQotICAgIFdlYlBhZ2VQcm94eSYg
bV9wYWdlOwotICAgIFJlZjxJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91
dGVyOwotICAgIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotICAgIEluc3BlY3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKLSAgICBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldEFnZW50KiBtX3RhcmdldEFnZW50OwotICAgIEhhc2hNYXA8
U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDlkNTBkYzI4NmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDI2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNs
aWVudC5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElE
ZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yVXRpbHMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5o
PgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgp
OwotcHVibGljOgotICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVu
dCYgaW5zcGVjdG9yQ2xpZW50LCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdl
dElEKQotICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgp
KQotICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAgICAgICAg
LCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJRCh0YXJn
ZXRJRCkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICB9Ci0K
LSAgICB+UmVtb3RlSW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0
Q2xpZW50KG51bGxwdHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQot
Ci0gICAgdm9pZCBsb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtp
dC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0
IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1
Z2dhYmxlSW5mbyA9IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0Rh
dGE6OmVtcHR5KCkpOwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUo
SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZSk7Ci0gICAgICAgIG1fcHJveHktPmxv
YWQoV1RGTW92ZShkZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21t
YW5kc1VSTCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9w
cm94eS0+c2hvdygpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VGFyZ2V0TmFtZShjb25zdCBDU3Ry
aW5nJiBuYW1lKQotICAgIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIG1fcHJveHktPnVw
ZGF0ZVdpbmRvd1RpdGxlKG5hbWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgbV9w
cm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25u
ZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2VG
cm9tRnJvbnRlbmQoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQu
Y2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7Ci0gICAg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLSAgICB1aW50NjRfdCBt
X2Nvbm5lY3Rpb25JRDsKLSAgICB1aW50NjRfdCBtX3RhcmdldElEOwotfTsKLQotY29uc3QgU29j
a2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzJiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Om1l
c3NhZ2VIYW5kbGVycygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFNvY2tl
dENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycz4gbWVzc2FnZUhhbmRsZXJzID0gU29ja2V0Q29u
bmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzKHsKLSAgICB7ICJEaWRDbG9zZSIsIHN0ZDo6cGFpcjxD
U3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9LAotICAgICAg
ICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgewot
ICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNs
aWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGNsaWVudC5jb25uZWN0aW9uRGlkQ2xvc2Uo
KTsKLSAgICAgICAgfX0KLSAgICB9LAotICAgIHsgIkRpZFNldHVwSW5zcGVjdG9yQ2xpZW50Iiwg
c3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAi
KGF5KSIsCi0gICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVy
cywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0
aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBH
UmVmUHRyPEdWYXJpYW50PiBiYWNrZW5kQ29tbWFuZHNWYXJpYW50OwotICAgICAgICAgICAgZ192
YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKEBheSkiLCAmYmFja2VuZENvbW1hbmRzVmFyaWFudC5v
dXRQdHIoKSk7Ci0gICAgICAgICAgICBjbGllbnQuc2V0QmFja2VuZENvbW1hbmRzKGdfdmFyaWFu
dF9nZXRfYnl0ZXN0cmluZyhiYWNrZW5kQ29tbWFuZHNWYXJpYW50LmdldCgpKSk7Ci0gICAgICAg
IH19Ci0gICAgfSwKLSAgICB7ICJTZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNv
Y2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHRhKHRzc3NiKSkiLAotICAgICAg
ICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVz
ZXJEYXRhKSB7Ci0gICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3Rl
SW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0
aW9uSUQ7Ci0gICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gaXRlcjsKLSAg
ICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0YSh0c3NzYikpIiwgJmNvbm5l
Y3Rpb25JRCwgJml0ZXIub3V0UHRyKCkpOwotICAgICAgICAgICAgc2l6ZV90IHRhcmdldENvdW50
ID0gZ192YXJpYW50X2l0ZXJfbl9jaGlsZHJlbihpdGVyLmdldCgpKTsKLSAgICAgICAgICAgIFZl
Y3RvcjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlRhcmdldD4gdGFyZ2V0TGlzdDsKLSAgICAgICAg
ICAgIHRhcmdldExpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0YXJnZXRDb3VudCk7Ci0gICAg
ICAgICAgICBndWludDY0IHRhcmdldElEOwotICAgICAgICAgICAgY29uc3QgY2hhciogdHlwZTsK
LSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB1
cmw7Ci0gICAgICAgICAgICBnYm9vbGVhbiBoYXNMb2NhbERlYnVnZ2VyOwotICAgICAgICAgICAg
d2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoaXRlci5nZXQoKSwgIih0JnMmcyZzYikiLCAmdGFy
Z2V0SUQsICZ0eXBlLCAmbmFtZSwgJnVybCwgJmhhc0xvY2FsRGVidWdnZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFnX3N0cmNtcDAodHlwZSwgIldlYiIpIHx8ICFnX3N0cmNtcDAodHlwZSwg
IkphdmFTY3JpcHQiKSkKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGlzdC51bmNoZWNrZWRB
cHBlbmQoeyB0YXJnZXRJRCwgdHlwZSwgbmFtZSwgdXJsIH0pOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2xpZW50LnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdl
dExpc3QpKTsKLSAgICAgICAgfX0KLSAgICB9LAotICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+
IHsgIih0dHMpIiwKLSAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJh
bWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0g
KnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAg
ICAgIGd1aW50NjQgY29ubmVjdGlvbklELCB0YXJnZXRJRDsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIG1lc3NhZ2U7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodHQm
cykiLCAmY29ubmVjdGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdlKTsKLSAgICAgICAgICAgIGNs
aWVudC5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2Fn
ZSk7Ci0gICAgICAgIH19Ci0gICAgfQotICAgIH0pOwotICAgIHJldHVybiBtZXNzYWdlSGFuZGxl
cnM7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNv
bnN0IGNoYXIqIGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVy
JiBvYnNlcnZlcikKLSAgICA6IG1faG9zdEFuZFBvcnQoU3RyaW5nOjpmcm9tVVRGOChhZGRyZXNz
KSArICc6JyArIFN0cmluZzo6bnVtYmVyKHBvcnQpKQotICAgICwgbV9vYnNlcnZlcihvYnNlcnZl
cikKLSAgICAsIG1fY2FuY2VsbGFibGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQot
ewotICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdf
c29ja2V0X2NsaWVudF9uZXcoKSk7Ci0gICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9z
dF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0KCksIG1faG9zdEFuZFBvcnQudXRmOCgpLmRhdGEoKSwg
MCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgW10oR09iamVjdCogb2JqZWN0LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R1NvY2tldENvbm5l
Y3Rpb24+IGNvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9f
aG9zdF9maW5pc2goR19TT0NLRVRfQ0xJRU5UKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0
cigpKSk7Ci0gICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lP
X0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgYXV0byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pCi0gICAgICAgICAg
ICAgICAgY2xpZW50LT5zZXR1cENvbm5lY3Rpb24oU29ja2V0Q29ubmVjdGlvbjo6Y3JlYXRlKFdU
Rk1vdmUoY29ubmVjdGlvbiksIG1lc3NhZ2VIYW5kbGVycygpLCBjbGllbnQpKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVtb3RlSW5zcGVjdG9y
Q2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIGluc3BlY3RvciBzZXJ2ZXI6ICVzIiwgZXJyb3It
Pm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGNsaWVudC0+bV9vYnNlcnZlci5jb25uZWN0aW9u
Q2xvc2VkKCpjbGllbnQpOwotICAgICAgICAgICAgfQotICAgIH0sIHRoaXMpOwotfQotCi1SZW1v
dGVJbnNwZWN0b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGdfY2Fu
Y2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwotfQotCi12b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6c2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmIGNv
bm5lY3Rpb24pCi17Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9u
KTsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXR1cEluc3BlY3RvckNs
aWVudCIsIGdfdmFyaWFudF9uZXcoIihAYXkpIiwgZ192YXJpYW50X25ld19ieXRlc3RyaW5nKElu
c3BlY3Rvcjo6YmFja2VuZENvbW1hbmRzSGFzaCgpLmRhdGEoKSkpKTsKLX0KLQotdm9pZCBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKiBiYWNrZW5k
Q29tbWFuZHMpCi17Ci0gICAgaWYgKCFiYWNrZW5kQ29tbWFuZHMgfHwgIWJhY2tlbmRDb21tYW5k
c1swXSkgewotICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IFN0cmluZygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFz
ZTY0RW5jb2RlKGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2
NERhdGEpOwotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0
O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OmNvbm5lY3Rpb25EaWRDbG9zZSgpCi17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9p
bnNwZWN0b3JQcm94eU1hcC5jbGVhcigpOwotICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51bGxw
dHI7Ci0gICAgbV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50
NjRfdCB0YXJnZXRJRCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlN
YXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywg
Y29ubmVjdGlvbklELCB0YXJnZXRJRF0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1v
dGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpOwotICAgIH0p
OwotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9z
b2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodHQp
IiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUtPmxvYWQoKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdl
VG9CYWNrZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdl
KCJTZW5kTWVzc2FnZVRvQmFja2VuZCIsIGdfdmFyaWFudF9uZXcoIih0dHMpIiwgY29ubmVjdGlv
bklELCB0YXJnZXRJRCwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQs
IHVpbnQ2NF90IHRhcmdldElEKQotewotICAgIEFTU0VSVChtX2luc3BlY3RvclByb3h5TWFwLmNv
bnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKSk7Ci0gICAgbV9z
b2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiRnJvbnRlbmREaWRDbG9zZSIsIGdfdmFyaWFu
dF9uZXcoIih0dCkiLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0gICAgbV9pbnNwZWN0b3JQ
cm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwot
fQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBj
b25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYgdGFyZ2V0TGlzdCkKLXsKLSAgICAvLyBGaW5k
IGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3Rvcjx1aW50NjRfdCwgND4g
dGFyZ2V0c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYgY29ubmVjdGlvblRhcmdldFBhaXIgOiBt
X2luc3BlY3RvclByb3h5TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoY29ubmVjdGlvblRhcmdl
dFBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQg
OiB0YXJnZXRMaXN0KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IGNvbm5lY3Rpb25U
YXJnZXRQYWlyLnNlY29uZCkgewotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAu
Z2V0KGNvbm5lY3Rpb25UYXJnZXRQYWlyKS0+c2V0VGFyZ2V0TmFtZSh0YXJnZXQubmFtZSk7Ci0g
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICB0
YXJnZXRzVG9SZW1vdmUuYXBwZW5kKGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAg
fQotICAgIGZvciAoYXV0byB0YXJnZXRJRCA6IHRhcmdldHNUb1JlbW92ZSkKLSAgICAgICAgbV9p
bnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJn
ZXRJRCkpOwotCi0gICAgbV90YXJnZXRzLnNldChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0
TGlzdCkpOwotICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQotCi12
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90
IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17
Ci0gICAgYXV0byBwcm94eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLSAgICBBU1NFUlQocHJveHkpOwotICAgIGlmICgh
cHJveHkpCi0gICAgICAgIHJldHVybjsKLSAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFkZWUwMmNlNWQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251
bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVj
dGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVj
dCBfR0NhbmNlbGxhYmxlIEdDYW5jZWxsYWJsZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsKLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5Owot
Y2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3Rvck9i
c2VydmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JD
bGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5z
cGVjdG9yQ2xpZW50JikgPSAwOwotfTsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUluc3Bl
Y3RvckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlciYpOwotICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKLQotICAgIHN0
cnVjdCBUYXJnZXQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdWludDY0X3QgaWQ7Ci0gICAgICAg
IENTdHJpbmcgdHlwZTsKLSAgICAgICAgQ1N0cmluZyBuYW1lOwotICAgICAgICBDU3RyaW5nIHVy
bDsKLSAgICB9OwotCi0gICAgY29uc3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+
JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9Ci0gICAgY29uc3QgU3RyaW5n
JiBob3N0QW5kUG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0KLSAgICBjb25z
dCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENv
bW1hbmRzVVJMOyB9Ci0KLSAgICB2b2lkIGluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1
aW50NjRfdCB0YXJnZXRJRCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRf
dCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKLSAgICB2
b2lkIGNsb3NlRnJvbUZyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFy
Z2V0SUQpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpN
ZXNzYWdlSGFuZGxlcnMmIG1lc3NhZ2VIYW5kbGVycygpOwotICAgIHZvaWQgc2V0dXBDb25uZWN0
aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmKTsKLSAgICB2b2lkIGNvbm5lY3Rpb25EaWRDbG9z
ZSgpOwotCi0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOwotICAgIHZv
aWQgc2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYp
OwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwg
dWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqKTsKLQotICAgIFN0cmluZyBtX2hvc3RBbmRQ
b3J0OwotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLSAgICBSZW1vdGVJbnNwZWN0
b3JPYnNlcnZlciYgbV9vYnNlcnZlcjsKLSAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9z
b2NrZXRDb25uZWN0aW9uOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxl
OwotICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7Ci0gICAg
SGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZUluc3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVu
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTljNDQ2NTc2OC4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xp
ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJJ
bnNwZWN0b3JQcm94eTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgPSBkZWZhdWx0OwotICAg
IHZpcnR1YWwgYm9vbCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5n
JiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5Jikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5
JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFj
aGVkV2lkdGgoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCB3aWR0aCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9yUHJveHkm
LCBib29sIGF2YWlsYWJsZSkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkZTM0OWJiNzEuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+LgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1
ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0j
aW5jbHVkZSAiV0tBcnJheS5oIgotI2luY2x1ZGUgIldLQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5j
bHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgotI2luY2x1ZGUg
IldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5k
b3cuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldl
YlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9p
ZCBpbnNwZWN0b3JWaWV3RGVzdHJveWVkKEd0a1dpZGdldCosIGdwb2ludGVyIHVzZXJEYXRhKQot
ewotICAgIFdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdl
Ykluc3BlY3RvclByb3h5Kj4odXNlckRhdGEpOwotCi0gICAgLy8gSW5mb3JtIFdlYlByb2Nlc3Mg
YWJvdXQgd2ViaW5zcGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBzbywKLSAgICAvLyByZXN1bHRz
IGluIGZhaWx1cmUgb2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIHdlYmluc3BlY3Rvci4KLSAg
ICBpbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJiBjbGll
bnQpCi17Ci0gICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1
YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgIW1faW5z
cGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSA/IG1faW5zcGVjdGVkVVJMU3RyaW5nLnV0ZjgoKS5k
YXRhKCkgOiBudWxscHRyKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlZWRl
ZERhdGFiYXNlUXVvdGEoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVm
LCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQg
bG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2ln
bmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4g
c3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVzYWdlLCBjdXJyZW50RGF0YWJh
c2VVc2FnZSAqIDEuMjUpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQ
YWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYkluc3BlY3RvclByb3h5
KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29u
c3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94
eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotc3RhdGlj
IHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwg
V0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lM
aXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQotewotICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4K
LSAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlv
blJlZiktPnNvdXJjZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFt
ZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkluc3BlY3RvclByb3h5
KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3RvclByb3h5
Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLQotICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25S
ZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3Bl
Y3RvciBmaWxlLgotICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVj
dG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51
c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZXZlbnQgZXZlcnl0
aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KLSAgICB0b0lt
cGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKLQotICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQg
aW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQ
YWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCBn
ZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlS
ZWYgcHJvcG9zZWRNZW51UmVmLCBXS0FycmF5UmVmKiBuZXdNZW51UmVmLCBXS0hpdFRlc3RSZXN1
bHRSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCi17Ci0gICAgV0tNdXRhYmxlQXJyYXlSZWYg
bWVudUl0ZW1zID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKLQotICAgIHNpemVfdCBjb3VudCA9
IFdLQXJyYXlHZXRTaXplKHByb3Bvc2VkTWVudVJlZik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGNvbnRleHRN
ZW51SXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRl
bUF0SW5kZXgocHJvcG9zZWRNZW51UmVmLCBpKSk7Ci0gICAgICAgIHN3aXRjaCAoV0tDb250ZXh0
TWVudUl0ZW1HZXRUYWcoY29udGV4dE1lbnVJdGVtKSkgewotICAgICAgICBjYXNlIGtXS0NvbnRl
eHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4
dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBjYXNlIGtXS0NvbnRleHRN
ZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lbnVJdGVtcywgY29u
dGV4dE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgKm5ld01lbnVSZWYgPSBtZW51SXRlbXM7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5z
cGVjdGVkUGFnZSgpKTsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yVmlldyk7Ci0KLSAgICBhdXRv
IHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIu
IiwgIldlYktpdDIuIik7Ci0jaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQotICAgIC8vIEFsbG93
IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMg
d2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdl
c1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBwcmVmZXJlbmNlcy0+
c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7Ci0gICAgfSk7Ci0gICAgYXV0byBwYWdlR3JvdXAg
PSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFn
ZShpbnNwZWN0ZWRQYWdlKCkpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6
OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0
UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0g
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsK
LSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7Ci0g
ICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgq
cGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVy
KEdfT0JKRUNUKG1faW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9p
bnNwZWN0b3JWaWV3KSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvclZpZXcsICJk
ZXN0cm95IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0KLSAg
ICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xpZW50ID0gewotICAgICAgICB7IDIsIHRoaXMgfSwKLSAg
ICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0g
ICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNsb3NlUGFn
ZQotICAgICAgICBudWxscHRyLCAvLyB0YWtlRm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8gZm9j
dXMKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1cwotICAgICAgICBudWxscHRyLCAvLyBydW5K
YXZhU2NyaXB0QWxlcnQKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm0K
LSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdAotICAgICAgICBudWxscHRy
LCAvLyBzZXRTdGF0dXNUZXh0Ci0gICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2lu
Z1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAotICAgICAgICBudWxs
cHRyLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAotICAgICAgICBudWxscHRyLCAvLyBkaWROb3RI
YW5kbGVXaGVlbEV2ZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGFyZVRvb2xiYXJzVmlzaWJsZQot
ICAgICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUKLSAgICAgICAgbnVsbHB0ciwg
Ly8gaXNNZW51QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51QmFyVmlzaWJs
ZQotICAgICAgICBudWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2libGUKLSAgICAgICAgbnVsbHB0
ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc1Jlc2l6YWJs
ZQotICAgICAgICBudWxscHRyLCAvLyBzZXRSZXNpemFibGUKLSAgICAgICAgbnVsbHB0ciwgLy8g
Z2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFdpbmRvd0ZyYW1lLAotICAg
ICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkRHJhdwotICAgICAgICBudWxscHRyLCAvLyBwYWdlRGlkU2Nyb2xsCi0gICAg
ICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuT3BlblBh
bmVsLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIsIC8vIGhlYWRlckhlaWdodAotICAgICAgICBu
dWxscHRyLCAvLyBmb290ZXJIZWlnaHQKLSAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0hlYWRlcgot
ICAgICAgICBudWxscHRyLCAvLyBkcmF3Rm9vdGVyCi0gICAgICAgIG51bGxwdHIsIC8vIHByaW50
RnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKLSAgICAgICAgbnVsbHB0ciwgLy8g
dW51c2VkCi0gICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xk
ZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAotICAgICAg
ICBudWxscHRyLCAvLyBjcmVhdGVQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50Ci0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1
Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxCi0gICAgICAgIG51bGxwdHIs
IC8vIHNob3dDb2xvclBpY2tlcgotICAgICAgICBudWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIK
LSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkCi0gICAg
fTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0gewot
ICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3Bv
bnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQKLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVs
bHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBk
aWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9u
Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lCi0g
ICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAotICAgICAgICBudWxscHRy
LCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIHJlbmRl
cmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAgICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwKLSAgICAg
ICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQotCi0gICAgICAgIG51bGxwdHIs
IC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVu
ZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25H
ZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25h
cHNob3QKLSAgICB9OwotCi0gICAgV0tQYWdlQ29udGV4dE1lbnVDbGllbnRWMyBjb250ZXh0TWVu
dUNsaWVudCA9IHsKLSAgICAgICAgeyAzLCB0aGlzIH0sCi0gICAgICAgIG51bGxwdHIsIC8vIGdl
dENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAg
ICAgIG51bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNlbGVjdGVkCi0gICAgICAgIG51
bGxwdHIsIC8vIGNvbnRleHRNZW51RGlzbWlzc2VkCi0gICAgICAgIGdldENvbnRleHRNZW51RnJv
bVByb3Bvc2VkTWVudSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbnRleHRNZW51Ci0gICAg
ICAgIG51bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVudQotICAgIH07Ci0KLSAgICBXZWJQYWdlUHJv
eHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9W
SUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOwot
Ci0gICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmdWlDbGll
bnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVj
dG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotICAgIFdLUGFnZVNldFBhZ2VDb250
ZXh0TWVudUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNvbnRleHRNZW51Q2xpZW50LmJh
c2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQotewotICAgIGlmIChtX2NsaWVu
dCAmJiBtX2NsaWVudC0+b3BlbldpbmRvdygqdGhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEd0a1dpZGdldCogaW5zcGVjdGVkVmlld1BhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVs
KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLSAgICBpZiAoIVdlYkNvcmU6OndpZGdl
dElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhpbnNwZWN0ZWRWaWV3UGFyZW50KSkKLSAgICAgICAg
aW5zcGVjdGVkVmlld1BhcmVudCA9IG51bGxwdHI7Ci0KLSAgICBBU1NFUlQoIW1faW5zcGVjdG9y
V2luZG93KTsKLSAgICBtX2luc3BlY3RvcldpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05l
dyhpbnNwZWN0ZWRWaWV3UGFyZW50ID8gR1RLX1dJTkRPVyhpbnNwZWN0ZWRWaWV3UGFyZW50KSA6
IG51bGxwdHIpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0
b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3Bl
Y3RvclZpZXcpOwotCi0gICAgaWYgKCFtX2luc3BlY3RlZFVSTFN0cmluZy5pc0VtcHR5KCkpCi0g
ICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci0KLSAgICBnX29iamVjdF9hZGRf
d2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZtX2luc3BlY3RvcldpbmRvdykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChH
VEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX2lu
c3BlY3RvclZpZXcpIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmll
d0Rlc3Ryb3llZCksIHRoaXMpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwot
ICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCp0
aGlzKTsKLQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBndGtfd2lkZ2V0
X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9
IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURp
ZENsb3NlRm9yQ3Jhc2goKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUludmFsaWRhdGUoKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhp
ZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBpZiAobV9pc09wZW5pbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCp0
aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lk
Z2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmIChXZWJDb3JlOjp3aWRn
ZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKLSAgICAgICAgZ3RrX3dpbmRvd19w
cmVzZW50KEdUS19XSU5ET1cocGFyZW50KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsK
LSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVj
dG9yVmlldyk7Ci0gICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRv
dyhwYXJlbnQpKQotICAgICAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgZ3RrX3dpbmRvd19pc19h
Y3RpdmUoR1RLX1dJTkRPVyhwYXJlbnQpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICBtX2luc3BlY3RlZFVSTFN0cmluZyA9IHVybDsKLSAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKCp0aGlzLCB1cmwp
OwotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JX
aW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dD
ZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFn
ZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNw
ZWN0b3IvVXNlckludGVyZmFjZS9NYWluLmh0bWwiKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygicmVz
b3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwiKTsK
LX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSAg
ICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50
ZXJmYWNlLyIpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6Omlu
Zm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRo
ZSBkZWJ1ZyB0YXJnZXQuCi0gICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsK
LX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93
SGVpZ2h0KCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodChp
bnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICByZXR1cm4gZ3Rr
X3dpZGdldF9nZXRfYWxsb2NhdGVkX3dpZHRoKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgp
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAg
IEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAg
IGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShH
VEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICAg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgbV9pbnNw
ZWN0b3JXaW5kb3cgPSAwOwotICAgIH0KLQotICAgIC8vIFNldCBhIGRlZmF1bHQgc2l6ZXMgYmFz
ZWQgb24gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC4KLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLQotICAgIGlmIChtX2F0dGFjaG1lbnRTaWRl
ID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0
dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0Owot
ICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1B
dHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFj
aGVkSGVpZ2h0KSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRh
Y2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAvIDQ7Ci0gICAg
ICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNo
ZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lk
dGgpKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5hdHRhY2goKnRo
aXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3Bl
Y3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSks
IG1faW5zcGVjdG9yVmlldywgbV9hdHRhY2htZW50U2lkZSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93
KG1faW5zcGVjdG9yVmlldyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
RGV0YWNoKCkKLXsKLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3Mo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZp
ZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYgKCFtX2NsaWVudCB8fCAhbV9jbGllbnQtPmRl
dGFjaCgqdGhpcykpIHsKLSAgICAgICAgLy8gRGV0YWNoIGlzIGNhbGxlZCB3aGVuIG1faXNBdHRh
Y2hlZCBpcyB0cnVlLCBidXQgaXQgY291bGQgY2FsbGVkIGJlZm9yZQotICAgICAgICAvLyB0aGUg
aW5zcGVjdG9yIGlzIG9wZW5lZCBpZiB0aGUgaW5zcGVjdG9yIGlzIHNob3duL2Nsb3NlZCBxdWlj
a2x5LiBTbywKLSAgICAgICAgLy8gd2UgbWlnaHQgbm90IGhhdmUgYSBwYXJlbnQgeWV0LgotICAg
ICAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQobV9pbnNw
ZWN0b3JWaWV3KSkKLSAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlO
RVIocGFyZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gZWFy
bHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNs
b3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQg
c2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKSB7Ci0gICAg
ICAgIC8vIFRoZSBpbnNwZWN0b3IgdmlldyB3aWxsIGJlIGRlc3Ryb3llZCwgYnV0IHdlIGRvbid0
IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0byBjbG9zZSB0aGUKLSAgICAgICAgLy8g
aW5zcGVjdG9yIGluIHRoaXMgY2FzZSwgc2luY2UgaXQncyBhbHJlYWR5IGNsb3NlZC4KLSAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwot
ICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIW1faXNB
dHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7Ci0gICAgd2Vi
a2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShp
bnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0
aCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgqdGhp
cywgd2lkdGgpOwotICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VC
S0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0aCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29udGVudHNDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwot
ICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVs
bHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0
aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBw
YXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdl
SUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVu
Y29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIFVOVVNFRF9QQVJBTShmb3JjZVNh
dmVEaWFsb2cpOwotCi0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3Bs
ZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVl
blRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8
R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2Vy
X25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RL
X0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOwotCi0gICAgR3Rr
RmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Ci0g
ICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2Vy
LCBUUlVFKTsKLQotICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3Rh
bmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAotICAgIC8vIGFzIHdlYi1pbnNwZWN0
b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVS
TAotICAgIC8vIHVuZm9ydHVuYXRlbHkuCi0gICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJM
KTsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgotICAgIGd0a19maWxlX2Nob29z
ZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4
KCkuZGF0YSgpKTsKLQotICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9E
SUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmluZyBkYXRhU3Ry
aW5nOwotICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwotCi0gICAgY29uc3QgY2hhciog
ZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVj
dG9yLmRhdGEoKTsKLSAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgp
ID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAgIEdSZWZQdHI8
R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2Vy
KSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgp
KSk7Ci0gICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwg
ZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCi0gICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFD
RV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2lu
c3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVu
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTQ5MGYwZTZmMzAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5o
IgotCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThu
LWxpYi5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLQotc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgewotICAgIEd0a1dp
bmRvdyBwYXJlbnQ7Ci0KLSAgICBHdGtXaWRnZXQqIGhlYWRlckJhcjsKLX07Ci0KLXN0cnVjdCBf
V2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MgewotICAgIEd0a1dpbmRvd0NsYXNzIHBhcmVudDsK
LX07Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0SW5zcGVjdG9yV2luZG93LCB3ZWJraXRfaW5zcGVj
dG9yX3dpbmRvdywgR1RLX1RZUEVfV0lORE9XKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfaW5zcGVj
dG9yX3dpbmRvd19jbGFzc19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzKikKLXsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfaW5pdChXZWJLaXRJbnNwZWN0
b3JXaW5kb3cqIHdpbmRvdykKLXsKLSAgICB3aW5kb3ctPmhlYWRlckJhciA9IGd0a19oZWFkZXJf
YmFyX25ldygpOwotICAgIGd0a19oZWFkZXJfYmFyX3NldF90aXRsZShHVEtfSEVBREVSX0JBUih3
aW5kb3ctPmhlYWRlckJhciksIF8oIldlYiBJbnNwZWN0b3IiKSk7Ci0gICAgZ3RrX2hlYWRlcl9i
YXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFy
KSwgVFJVRSk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfdGl0bGViYXIoR1RLX1dJTkRPVyh3aW5kb3cp
LCB3aW5kb3ctPmhlYWRlckJhcik7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+aGVhZGVy
QmFyKTsKLX0KLQotR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3RrV2luZG93
KiBwYXJlbnQpCi17Ci0gICAgcmV0dXJuIEdUS19XSURHRVQoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0lOU1BFQ1RPUl9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZFTCwgInRyYW5z
aWVudC1mb3IiLCBwYXJlbnQsCi0gICAgICAgICJkZWZhdWx0LXdpZHRoIiwgV2ViSW5zcGVjdG9y
UHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0IiwgV2ViSW5zcGVjdG9y
UHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsKLX0KLQotdm9pZCB3ZWJraXRJ
bnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdywg
Y29uc3QgY2hhciogc3VidGl0bGUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
SU5TUEVDVE9SX1dJTkRPVyh3aW5kb3cpKTsKLQotICAgIGd0a19oZWFkZXJfYmFyX3NldF9zdWJ0
aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIHN1YnRpdGxlKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5k
b3cuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkYzI4ZDEwOWYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJ
TkRPVyAgICAgICAgICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlwZSgpKQotI2Rl
ZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJL
aXRJbnNwZWN0b3JXaW5kb3cpKQotI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQotI2RlZmlu
ZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZp
bmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0
SW5zcGVjdG9yV2luZG93Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9y
V2luZG93IFdlYktpdEluc3BlY3RvcldpbmRvdzsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzczsKLQotR1R5cGUgd2Vi
a2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7Ci0KLUd0a1dpZGdldCogd2Via2l0
SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKLXZvaWQgd2Via2l0SW5zcGVj
dG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiwgY29uc3QgY2hhciog
c3VidGl0bGUpOwotCi1HX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29n
bml6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiYTY5NWU2YmEuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVT
ZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9V
SUdlc3R1cmVSZWNvZ25pemVyLmg+Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JOb2RlU2VhcmNo
R2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVSZWNvZ25pemVyCi0tIChDR1BvaW50KWxvY2F0
aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3OwotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVT
ZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDY3ZmU3YmNjZGIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIldLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgiCi0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyU3Vi
Y2xhc3MuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGltcGxlbWVudGF0aW9uIFdL
SW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIHsKLSAgICBSZXRhaW5QdHI8VUlU
b3VjaD4gX3RvdWNoOwotfQotCi0tIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2
aWV3Ci17Ci0gICAgcmV0dXJuIFtfdG91Y2ggbG9jYXRpb25JblZpZXc6dmlld107Ci19Ci0KLS0g
KHZvaWQpX3Byb2Nlc3NUb3VjaGVzOihOU1NldCAqKXRvdWNoZXMgc3RhdGU6KFVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZSluZXdTdGF0ZQotewotICAgIEFTU0VSVChfdG91Y2gpOwotICAgIGlmIChb
dG91Y2hlcyBjb250YWluc09iamVjdDpfdG91Y2guZ2V0KCldKQotICAgICAgICBzZWxmLnN0YXRl
ID0gbmV3U3RhdGU7Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc0JlZ2FuOihOU1NldCAqKXRvdWNoZXMg
d2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoc2VsZi5zdGF0ZSAhPSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKCFfdG91Y2gpOwotICAgIF90b3VjaCA9IFt0b3VjaGVzIGFueU9iamVjdF07Ci0KLSAgICBb
c2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVCZWdhbl07Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc01vdmVkOihOU1NldCAqKXRvdWNoZXMgd2l0
aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91
Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkXTsKLX0KLQotLSAodm9p
ZCl0b3VjaGVzRW5kZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVu
dAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUVuZGVkXTsKLX0KLQotLSAodm9pZCl0b3VjaGVzQ2FuY2VsbGVkOihOU1Nl
dCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJv
Y2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxs
ZWRdOwotfQotCi0tICh2b2lkKXJlc2V0Ci17Ci0gICAgX3RvdWNoID0gbmlsOwotfQotCi1AZW5k
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0YWJkZWI1ZjZkMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjYx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVz
c2FnZXMuaCIKLSNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbXBv
cnQgIldLRnJhbWVJbmZvLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgi
Ci0jaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkRl
bGVnYXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiV2ViUGFn
ZVByb3h5LmgiCi0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwu
aD4KLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0
Lmg+Ci0KLUBpbnRlcmZhY2UgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIDog
TlNPYmplY3QgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZT4gewotICAgIFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQ
cm94eTsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcgot
Ci0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDoo
TlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9pbnNw
ZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5
LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0
aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkq
KWluc3BlY3RvclByb3h5Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JW
aWV3Q29udHJvbGxlcgotewotICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsK
LX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0
OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsK
LSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpOwotfQotCi1AZW5kCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVdLV2ViVmll
dyAqUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OndlYlZpZXcoKSBjb25zdAotewotICAgIHJldHVy
biBtX2luc3BlY3RvclZpZXcuZ2V0KCkud2ViVmlldzsKLX0KLQotV2ViUGFnZVByb3h5KiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KQotewotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OnRo
aXNdKTsKLQotICAgIG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFBhZ2U6bnVsbHB0cl0pOwotICAgIFtt
X2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0K
LSAgICBtX3dpbmRvdyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhO
U1plcm9SZWN0LCBXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90
ZSk7Ci0gICAgW21fd2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotICAg
IFttX3dpbmRvdyBzZXRGcmFtZUF1dG9zYXZlTmFtZTpAIldLUmVtb3RlV2ViSW5zcGVjdG9yV2lu
ZG93RnJhbWUiXTsKLQotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBtX3dpbmRvdy5nZXQoKS5j
b250ZW50VmlldzsKLSAgICBbd2ViVmlldygpIHNldEZyYW1lOmNvbnRlbnRWaWV3LmJvdW5kc107
Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6d2ViVmlldygpXTsKLQotICAgIHJldHVybiB3
ZWJWaWV3KCktPl9wYWdlLmdldCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV93aW5k
b3cpIHsKLSAgICAgICAgW21fd2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3dp
bmRvdyBjbG9zZV07Ci0gICAgICAgIG1fd2luZG93ID0gbmlsOwotICAgIH0KLQotICAgIGlmICht
X2luc3BlY3RvclZpZXcpIHsKLSAgICAgICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxl
Z2F0ZTpuaWxdOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBuaWw7Ci0gICAgfQotCi0gICAg
aWYgKG1fb2JqQ0FkYXB0ZXIpCi0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAg
W05TV2luZG93IHJlbW92ZUZyYW1lVXNpbmdOYW1lOlttX3dpbmRvdyBmcmFtZUF1dG9zYXZlTmFt
ZV1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9G
cm9udCgpCi17Ci0gICAgW21fd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci0gICAg
W21fd2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp3ZWJWaWV3KCldOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRV
UkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNl
U2F2ZURpYWxvZykKLXsKLSAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94
eU1hYy4KLQotICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAg
TlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2Vz
dGVkVVJMKS5nZXQoKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Ci0gICAgICAgIHBsYXRmb3Jt
VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKLSAgICAgICAgLy8gVGhl
IHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRo
ZW0uCi0gICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIEFT
U0VSVChwbGF0Zm9ybVVSTCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCi0gICAgU3RyaW5nIHN1
Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7Ci0gICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0g
Y29udGVudDsKLQotICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7Ci0g
ICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOwotCi0gICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxV
UkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgaWYgKGJh
c2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRp
bmcpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU0Rh
dGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpv
dXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBbZGF0YUNvbnRlbnQg
d3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllF
UyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKLQotICAgICAgICBt
X2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOwotICAgIH07Ci0KLSAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgewot
ICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07Ci0gICAg
cGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVu
dDsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRo
aXMgZmlsZSB0byBhIHBhdGggYW5kCi0gICAgLy8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9y
eSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKLSAgICAvLyBkZWZhdWx0IGJl
aGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgot
ICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCi0gICAgICAgIHBhbmVsLmRpcmVjdG9yeVVS
TCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOwotCi0gICAg
YXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgewotICAgICAgICBp
ZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7Ci0gICAgICAgIHNh
dmVUb1VSTChwYW5lbC5VUkwpOwotICAgIH07Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gbV93
aW5kb3cgPyBtX3dpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOwotICAgIGlmICh3aW5k
b3cpCi0gICAgICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBs
ZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0pOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29u
c3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3Bl
Y3RvclByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAg
ICAKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxV
UkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhl
IHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAg
IGlmICghYWN0dWFsVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhh
bmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwu
Z2V0KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFto
YW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0Vu
Y29kaW5nXV07Ci0gICAgW2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgV2ViUGFnZVByb3h5KiBp
bnNwZWN0b3JQYWdlID0gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKLSAgICBpbnNwZWN0b3JQYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVu
ZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIGluc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgp
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWco
KQotewotICAgIHdlYlZpZXcoKS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzp1cmxdXTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCi17Ci0gICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsK
LQotICAgIFJldGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBh
ZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7Ci0KLSAgICBBU1NFUlQo
bV93aW5kb3cpOwotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCi0gICAgW2NlcnRp
ZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVn
YXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2Vy
dGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZp
Y2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0
ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRl
czooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3Vw
OllFU107Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRy
dXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3
IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KLSAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlm
aWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcg
c2V0RWRpdGFibGVUcnVzdDpOT107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0
YWlsczpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNd
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhiZDA4ZmY5ZDQuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9OYWtlZFB0
ci5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1PQkpDX0NMQVNTIFdLV2ViVmlldzsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLUBwcm90b2NvbCBXS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lO
Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciA6IE5TT2JqZWN0Ci0KLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tXZWJWaWV3ICp3ZWJWaWV3OwotQHByb3Bl
cnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdh
dGU+IGRlbGVnYXRlOwotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihO
YWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4paW5zcGVjdGVkUGFnZTsKLQotKyAoQk9PTCl2
aWV3SXNJbnNwZWN0b3JXZWJWaWV3OihOU1ZpZXcgKil2aWV3OwotCi1AZW5kCi0KLUBwcm90b2Nv
bCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgotQG9wdGlvbmFs
Ci0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLS0gKEJPT0wp
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotLSAodm9pZClpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93OwotLSAo
dm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyOwotQGVuZAotCi1OU19BU1NV
TUVfTk9OTlVMTF9FTkQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjYzZTBmZDZlLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCi0KLSNp
ZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKLSNpbXBvcnQgIlZl
cnNpb25DaGVja3MuaCIKLSNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCi0jaW1wb3J0ICJXS0luc3Bl
Y3RvcldLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW1wb3J0
ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJz
LmgiCi0jaW1wb3J0ICJXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tQcm9jZXNz
UG9vbEludGVybmFsLmgiCi0jaW1wb3J0ICJXS1VJRGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0
ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3UHJp
dmF0ZS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbXBvcnQgIldlYkluc3Bl
Y3RvclV0aWxpdGllcy5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0IDx3dGYv
V2Vha09iakNQdHIuaD4KLQotQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICgp
IDxXS1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS0luc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlPgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB7Ci0gICAgTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9pbnNwZWN0ZWRQYWdl
OwotICAgIFJldGFpblB0cjxXS0luc3BlY3RvcldLV2ViVmlldz4gX3dlYlZpZXc7Ci0gICAgV2Vh
a09iakNQdHI8aWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4+IF9kZWxlZ2F0
ZTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8
V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBhZ2UKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFRoZSAobG9jYWwp
IGluc3BlY3RlZCBwYWdlIGlzIG5pbCBpZiB0aGUgY29udHJvbGxlciBpcyBob3N0aW5nIGEgUmVt
b3RlIFdlYiBJbnNwZWN0b3Igdmlldy4KLSAgICBfaW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBh
Z2U7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgaWYg
KF93ZWJWaWV3KSB7Ci0gICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOm5pbF07Ci0gICAg
ICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW193ZWJW
aWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOm5pbF07Ci0gICAgICAgIF93ZWJWaWV3
ID0gbmlsOwotICAgIH0KLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoaWQgPFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX2Rl
bGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwotfQotCi0tIChXS1dlYlZpZXcgKil3ZWJWaWV3Ci17
Ci0gICAgLy8gQ29uc3RydWN0IGxhemlseSBzbyB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIGRlbGVn
YXRlIGJlZm9yZSB0aGUgV2ViVmlldyBpcyBjcmVhdGVkLgotICAgIGlmICghX3dlYlZpZXcpIHsK
LSAgICAgICAgTlNSZWN0IGluaXRpYWxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpX
ZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsKLSAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5T
KFtbV0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1l
IGNvbmZpZ3VyYXRpb246W3NlbGYgY29uZmlndXJhdGlvbl1dKTsKLSAgICAgICAgW193ZWJWaWV3
IHNldFVJRGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVs
ZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0Nv
bnRlbnRJbnNldHM6Tk9dOwotICAgICAgICBbX3dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFu
Y2U6WUVTXTsKLSAgICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lk
dGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIF93
ZWJWaWV3LmdldCgpOwotfQotCi0tICh2b2lkKXNldERlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQotewotICAgIF9kZWxlZ2F0ZSA9IGRlbGVn
YXRlOwotfQotCi0tIChXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgotewot
ICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBXS1ByZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IGNvbmZp
Z3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXM7Ci0gICAgcHJlZmVyZW5jZXMuX2FsbG93RmlsZUFj
Y2Vzc0Zyb21GaWxlVVJMcyA9IFlFUzsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2
ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKLSAgICBwcmVmZXJlbmNlcy5fc3RvcmFnZUJs
b2NraW5nUG9saWN5ID0gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QWxsb3dBbGw7Ci0gICAgcHJl
ZmVyZW5jZXMuX2phdmFTY3JpcHRSdW50aW1lRmxhZ3MgPSAwOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBk
ZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy5f
ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IFlFUzsKLSAgICBwcmVmZXJlbmNlcy5fbG9nc1BhZ2VN
ZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQgPSBZRVM7Ci0jZW5kaWYKLQotICAgIHByZWZl
cmVuY2VzLl9kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQgPSBZRVM7Ci0KLSAgICBpZiAoISFfZGVs
ZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3Rv
clZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KV0pIHsKLSAgICAgICAgaWYgKFtf
ZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpzZWxm
XSkgewotICAgICAgICAgICAgcHJlZmVyZW5jZXMuX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkID0gTk87Ci0gICAgICAgICAgICBwcmVmZXJlbmNlcy5fcGFnZVZpc2liaWxpdHlC
YXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQgPSBOTzsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIFtjb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29sOndyYXBwZXIoV2ViS2l0OjppbnNwZWN0
b3JQcm9jZXNzUG9vbChXZWJLaXQ6Omluc3BlY3RvckxldmVsRm9yUGFnZShfaW5zcGVjdGVkUGFn
ZSkpKV07Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3NldEdyb3VwSWRlbnRpZmllcjpXZWJLaXQ6Omlu
c3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKF9pbnNwZWN0ZWRQYWdlKV07Ci0KLSAg
ICByZXR1cm4gY29uZmlndXJhdGlvbi5hdXRvcmVsZWFzZSgpOwotfQotCi0rIChCT09MKXZpZXdJ
c0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZpZXcKLXsKLSAgICByZXR1cm4gW3ZpZXcgaXNL
aW5kT2ZDbGFzczpbV0tJbnNwZWN0b3JXS1dlYlZpZXcgY2xhc3NdXTsKLX0KLQotLy8gTUFSSzog
V0tVSURlbGVnYXRlIG1ldGhvZHMKLQotLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQ0dSZWN0
KSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDR1JlY3RaZXJvKTsKLSAgICBlbHNlCi0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKE5TUmVjdFRvQ0dSZWN0KFt3ZWJWaWV3IGZyYW1lXSkpOwotfQot
Ci0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOihD
R1JlY3QpZnJhbWUKLXsKLSAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW193ZWJWaWV3LmdldCgpLndpbmRvdyBzZXRGcmFtZTpOU1JlY3RGcm9t
Q0dSZWN0KGZyYW1lKSBkaXNwbGF5OllFU107Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczooV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzICopcGFyYW1ldGVycyBpbml0aWF0ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1l
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVVJMICo+ICpVUkxzKSljb21w
bGV0aW9uSGFuZGxlcgotewotICAgIE5TT3BlblBhbmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFu
ZWwgb3BlblBhbmVsXTsKLSAgICBvcGVuUGFuZWwuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBw
YXJhbWV0ZXJzLmFsbG93c011bHRpcGxlU2VsZWN0aW9uOwotCi0gICAgYXV0byByZXBvcnRTZWxl
Y3RlZEZpbGVzID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0g
TlNNb2RhbFJlc3BvbnNlT0spCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihvcGVuUGFu
ZWwuVVJMcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5p
bCk7Ci0gICAgfTsKLQotICAgIGlmIChfd2ViVmlldy5nZXQoKS53aW5kb3cpCi0gICAgICAgIFtv
cGVuUGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93Ol93ZWJWaWV3LmdldCgpLndpbmRvdyBj
b21wbGV0aW9uSGFuZGxlcjpyZXBvcnRTZWxlY3RlZEZpbGVzXTsKLSAgICBlbHNlCi0gICAgICAg
IHJlcG9ydFNlbGVjdGVkRmlsZXMoW29wZW5QYW5lbCBydW5Nb2RhbF0pOwotfQotCi0tICh2b2lk
KV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbjooV0tTZWN1cml0eU9yaWdpbiAqKXNlY3VyaXR5T3JpZ2luIGN1cnJlbnRRdW90
YToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6KHVu
c2lnbmVkIGxvbmcgbG9uZyljdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6
KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50VXNhZ2UgZXhwZWN0ZWRVc2FnZToodW5zaWduZWQg
bG9uZyBsb25nKWV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOih2b2lkICheKSh1bnNpZ25l
ZCBsb25nIGxvbmcgbmV3UXVvdGEpKWRlY2lzaW9uSGFuZGxlcgotewotICAgIGRlY2lzaW9uSGFu
ZGxlcihzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRV
c2FnZSAqIDEuMjUpKTsKLX0KLQotLSAoTlNNZW51ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgY29udGV4dE1lbnU6KE5TTWVudSAqKW1lbnUgZm9yRWxlbWVudDooX1dLQ29udGV4dE1l
bnVFbGVtZW50SW5mbyAqKWVsZW1lbnQKLXsKLSAgICBmb3IgKE5TSW50ZWdlciBpID0gbWVudS5u
dW1iZXJPZkl0ZW1zIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqaXRl
bSA9IFttZW51IGl0ZW1BdEluZGV4OmldOwotICAgICAgICBzd2l0Y2ggKGl0ZW0udGFnKSB7Ci0g
ICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAg
ICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAg
ICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAg
ICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAg
ICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoK
LSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoK
LSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6Ci0g
ICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAg
ICAgICAgICAgIFttZW51IHJlbW92ZUl0ZW1BdEluZGV4OmldOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWVudTsKLX0KLQotLy8gTUFSSzogV0tO
YXZpZ2F0aW9uRGVsZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKXdlYlZpZXdXZWJDb250ZW50UHJv
Y2Vzc0RpZFRlcm1pbmF0ZTooV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlmICghIV9kZWxl
Z2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDopXSkKLSAgICAgICAgW19kZWxlZ2F0ZSBp
bnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOnNlbGZdOwotfQotCi0tICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhh
bmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVy
Ci17Ci0gICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgot
ICAgIGlmICghbmF2aWdhdGlvbkFjdGlvbi50YXJnZXRGcmFtZS5pc01haW5GcmFtZSkgewotICAg
ICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBp
bnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWlu
T3JUZXN0SW5zcGVjdG9yUGFnZShuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QuVVJMKSkgewotICAg
ICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UuCi0g
ICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUNhbmNlbCk7Ci0gICAg
Ci0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAg
aWYgKF9pbnNwZWN0ZWRQYWdlKQotICAgICAgICBfaW5zcGVjdGVkUGFnZS0+bG9hZFJlcXVlc3Qo
bmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0KTsKLX0KLQotLy8gTUFSSzogV0tJbnNwZWN0b3JXS1dl
YlZpZXdEZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2Fk
OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoIV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPcHRpb25TZXQ8V2ViQ29yZTo6UmVsb2FkT3B0
aW9uPiByZWxvYWRPcHRpb25zOwotICAgIGlmIChXZWJLaXQ6OmxpbmtlZE9uT3JBZnRlcihXZWJL
aXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aEV4cGlyZWRPbmx5UmVsb2FkQmVoYXZpb3IpKQotICAg
ICAgICByZWxvYWRPcHRpb25zLmFkZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5
KTsKLQotICAgIF9pbnNwZWN0ZWRQYWdlLT5yZWxvYWQocmVsb2FkT3B0aW9ucyk7Ci19Ci0KLS0g
KHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dl
YlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgX2luc3BlY3RlZFBhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246
OkZyb21PcmlnaW4pOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0
b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2lu
ZG93Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjp3aWxsTW92ZVRvV2luZG93Oild
KQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyOnNlbGYgd2lsbE1v
dmVUb1dpbmRvdzpuZXdXaW5kb3ddOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0Rp
ZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYg
KCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihp
bnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzopXSkKLSAgICAgICAgW19kZWxl
Z2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzpzZWxmXTsKLX0KLQot
QGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYzU3ZTc3Y2ZlN2YuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW1wb3J0IDxXZWJLaXQvV0tX
ZWJWaWV3Lmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvcldL
V2ViVmlld0RlbGVnYXRlOwotCi1AaW50ZXJmYWNlIFdLSW5zcGVjdG9yV0tXZWJWaWV3IDogV0tX
ZWJWaWV3Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFdLSW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGU+IGluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOwotQGVuZAotCi1AcHJvdG9j
b2wgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZQotQHJlcXVpcmVkCi0tICh2b2lkKWluc3Bl
Y3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OwotLSAo
dm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2Vi
VmlldyAqKXdlYlZpZXc7Ci0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JX
S1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93
OwotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9y
V0tXZWJWaWV3ICopd2ViVmlldzsKLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmZWY0YTAxYmEuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCi0KLSNpZiBQTEFURk9S
TShNQUMpCi0KLSNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgotI2ltcG9ydCA8d3Rm
L1dlYWtPYmpDUHRyLmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvcldLV2ViVmlldyB7
Ci0gICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+PiBfaW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci19Ci0KLS0gKE5TUmVjdClfb3BhcXVlUmVjdEZvcldp
bmRvd01vdmVXaGVuSW5UaXRsZWJhcgotewotICAgIC8vIFRoaXMgY29udmluY2VzIEFwcEtpdCB0
byBhbGxvdyB3aW5kb3cgbW92ZXMgd2hlbiBjbGlja2luZyBhbnl3aGVyZSBpbiB0aGUgdGl0bGVi
YXIgKHRvcCAyMnB0KQotICAgIC8vIHdoZW4gdGhpcyB2aWV3J3MgY29udGVudHMgY292ZXIgdGhl
IGVudGlyZSB3aW5kb3cncyBjb250ZW50cywgaW5jbHVkaW5nIHRoZSB0aXRsZWJhci4KLSAgICBy
ZXR1cm4gTlNaZXJvUmVjdDsKLX0KLQotLSAoTlNJbnRlZ2VyKXRhZwotewotICAgIHJldHVybiBX
S0luc3BlY3RvclZpZXdUYWc7Ci19Ci0KLS0gKGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVn
YXRlPilpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZQotewotICAgIHJldHVybiBfaW5zcGVjdG9y
V0tXZWJWaWV3RGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRl
PilkZWxlZ2F0ZQotewotICAgIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSA9IGRlbGVnYXRl
OwotfQotCi0tIChJQkFjdGlvbilyZWxvYWQ6KGlkKXNlbmRlcgotewotICAgIFtzZWxmLmluc3Bl
Y3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZDpzZWxmXTsKLX0K
LQotLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdpbjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYu
aW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9y
aWdpbjpzZWxmXTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
KiluZXdXaW5kb3cKLXsKLSAgICBbc3VwZXIgdmlld1dpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93
XTsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZp
ZXc6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107Ci19Ci0KLS0gKHZvaWQpdmlld0Rp
ZE1vdmVUb1dpbmRvdwotewotICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKLSAgICBb
c2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3Zl
VG9XaW5kb3c6c2VsZl07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJiZTcyOGQ0MzVjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw4MDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1w
b3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZp
ZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9y
dCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIl9X
S0luc3BlY3RvckludGVybmFsLmgiCi0jaW1wb3J0ICJfV0tJbnNwZWN0b3JXaW5kb3cuaCIKLSNp
bXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8
U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
Q2VydGlmaWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9y
dCA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLXN0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0
eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9z
YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFz
a1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVDb250ZW50VmlldzsKLQotLy8g
VGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQg
aXRzIHByb2Nlc3MuCi0vLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRp
bWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0aGUgSW5zcGVjdG9yLgotc3Rh
dGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7IDFfbWluIH07Ci0KLXN0YXRp
YyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCA9ICZrV2luZG93Q29u
dGVudExheW91dE9ic2VydmVyQ29udGV4dDsKLQotQGludGVyZmFjZSBXS1dlYkluc3BlY3RvclBy
b3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZT4KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJv
eHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OwotLSAodm9pZClp
bnZhbGlkYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1dlYkluc3BlY3RvclByb3h5
T2JqQ0FkYXB0ZXIgewotICAgIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQ
cm94eTsKLX0KLQotLSAoV0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9yUmVmCi17Ci0gICAgcmV0dXJu
IHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Ci19Ci0KLS0gKF9XS0luc3BlY3RvciAqKWluc3BlY3Rv
cgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyKCpf
aW5zcGVjdG9yUHJveHkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNw
ZWN0b3JQcm94eQotewotICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yUHJveHksIGluc3BlY3RvclBy
b3h5KTsKLQotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgLy8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJlZmVyZW5jZSBjeWNsZS4KLSAg
ICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAgICBfaW5zcGVjdG9yUHJveHkgPSBudWxscHRy
OwotfQotCi0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25T
aGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3Rv
clByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3Qo
KS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRN
b3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9y
UHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsK
LX0KLQotLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5
LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd1dpbGxDbG9zZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5
KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93
RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAg
IGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVs
bFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVu
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgp
OwotfQotCi0tICh2b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KLXsKLSAgICAvLyBSZXNpemluZyB0aGUgdmlld3Mgd2hpbGUgaW5z
aWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIHdoZW4gZW50ZXJp
bmcKLSAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQg
dG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBvbmx5Ci0gICAgLy8gZGVwZW5k
IG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxs
IGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0Ci0gICAgLy8gb2YgdGhlIHRpbWUgdGhlIHZpZXdz
IHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNp
emluZyBtYXNrcy4KLQotICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQot
ICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uo
KTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmlu
ZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tl
eVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKLXsK
LSAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCkg
ewotICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0
Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0OwotICAgIEFTU0VSVChbd2lu
ZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNzXV0pOwotICAgIGlmICh3aW5kb3cuaW5M
aXZlUmVzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRD
SF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9p
bnNwZWN0b3JQcm94eSkKLSAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmll
d0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfSk7Ci19Ci0KLS8vIE1BUks6IFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3Bl
Y3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAg
X2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0KLS0gKEJPT0wpaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9pbnNwZWN0b3JQ
cm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6IGZhbHNlOwotfQotCi0tICh2
b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICop
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdX
aW5kb3cKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJv
eHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
d2ViVmlldy53aW5kb3cpOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlk
TW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9y
UHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
d2ViVmlldy53aW5kb3cpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRW
aWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KQotewotICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpD
QWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVj
dDpvbGRWaWV3XTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3Rl
ZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRp
b24gb2JqZWN0Om5ld1ZpZXddOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkKLSAgICAgICAgYXR0
YWNoKG1fYXR0YWNobWVudFNpZGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRh
Y2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpCi17Ci0gICAgaWYg
KG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgewotICAgICAgICBtX2lzT2JzZXJ2aW5n
Q29udGVudExheW91dFJlY3QgPSBmYWxzZTsKLSAgICAgICAgW29sZFdpbmRvdyByZW1vdmVPYnNl
cnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIg
Y29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07Ci0gICAgfQotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2lu
ZG93ICpuZXdXaW5kb3cpCi17Ci0gICAgaWYgKG1faXNBdHRhY2hlZCAmJiAhIW5ld1dpbmRvdykg
ewotICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSB0cnVlOwotICAgICAg
ICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpA
ImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDprV2luZG93Q29udGVudExheW91
dE9ic2VydmVyQ29udGV4dF07Ci0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgp
OwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2lu
ZG93VGl0bGUoKSBjb25zdAotewotICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVjdGlvbkxldmVsKCk7Ci0gICAg
aWYgKGxldmVsID4gMSkgewotICAgICAgICBOU1N0cmluZyAqZGVidWdUaXRsZSA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3IgWyVkXSDigJQg
JUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBpbnNwZWN0aW5nIFdlYiBJbnNw
ZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5z
cGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0bGVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJ
TkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiks
IChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNl
dFRpdGxlOnRpdGxlXTsKLSAgICB9Ci19Ci0KLVJldGFpblB0cjxOU1dpbmRvdz4gV2ViSW5zcGVj
dG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJ
bnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQotewotICAgIE5TUmVjdCB3aW5kb3dGcmFt
ZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2ZWRXaW5kb3dGcmFtZSA6
IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0
KTsKLSAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0b3JXaW5kb3cgYWxsb2Nd
IGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNrOndpbmRvd1N0eWxlTWFz
ayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKLSAgICBbd2luZG93
IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgsIG1pbmltdW1XaW5kb3dI
ZWlnaHQpXTsKLSAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0gICAgW3dp
bmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8
IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1hcnkpXTsKLQotICAgIGJv
b2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6
UmVtb3RlOwotICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZvclJlbW90ZVRhcmdldF07
Ci0KLSAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSA9IChbd2luZG93IHNj
cmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKLSAgICBDR0Zsb2F0IG1pbmltdW1GdWxs
U2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJveGltYXRlbHlIYWxmU2Ny
ZWVuU2l6ZSk7Ci0gICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29udGVudFNpemU6TlNNYWtl
U2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07Ci0gICAg
W3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9y
XSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFsbG93c1RpbGluZyldOwot
Ci0gICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVudDpZRVNdOwotCi0gICAg
Ly8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdhcyBlbXB0eS4KLSAgICBp
ZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKLSAgICAgICAgW3dpbmRvdyBjZW50
ZXJdOwotCi0gICAgcmV0dXJuIHdpbmRvdzsKLX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNw
ZWN0ZWRQYWdlKCkpOwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1fY2xv
c2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGlmIChtX2luc3Bl
Y3RvclZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIEFTU0VSVChtX29iakNBZGFwdGVyKTsKLSAg
ICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLV2ViSW5zcGVj
dG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTp0aGlz
XSk7Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0
b3JBdHRhY2htZW50VmlldygpOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Io
aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5v
dGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107Ci0KLSAgICBtX2luc3BlY3RvclZpZXdD
b250cm9sbGVyID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGlu
aXRXaXRoSW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsKLSAgICBbbV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQot
ICAgIFdlYlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9s
bGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKLSAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0K
LSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3Rv
cldpbmRvdyk7Ci0KLSAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3Bl
Y3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFt
ZSgpOwotICAgIE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZl
ZFdpbmRvd0ZyYW1lU3RyaW5nKTsKLQotICAgIG1faW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVj
dG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rp
b25UYXJnZXRUeXBlOjpMb2NhbCk7Ci0gICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRl
Om1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0g
W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0gICAgTlNWaWV3ICpjb250ZW50
VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107Ci0gICAgaW5zcGVjdG9yVmll
dy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNdOwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2
aWV3Omluc3BlY3RvclZpZXddOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2UoKQotewotICAg
IEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAo
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgewotICAgICAgICBbbV9pbnNwZWN0b3JWaWV3Q29u
dHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBtX2luc3BlY3RvclZpZXdD
b250cm9sbGVyID0gbmlsOwotICAgIH0KLQotICAgIGlmIChtX29iakNBZGFwdGVyKSB7Ci0gICAg
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICAgICAgW21fb2JqQ0FkYXB0ZXIgaW52YWxpZGF0
ZV07Ci0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Ci0gICAgfQotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpCi17
Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVj
dG9yV2luZG93KSB7Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxd
OwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwotICAgICAgICBtX2luc3BlY3Rv
cldpbmRvdyA9IG5pbDsKLSAgICB9Ci0KLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Nsb3NlVGltZW91dCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbV9jbG9z
ZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0gICAgY2xvc2VGcm9udGVu
ZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0K
LSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUhpZGUoKQotewotICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAgcGxhdGZv
cm1EZXRhY2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3Rv
cldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsK
LSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAgICAgbV9pbnNwZWN0b3JX
aW5kb3cgPSBuaWw7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVJlc2V0U3RhdGUoKQotewotICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVy
ZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gSWYgdGhlIFdlYiBJ
bnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdpbmRvdyBhcyB0aGUgaW5zcGVjdGVk
IHZpZXcsCi0gICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlb3BlbiB0aGUgSW5zcGVjdG9yIHRvIGdl
dCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93LgotICAgIC8vIFRoaXMgY2FuIGhhcHBl
biB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3aW5kb3cgaW4gU2FmYXJpLgotICAgIGlm
IChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2lu
ZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSkgewotICAgICAgICBvcGVu
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2Js
ZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEgYmFja2dyb3VuZCB0YWIgaW4gU2Fm
YXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93LgotICAgIFtbbV9pbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLSAg
ICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1ha2VGaXJzdFJl
c3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XV07Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17
Ci0gICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSBtYWtlS2V5QW5kT3JkZXJG
cm9udDpuaWxdOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQo
KQotewotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBu
b3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSwgb25seSBhIGJh
Y2tncm91bmQgd2luZG93LgotICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBbbV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cuaXNNYWluV2luZG93OwotfQotCi1ib29sIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRh
Y2gpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNw
ZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIGlmIChbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZpZXddKQotICAgICAgICByZXR1cm4g
d2ViUHJvY2Vzc0NhbkF0dGFjaDsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0
YWNoZWRIZWlnaHQgPSAyNTA7Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hl
ZEhlaWdodFJhdGlvID0gMC43NTsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFj
aGVkV2lkdGggPSA1MDA7Ci0KLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVj
dGVkVmlldy5mcmFtZTsKLQotICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodCA9IE5TSGVp
Z2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAg
ICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAm
JiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hh
bmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICAvLyBEbyBub3RoaW5nLgotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCi17Ci0gICAgbV91cmxTdHJpbmcgPSB1cmxTdHJpbmc7Ci0KLSAgICB1cGRh
dGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbykKLXsKLSAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAg
UmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMo
W1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIE5TV2luZG93ICp3aW5k
b3c7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQotICAgICAgICB3aW5kb3cgPSBtX2luc3Bl
Y3RvcldpbmRvdy5nZXQoKTsKLSAgICBlbHNlCi0gICAgICAgIHdpbmRvdyA9IFtbbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5kb3ddOwotCi0gICAgaWYgKCF3aW5kb3cpCi0g
ICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5kb3ddOwotCi0jaWYgSEFWRShTRUNfVFJVU1Rf
U0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93
OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZv
Om51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0j
ZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1v
ZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciBj
ZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigp
IHNob3dHcm91cDpZRVNdOwotI2VuZGlmCi0KLSAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFm
dGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRp
ZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCi0gICAgU0ZDZXJ0aWZpY2F0ZVZp
ZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107
Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKLSAgICBbY2VydGlm
aWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0
RGlzcGxheURldGFpbHM6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNj
bG9zZWQ6WUVTXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgQVNTRVJUKCFzdWdnZXN0
ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dl
c3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOwotICAgIGlmICghcGxh
dGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpz
dWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVu
YW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAgZm9yY2VTYXZlRGlhbG9n
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKLSAgICBpZiAo
IXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWNlc3NhcnkgZm9yIHRo
ZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVS
TDsKLSAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OwotCi0gICAgYXV0byBzYXZlVG9V
UkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7Ci0K
LSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwg
YWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRD
b3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCld
KTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNh
bGx5OllFU107Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRl
VG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nIGVycm9yOk5VTExdOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVT
dHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0gICAgfTsKLQotICAgIGlm
ICghZm9yY2VTYXZlRGlhbG9nKSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZl
UGFuZWwgc2F2ZVBhbmVsXTsKLSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRm
b3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJM
IHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKLSAgICAvLyBjYW4g
cHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0
ZW0ncwotICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0
byBzaG93IGluIHRoZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKLSAg
ICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0
UGF0aENvbXBvbmVudF07Ci0KLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVn
ZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2Vs
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxS
ZXNwb25zZU9LKTsKLSAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0gICAgfTsKLQotICAg
IE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVjdG9yV2luZG93
LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3Bh
bmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29t
cGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3Bh
bmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBw
ZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17
Ci0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBSZXRhaW5Q
dHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dl
c3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVh
ZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlmICghYWN0dWFsVVJM
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVI
YW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVM
TF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5kbGUgd3JpdGVEYXRh
Oltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAg
W2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRl
U3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lz
QXR0YWNoZWQpOwotICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7Ci0gICAgQVNTRVJUKG1faW5zcGVj
dG9yV2luZG93KTsKLQotICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFt
X2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNTdHJpbmcgKmZyYW1l
U3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9pbnNwZWN0b3JXaW5kb3cgZnJhbWVdKTsKLSAg
ICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9y
V2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3
aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7
Ci0gICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cp
OwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9y
V2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2Vk
KHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGlt
ZW5zaW9uKQotewotICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhdHRhY2ggYXZh
aWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIGluIGNhc2UKLSAgICAg
ICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBub3QgdGhlIFdLVmlldy4KLSAgICAgICAgYXR0
YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2Uo
KS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZp
ZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIE5TUmVjdCBp
bnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOwotICAgIE5TUmVjdCBvbGRJ
bnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1lOwotICAgIE5TUmVjdCBuZXdJ
bnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0OwotICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMg
PSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHM7Ci0gICAgQ0dGbG9hdCBpbnNwZWN0ZWRW
aWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdGcmFtZSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0
YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKLSAgICAg
ICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9
IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJl
bnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3Bl
Y3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0
YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVuc2lvbiwgcGFyZW50SGVpZ2h0KTsKLQotICAg
ICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBz
byBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJh
bWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3RvckhlaWdodCwgTlNXaWR0aChwYXJlbnRCb3VuZHMp
LCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsKLSAgICAgICAgbmV3SW5zcGVj
dG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFt
ZSksIGluc3BlY3RvckhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
QXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Ci0gICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikK
LSAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdG
cmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91
bmRzKTsKLSAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5z
aW9uLCBwYXJlbnRXaWR0aCk7Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlv
biBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4g
QnV0IGRvbid0IHVzZSB0aGF0Ci0gICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3Bl
Y3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBp
bnNwZWN0ZWQgdmlldy4KLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgw
LCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAg
ICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdChwYXJlbnRXaWR0aCAtIGlu
c3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7
Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3
LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3Bl
Y3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5
b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1l
ID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91
dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXR0
YWNobWVudFNpZGU6OkxlZnQ6IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAg
ICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1l
KTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMp
OwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24s
IHBhcmVudFdpZHRoKTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9m
IHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQg
ZG9uJ3QgdXNlIHRoYXQKLSAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9y
IHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3Bl
Y3RlZCB2aWV3LgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KGluc3Bl
Y3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3
VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBp
bnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5T
V2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgewotICAgICAg
ICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3
IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpu
aWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25S
ZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoTlNFcXVhbFJlY3RzKG9s
ZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVjdG9yVmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVj
dHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3RnJhbWUpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUg
bGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgotICAgIFtpbnNwZWN0b3JWaWV3
LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOwotCi0gICAgW2luc3BlY3Rv
clZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsKLSAgICBbaW5zcGVjdGVkVmll
dyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVdOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIE5TVmlldyAq
aW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXco
KTsKLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXpl
LmhlaWdodCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3Bl
Y3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0
ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgTlNSZWN0IGluc3BlY3Rl
ZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0aCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3Rl
ZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAg
V0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld107Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgW21faW5zcGVj
dG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBj
bG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAgIH0KLQotICAgIFtp
bnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgQ0dGbG9hdCBjdXJyZW50
RGltZW5zaW9uOwotICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgIGNhc2UgQXR0
YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6
aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZTWFyZ2luXTsKLSAgICAgICAg
Y3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OlJpZ2h0OgotICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmll
d0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVu
c2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAg
ICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxl
IHwgTlNWaWV3TWF4WE1hcmdpbl07Ci0gICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0
b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShjdXJyZW50RGlt
ZW5zaW9uKTsKLQotICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBhZGRTdWJ2aWV3Omluc3Bl
Y3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86aW5zcGVjdGVkVmll
d107Ci0gICAgW2luc3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0
b3JWaWV3XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQot
ewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9y
QXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92
ZUZyb21TdXBlcnZpZXddOwotCi0gICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLQotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3BlY3RlZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0
YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRoYXQgdGhlCi0gICAgLy8gYXR0
YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhl
IGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCi0KLSAgICBp
bnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZp
ZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShpbnNwZWN0ZWRWaWV3LmZyYW1lKSk7Ci0KLSAg
ICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBp
bnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQg
bm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNW
aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQot
ewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0
ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9z
aGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpCi17Ci0gICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmll
d10tPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0g
ICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5n
ICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJNYWluIiBvZlR5cGU6QCJodG1sIl07
Ci0gICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOwotICAgIGlmICghcGF0aCkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Ci19Ci0KLVN0cmluZyBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIE5TQnVuZGxlICpidW5k
bGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVj
dG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0Lmh0bWwgaW4gUHJvZHVjdGlvbiBidWlsZHMu
Ci0gICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIlRlc3QiIG9m
VHlwZTpAImh0bWwiXTsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9d
LmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
ckJhc2VVUkwoKQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0
aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRs
ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTlNTdHJpbmcgKnBhdGggPSBidW5k
bGUucmVzb3VyY2VQYXRoOwotICAgIEFTU0VSVChwYXRoICYmIHBhdGgubGVuZ3RoKTsKLQotICAg
IHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6WUVTXS5hYnNv
bHV0ZVN0cmluZzsKLX0KLQotc3RhdGljIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvblBsaXN0
KCkKLXsKLSAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9y
RGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1h
c2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKLSAgICBOU1N0cmluZyAqc3lzdGVtVmVyc2lvblBs
aXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJdOwotICAgIE5TRGljdGlvbmFy
eSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVu
dHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07Ci0gICAgcmV0dXJuIHN5c3RlbVZlcnNp
b25JbmZvOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9G
b3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIE5TRGljdGlvbmFyeSAqcGxpc3QgPSBzeXN0ZW1W
ZXJzaW9uUGxpc3QoKTsKLQotICAgIERlYnVnZ2FibGVJbmZvRGF0YSByZXN1bHQ7Ci0gICAgcmVz
dWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsK
LSAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1hY09TIl9zOwotICAgIHJlc3VsdC50
YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RCdWlsZFZlcnNpb24iXTsKLSAgICBy
ZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RVc2VyVmlzaWJsZVZl
cnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0b3IgPSBmYWxzZTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZmJlZTVjZGZmMzguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJl
bW90ZUluc3BlY3RvckNsaWVudC5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0K
LSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUluc3Bl
Y3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUluc3Bl
Y3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCBDb25uZWN0
aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dh
YmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKLSAgICAgICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpjcmVhdGUoKSkKLSAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0
b3JDbGllbnQpCi0gICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQotICAgICAg
ICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCi0gICAgICAgICwgbV9kZWJ1Z2dhYmxlVHlwZShkZWJ1
Z2dhYmxlVHlwZSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKLSAg
ICB9Ci0KLSAgICB+UmVtb3RlSW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94
eS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBsb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczov
L3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRh
IGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZv
PiBkZWJ1Z2dhYmxlSW5mbyA9IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxl
SW5mb0RhdGE6OmVtcHR5KCkpOwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJs
ZVR5cGUobV9kZWJ1Z2dhYmxlVHlwZSk7Ci0gICAgICAgIG1fcHJveHktPmxvYWQoV1RGTW92ZShk
ZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21tYW5kc1VSTCgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2hvdygp
OwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50
LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdl
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlv
bklELCBtX3RhcmdldElEKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmPFJlbW90ZVdlYklu
c3BlY3RvclByb3h5PiBtX3Byb3h5OwotICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNw
ZWN0b3JDbGllbnQ7Ci0gICAgQ29ubmVjdGlvbklEIG1fY29ubmVjdGlvbklEOwotICAgIFRhcmdl
dElEIG1fdGFyZ2V0SUQ7Ci0gICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBtX2RlYnVnZ2Fi
bGVUeXBlOwotfTsKLQotUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGll
bnQoVVJMIHVybCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQotICAgIDogbV9v
YnNlcnZlcihvYnNlcnZlcikKLXsKLSAgICBpZiAoIXVybC5ob3N0KCkgfHwgIXVybC5wb3J0KCkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIGluc3BlY3RvciB1cmw6ICVzIiwgdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b25uZWN0aW9uSUQgPSBjb25uZWN0SW5ldCh1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5w
b3J0KCkudmFsdWUoKSk7Ci0gICAgaWYgKCFtX2Nvbm5lY3Rpb25JRCkgewotICAgICAgICBMT0df
RVJST1IoIkluc3BlY3RvciBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gJXMiLCB1cmwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGFy
dEluaXRpYWxDb21tdW5pY2F0aW9uKCk7Ci19Ci0KLVJlbW90ZUluc3BlY3RvckNsaWVudDo6flJl
bW90ZUluc3BlY3RvckNsaWVudCgpCi17Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25JRC5oYXNWYWx1ZSgp
KTsKLSAgICBhdXRvIG1lc3NhZ2UgPSBldmVudC51dGY4KCk7Ci0gICAgc2VuZChtX2Nvbm5lY3Rp
b25JRC52YWx1ZSgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRh
dGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOwotfQotCi1IYXNoTWFwPFN0cmluZywgSW5zcGVjdG9y
OjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6ZGlzcGF0Y2hNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3Ry
aW5nLCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7ICJCYWNrZW5kQ29tbWFuZHMiX3MsIHN0YXRp
Y19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29t
bWFuZHMpIH0sCi0gICAgICAgIHsgIlNldFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxI
YW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KSB9LAotICAgICAg
ICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigm
UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCi0gICAgfSk7
Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hNYXA7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCkKLXsKLSAgICBhdXRvIGV2ZW50ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBldmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNl
dHVwSW5zcGVjdG9yQ2xpZW50Il9zKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQt
PnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5l
Y3Rpb25DbG9zZWQoKQotewotICAgIG1fdGFyZ2V0cy5jbGVhcigpOwotICAgIG1faW5zcGVjdG9y
UHJveHlNYXAuY2xlYXIoKTsKLSAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMp
OwotICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQotCi12b2lkIFJl
bW90ZUluc3BlY3RvckNsaWVudDo6ZGlkQ2xvc2UoQ29ubmVjdGlvbklEKQotewotICAgIGNhbGxP
bk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAgY29ubmVjdGlvbkNsb3NlZCgpOwotICAgIH0p
OwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQg
Y29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlw
ZSBkZWJ1Z2dhYmxlVHlwZSkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJv
eHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhp
cywgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGVdIHsKLSAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQs
IHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZSk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoIWFkZFJlc3Vs
dC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3co
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2V0dXBFdmVudCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywg
IlNldHVwIl9zKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3Ms
IGNvbm5lY3Rpb25JRCk7Ci0gICAgc2V0dXBFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3Ms
IHRhcmdldElEKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoc2V0dXBFdmVudC0+dG9KU09O
U3RyaW5nKCkpOwotCi0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOwotfQot
Ci12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVj
dGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBhdXRvIGJhY2tlbmRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQiX3MpOwotICAgIGJhY2tlbmRFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9z
LCBjb25uZWN0aW9uSUQpOwotICAgIGJhY2tlbmRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQi
X3MsIHRhcmdldElEKTsKLSAgICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygibWVzc2FnZSJfcywg
bWVzc2FnZSk7Ci0gICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGJhY2tlbmRFdmVudC0+dG9KU09O
U3RyaW5nKCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJv
bnRlbmQoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCi17Ci0g
ICAgYXV0byBjbG9zZWRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgY2xvc2Vk
RXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJGcm9udGVuZERpZENsb3NlIl9zKTsKLSAgICBj
bG9zZWRFdmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOwot
ICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAg
IHNlbmRXZWJJbnNwZWN0b3JFdmVudChjbG9zZWRFdmVudC0+dG9KU09OU3RyaW5nKCkpOwotCi0g
ICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklE
LCB0YXJnZXRJRCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2Vu
ZENvbW1hbmRzKGNvbnN0IEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50Lm1lc3NhZ2Ug
fHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Jh
Y2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2
NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2FnZS0+dXRmOCgpKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKLXsK
LSAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYg
KCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSwgbWVzc2FnZVZh
bHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdl
QXJyYXk7Ci0gICAgaWYgKCFtZXNzYWdlVmFsdWUtPmFzQXJyYXkobWVzc2FnZUFycmF5KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFRhcmdldD4gdGFyZ2V0TGlzdDsKLSAgICBmb3Ig
KGF1dG8mIGl0ZW1WYWx1ZSA6ICptZXNzYWdlQXJyYXkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gaXRlbU9iamVjdDsKLSAgICAgICAgaWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0
ZW1PYmplY3QpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVGFyZ2V0IHRhcmdl
dDsKLSAgICAgICAgaWYgKCFpdGVtT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFy
Z2V0LmlkKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygibmFtZSJfcywg
dGFyZ2V0Lm5hbWUpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwi
X3MsIHRhcmdldC51cmwpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0
eXBlIl9zLCB0YXJnZXQudHlwZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB0
YXJnZXRMaXN0LmFwcGVuZChXVEZNb3ZlKHRhcmdldCkpOwotICAgIH0KLQotICAgIGF1dG8gY29u
bmVjdGlvbklEID0gZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCk7Ci0KLSAgICAvLyBGaW5kIGNs
b3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3RvcjxUYXJnZXRJRCwgND4gdGFy
Z2V0c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAu
a2V5cygpKSB7Ci0gICAgICAgIGlmIChwYWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAg
Zm9yIChhdXRvJiB0YXJnZXQgOiB0YXJnZXRMaXN0KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0
LmlkID09IHBhaXIuc2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5hcHBlbmQocGFpci5zZWNv
bmQpOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQot
ICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0
aW9uSUQsIHRhcmdldElEKSk7Ci0KLSAgICBtX3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RG
TW92ZSh0YXJnZXRMaXN0KSk7Ci0gICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhp
cyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8
ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBwcm94eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGV2
ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBldmVudC50YXJnZXRJRC52YWx1ZSgpKSk7Ci0gICAg
aWYgKCFwcm94eSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZXZlbnQubWVz
c2FnZS52YWx1ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWY1MWQ2M2RlYTAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRy
b2xsYWJsZVRhcmdldC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2Fi
bGVUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Owot
Y2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2Vy
dmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGll
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVj
dG9yQ2xpZW50JikgPSAwOwotfTsKLQotdXNpbmcgQ29ubmVjdGlvbklEID0gSW5zcGVjdG9yOjpD
b25uZWN0aW9uSUQ7Ci11c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rvcjo6VGFyZ2V0SUQ7Ci0KLWNs
YXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
KCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCwgUmVtb3RlSW5zcGVj
dG9yT2JzZXJ2ZXImKTsKLSAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7Ci0KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHVwZGF0ZSB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHRvIHVzZSBEZWJ1
Z2dhYmxlVHlwZSBpbnN0ZWFkIG9mIFN0cmluZyBmb3IgdGhlIHRhcmdldCB0eXBlLgotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNDcKLSAgICBzdHJ1
Y3QgVGFyZ2V0IHsKLSAgICAgICAgVGFyZ2V0SUQgaWQ7Ci0gICAgICAgIFN0cmluZyB0eXBlOwot
ICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgU3RyaW5nIHVybDsKLSAgICB9OwotCi0gICAg
Y29uc3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNv
bnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1h
bmRzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KLQotICAgIHZv
aWQgaW5zcGVjdChDb25uZWN0aW9uSUQsIFRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0
SUQsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlv
bklELCBUYXJnZXRJRCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPFJlbW90ZUluc3BlY3RvckNsaWVudD47Ci0KLSAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11
bmljYXRpb24oKTsKLSAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKLQotICAgIHZvaWQgc2V0
VGFyZ2V0TGlzdChjb25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQm
KTsKLQotICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBmaW5hbDsKLSAgICBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIGZpbmFsOwotCi0gICAgdm9pZCBz
ZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgbV9iYWNr
ZW5kQ29tbWFuZHNVUkw7Ci0gICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7
Ci0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKLSAgICBIYXNoTWFw
PENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPHN0
ZDo6cGFpcjxDb25uZWN0aW9uSUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUlu
c3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmM0
NTVkM2U2Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0
L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkFQ
SU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudFdvcmxkLmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKLSNpbmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8
d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jbGFzcyBTY3JpcHRN
ZXNzYWdlQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpDbGll
bnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFNjcmlwdE1l
c3NhZ2VDbGllbnQoUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXIpCi0gICAgICAgIDogbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyKSB7IH0KLQotICAgIH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9
Ci0KLSAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZv
RGF0YSYmLCBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGF1dG8gdG9rZW5zID0gc2VyaWFsaXplZFNj
cmlwdFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoIjoiKTsKLSAgICAgICAgaWYgKHRva2Vucy5zaXpl
KCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBVUkwgcmVxdWVzdFVSTCB7
IHsgfSwgcGFnZS5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKLSAgICAgICAgbV9pbnNwZWN0b3JQ
cm90b2NvbEhhbmRsZXIuaW5zcGVjdChyZXF1ZXN0VVJMLmhvc3RBbmRQb3J0KCksIHRva2Vuc1sw
XS50b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzFdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMl0pOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1f
aW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOwotfTsKLQotY2xhc3MgTG9hZGVyQ2xpZW50IGZpbmFs
IDogcHVibGljIEFQSTo6TG9hZGVyQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBMb2FkZXJDbGllbnQoRnVuY3Rpb248dm9pZCgpPiYmIGxvYWRlZENh
bGxiYWNrKQotICAgICAgICA6IG1fbG9hZGVkQ2FsbGJhY2sgeyBXVEZNb3ZlKGxvYWRlZENhbGxi
YWNrKSB9IHsgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6
Ok9iamVjdCopIGZpbmFsCi0gICAgewotICAgICAgICBtX2xvYWRlZENhbGxiYWNrKCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9sb2FkZWRDYWxsYmFjazsKLX07
Ci0KLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlPiBwYXJzZURlYnVn
Z2FibGVUeXBlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGRlYnVnZ2FibGVUeXBlU3RyaW5nKQot
ewotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAiamF2YXNjcmlwdCJfcykKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OkphdmFTY3JpcHQ7Ci0gICAgaWYg
KGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJwYWdlIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpEZWJ1Z2dhYmxlVHlwZTo6UGFnZTsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcg
PT0gInNlcnZpY2Utd29ya2VyIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dh
YmxlVHlwZTo6U2VydmljZVdvcmtlcjsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0g
IndlYi1wYWdlIl9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6
V2ViUGFnZTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyOjppbnNwZWN0KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQs
IENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBjb25zdCBTdHJp
bmcmIHR5cGUpCi17Ci0gICAgYXV0byBkZWJ1Z2dhYmxlVHlwZSA9IHBhcnNlRGVidWdnYWJsZVR5
cGVGcm9tU3RyaW5nKHR5cGUpOwotICAgIGlmICghZGVidWdnYWJsZVR5cGUpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJVbmtub3duIGRlYnVnZ2FibGUgdHlwZTogXCIlc1wiIiwgdHlwZS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvckNs
aWVudCkKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmluc3BlY3QoY29ubmVjdGlvbklELCB0
YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUudmFsdWUoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyOjpydW5TY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCi17Ci0g
ICAgbV9wYWdlLnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh7IHNjcmlwdCwgZmFsc2UsIFdURjo6
bnVsbG9wdCwgZmFsc2UgfSwgCi0gICAgICAgIFtdKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KiwgT3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscz4gZXhjZXB0aW9uRGV0YWlscywg
Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMp
Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gcnVubmluZyBzY3JpcHQgXCIl
c1wiIiwgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFu
Z2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYgY2xpZW50KQotewotICAgIFN0cmluZ0J1aWxkZXIg
aHRtbDsKLSAgICBpZiAoY2xpZW50LnRhcmdldHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGh0bWwu
YXBwZW5kKCI8cD5ObyB0YXJnZXRzIGZvdW5kPC9wPiJfcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGh0bWwuYXBwZW5kKCI8dGFibGU+Iik7Ci0gICAgICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklE
IDogY2xpZW50LnRhcmdldHMoKS5rZXlzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGFy
Z2V0IDogY2xpZW50LnRhcmdldHMoKS5nZXQoY29ubmVjdGlvbklEKSkgewotICAgICAgICAgICAg
ICAgIGh0bWwuYXBwZW5kKG1ha2VTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICI8dGJvZHk+
PHRyPiIKLSAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNz
PVwidGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdl
dHVybFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48L3RkPiIKLSAgICAgICAgICAgICAgICAgICAg
Ijx0ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3Bl
Y3RcIiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBv
c3RNZXNzYWdlKFxcJyIsIGNvbm5lY3Rpb25JRCwgIjoiLCB0YXJnZXQuaWQsICI6IiwgdGFyZ2V0
LnR5cGUsICJcXCcpO1wiPjwvdGQ+IgotICAgICAgICAgICAgICAgICAgICAiPC90cj48L3Rib2R5
PiIKLSAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBodG1sLmFwcGVuZCgiPC90YWJsZT4iKTsKLSAgICB9Ci0gICAgbV90YXJnZXRMaXN0c0h0bWwg
PSBodG1sLnRvU3RyaW5nKCk7Ci0gICAgaWYgKG1fcGFnZUxvYWRlZCkKLSAgICAgICAgdXBkYXRl
VGFyZ2V0TGlzdCgpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6
dXBkYXRlVGFyZ2V0TGlzdCgpCi17Ci0gICAgaWYgKCFtX3RhcmdldExpc3RzSHRtbC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgcnVuU2NyaXB0KG1ha2VTdHJpbmcoInVwZGF0ZVRhcmdldHMoYCIsIG1f
dGFyZ2V0TGlzdHNIdG1sLCAiYCk7IikpOwotICAgICAgICBtX3RhcmdldExpc3RzSHRtbCA9IHsg
fTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpwbGF0
Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmIHBhZ2VQcm94eSwgV2ViVVJMU2NoZW1lVGFzayYg
dGFzaykKLXsKLSAgICBhdXRvJiByZXF1ZXN0VVJMID0gdGFzay5yZXF1ZXN0KCkudXJsKCk7Ci0K
LSAgICAvLyBEZXN0cm95IHRoZSBjbGllbnQgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rp
b24gc28gaXQgY2FuIGNvbm5lY3QgdG8gdGhlIHNhbWUgcG9ydAotICAgIG1faW5zcGVjdG9yQ2xp
ZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RvckNsaWVudCA9IG1ha2VVbmlxdWU8UmVtb3Rl
SW5zcGVjdG9yQ2xpZW50PihyZXF1ZXN0VVJMLCAqdGhpcyk7Ci0KLSAgICAvLyBTZXR1cCB0YXJn
ZXQgcG9zdE1lc3NhZ2UgbGlzdGVuZXIKLSAgICBhdXRvIGhhbmRsZXIgPSBXZWJTY3JpcHRNZXNz
YWdlSGFuZGxlcjo6Y3JlYXRlKG1ha2VVbmlxdWU8U2NyaXB0TWVzc2FnZUNsaWVudD4oKnRoaXMp
LCAiaW5zcGVjdG9yIiwgQVBJOjpVc2VyQ29udGVudFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKLSAg
ICBwYWdlUHJveHkucGFnZUdyb3VwKCkudXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNj
cmlwdE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXIuZ2V0KCkpOwotCi0gICAgLy8gU2V0dXAgbG9hZGVy
IGNsaWVudCB0byBnZXQgbm90aWZpZWQgb2YgcGFnZSBsb2FkCi0gICAgbV9wYWdlLnNldExvYWRl
ckNsaWVudChtYWtlVW5pcXVlPExvYWRlckNsaWVudD4oW3RoaXNdIHsKLSAgICAgICAgbV9wYWdl
TG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOwotICAgIH0pKTsKLSAg
ICBtX3BhZ2VMb2FkZWQgPSBmYWxzZTsKLQotICAgIFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7
Ci0gICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAotICAgICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJl
bW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKLSAgICAgICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250
ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz4iCi0gICAg
ICAgICI8c3R5bGU+IgotICAgICAgICAiICBoMSB7IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRv
dzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRvbTogMDsgfSIKLSAgICAgICAgIiAgaHRtbCB7
IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1mb250OyBmb250LXNpemU6IDExcHQ7IGNvbG9y
OiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHggMCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAj
ZjZmNmY0OyAiCi0gICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdy
YWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVl
ZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsiCi0gICAgICAgICIgICAgICAgICBiYWNrZ3Jv
dW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB9IgotICAg
ICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB0
YWJsZS1sYXlvdXQ6IGZpeGVkOyB9IgotICAgICAgICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFw
eCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9
IgotICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIKLSAgICAgICAgIiAgdGQg
eyBwYWRkaW5nOiAxNXB4OyB9IgotICAgICAgICAiICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9
IgotICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBib2xkOyBvdmVyZmxvdzog
aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9Igot
ICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IGJhY2tncm91bmQ6ICNlZWU7
IHdvcmQtd3JhcDogYnJlYWstd29yZDsgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsgfSIKLSAg
ICAgICAgIiAgdGQuaW5wdXQgeyB3aWR0aDogNjRweDsgfSIKLSAgICAgICAgIiAgaW5wdXQgeyB3
aWR0aDogMTAwJTsgcGFkZGluZzogOHB4OyB9IgotICAgICAgICAiPC9zdHlsZT4iCi0gICAgICAg
ICI8L2hlYWQ+PGJvZHk+PGgxPkluc3BlY3RhYmxlIHRhcmdldHM8L2gxPiIKLSAgICAgICAgIjxk
aXYgaWQ9XCJ0YXJnZXRsaXN0XCI+PHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD48L2Rpdj48L2JvZHk+
IgotICAgICAgICAiPHNjcmlwdD4iCi0gICAgICAgICJmdW5jdGlvbiB1cGRhdGVUYXJnZXRzKHN0
cikgeyIKLSAgICAgICAgICAgICJsZXQgdGFyZ2V0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3RhcmdldGxpc3QnKTsiCi0gICAgICAgICAgICAidGFyZ2V0RGl2LmlubmVySFRNTCA9IHN0
cjsiCi0gICAgICAgICJ9IgotICAgICAgICAiPC9zY3JpcHQ+Iik7Ci0gICAgaHRtbEJ1aWxkZXIu
YXBwZW5kKCI8L2h0bWw+Iik7Ci0KLSAgICBhdXRvIGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmlu
ZygpLnV0ZjgoKTsKLSAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShodG1sLmRh
dGEoKSwgaHRtbC5sZW5ndGgoKSk7Ci0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShyZXF1
ZXN0VVJMLCAidGV4dC9odG1sIl9zLCBodG1sLmxlbmd0aCgpLCAiVVRGLTgiX3MpOwotICAgIHRh
c2suZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICB0YXNrLmRpZFJlY2VpdmVEYXRh
KFdURk1vdmUoZGF0YSkpOwotICAgIHRhc2suZGlkQ29tcGxldGUoUmVzb3VyY2VFcnJvcigpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMGY2MDBlZmRlZDQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3Rv
ckNsaWVudC5oIgotI2luY2x1ZGUgIldlYlVSTFNjaGVtZUhhbmRsZXIuaCIKLQotbmFtZXNwYWNl
IFdURiB7Ci1jbGFzcyBVUkw7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJV
UkxTY2hlbWVUYXNrOwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIgZmlu
YWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIsIHB1YmxpYyBXZWJVUkxTY2hlbWVI
YW5kbGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIocGFnZSkpOyB9Ci0KLSAgICB2b2lkIGlu
c3BlY3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklELCBUYXJnZXRJRCwg
Y29uc3QgU3RyaW5nJiB0eXBlKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXIoV2ViUGFnZVByb3h5JiBwYWdlKQotICAgICAgICA6IG1fcGFnZShwYWdlKSB7
IH0KLQotICAgIC8vIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyCi0gICAgdm9pZCB0YXJnZXRMaXN0
Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIGNvbm5lY3Rp
b25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgZmluYWwgeyB9Ci0KLSAgICAvLyBXZWJV
UkxTY2hlbWVIYW5kbGVyCi0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkm
LCBXZWJVUkxTY2hlbWVUYXNrJikgZmluYWw7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0b3BUYXNrKFdl
YlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KLSAgICB2b2lkIHBsYXRm
b3JtVGFza0NvbXBsZXRlZChXZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9Ci0KLSAgICB2b2lk
IHVwZGF0ZVRhcmdldExpc3QoKTsKLQotICAgIHZvaWQgcnVuU2NyaXB0KGNvbnN0IFN0cmluZyYp
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvckNsaWVudD4gbV9pbnNwZWN0
b3JDbGllbnQ7Ci0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0gICAgYm9vbCBtX3BhZ2VMb2Fk
ZWQgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX3RhcmdldExpc3RzSHRtbDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkwYzJiOTRm
MmYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5j
bHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94
eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBMUENUU1RSIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5UG9pbnRlclByb3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIiKTsK
LWNvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUgPSBMIlJlbW90
ZVdlYkluc3BlY3RvclByb3h5Q2xhc3MiOwotCi1MUkVTVUxUIENBTExCQUNLIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCi17Ci0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqPig6OkdldFByb3AoaHdu
ZCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOwotCi0gICAgc3dpdGNoICht
c2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIHJldHVybiBjbGllbnQtPnNpemVDaGFu
Z2UoKTsKLSAgICBjYXNlIFdNX0NMT1NFOgotICAgICAgICByZXR1cm4gY2xpZW50LT5vbkNsb3Nl
KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIDo6
RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIEFU
T00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVy
ZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4
LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0g
MDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Oldu
ZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJh
ICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IDA7Ci0gICAgd2NleC5oSWNvbiAg
ICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURD
X0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51
TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0KLSAgICBoYXZl
UmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLSAgICByZXR1cm4gOjpSZWdpc3RlckNsYXNz
RXgoJndjZXgpOwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaXplQ2hh
bmdlKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBS
RUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyZWN0KTsK
LSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygpLCAwLCByZWN0LmxlZnQsIHJl
Y3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBT
V1BfTk9aT1JERVIpOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpvbkNsb3NlKCkKLXsKLSAgICA6OlNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRs
ZSwgU1dfSElERSk7Ci0gICAgZnJvbnRlbmREaWRDbG9zZSgpOwotICAgIHJldHVybiAwOwotfQot
Ci1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgUmVmUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVm
ZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJX
ZWJLaXQyLiIpOwotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THModHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgcHJlZmVyZW5jZXMt
PnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExv
Z3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0KLSAg
ICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShp
bnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7Ci0KLSAgICBhdXRv
IHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0g
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9v
bChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlv
bi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpOwotICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKLQotICAgIFdlYkNvcmU6OkludFJl
Y3QgcmVjdCg2MCwgMjAwLCAxNTAwLCAxMDAwKTsKLSAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7
Ci0gICAgbV9mcm9udGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAw
KTsKLQotICAgIDo6U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxlLCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNo
b3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7Ci0KLSAgICBSRUNUIHI7Ci0gICAg
OjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyKTsKLSAgICBtX3dlYlZpZXcgPSBX
ZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1fZnJvbnRlbmRIYW5kbGUpOwot
ICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2ws
IGJvb2wpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7
IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFn
KCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1Rh
Yihjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCkKLXsKLSAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhhbmRsZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVj
dG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYkluc3BlY3Rv
clByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlYWM5NzMxNzku
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0
b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Lmgi
Ci0KLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFj
dGlvbi5oIgotI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGFn
ZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIK
LSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0j
aW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29y
ZUJ1bmRsZVdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KLSNpbmNsdWRl
IDxXZWJLaXQvV0tQYWdlLmg+Ci0KLSNpZiBVU0UoQ0YpCi0jaW5jbHVkZSA8d3RmL2NmL0NGVVJM
RXh0cmFzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCBM
UENXU1RSIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBMIldlYkluc3BlY3RvclByb3h5
UG9pbnRlciI7Ci1zdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFt
ZSA9IEwiV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7Ci0KLXN0cnVjdCBJbnNwZWN0ZWRXaW5kb3dJ
bmZvIHsKLSAgICBpbnQgbGVmdDsKLSAgICBpbnQgdG9wOwotICAgIGludCB2aWV3V2lkdGg7Ci0g
ICAgaW50IHZpZXdIZWlnaHQ7Ci0gICAgaW50IHBhcmVudFdpZHRoOwotICAgIGludCBwYXJlbnRI
ZWlnaHQ7Ci19OwotCi1zdGF0aWMgSW5zcGVjdGVkV2luZG93SW5mbyBnZXRJbnNwZWN0ZWRXaW5k
b3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93LCBIV05EIHBhcmVudFdpbmRvdykKLXsKLSAgICBS
RUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KGluc3BlY3RlZFdpbmRvdywgJnJlY3QpOwot
ICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3BlY3RlZFdpbmRvdywgcGFyZW50V2luZG93LCAoTFBQ
T0lOVCkmcmVjdCwgMik7Ci0KLSAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgOjpHZXRDbGllbnRS
ZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJlY3QpOwotICAgIHJldHVybiB7IHJlY3QubGVmdCwg
cmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3As
IHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRSZWN0LmxlZnQsIHBhcmVudFJlY3QuYm90dG9tIC0g
cGFyZW50UmVjdC50b3AgfTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93UmVj
ZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkK
LXsKLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6IHsK
LSAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJhbSk7
Ci0KLSAgICAgICAgaWYgKHdpbmRvd1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOwotICAg
ICAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgICAgIEdldENsaWVudFJlY3QocGFyZW50LCAmcGFy
ZW50UmVjdCk7Ci0KLSAgICAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgICAgICBHZXRDbGll
bnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywgJmluc3BlY3RvclJlY3QpOwotCi0gICAgICAg
IHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpCb3R0b206IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5k
b3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcCwgd2luZG93
UG9zLT5jeSk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsK
LSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2lu
ZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBp
bnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICBjYXNlIEF0
dGFjaG1lbnRTaWRlOjpSaWdodDogewotICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9yV2lk
dGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0
dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3RvclJlY3QubGVm
dCwgd2luZG93UG9zLT5jeCk7Ci0gICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09IGluc3BlY3Rv
cldpZHRoOwotICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93
LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnksIGluc3BlY3Rv
cldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9aT1JERVIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJveHk6OnduZFByb2Mo
SFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAg
ICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0
b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7
Ci0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIDo6U2V0V2lu
ZG93UG9zKGNsaWVudC0+bV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBMT1dPUkQobFBh
cmFtKSwgSElXT1JEKGxQYXJhbSksIFNXUF9OT1pPUkRFUik7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiA6
OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0KLWJvb2wgV2Vi
SW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVyV2luZG93Q2xhc3MoKQotewotICAgIHN0YXRpYyBib29s
IGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKLQotICAgIGlmIChoYXZlUmVnaXN0
ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBoYXZlUmVnaXN0ZXJl
ZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNi
U2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlID0gMDsKLSAgICB3Y2V4
LmxwZm5XbmRQcm9jID0gd25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAwOwotICAgIHdj
ZXguY2JXbmRFeHRyYSA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0YW5j
ZUhhbmRsZSgpOwotICAgIHdjZXguaEljb24gPSAwOwotICAgIHdjZXguaEN1cnNvciA9IExvYWRD
dXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQgPSAwOwotICAgIHdj
ZXgubHBzek1lbnVOYW1lID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNwZWN0
b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3Y2V4LmhJY29uU20gPSAwOwotICAgIHJldHVybiA6OlJl
Z2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBu
YXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYs
IFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICAvLyBBbGxvdyBub24t
bWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hlcmUuCi0gICAgQVBJOjpGcmFtZUluZm8qIHNv
dXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOwot
ICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKLSAg
ICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb25zdCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBz
dGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOwotICAgIEFT
U0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOwotCi0gICAg
Ly8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2Vi
SW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkp
IHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcg
aW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCi0gICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3Jl
KCk7Ci0KLSAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4K
LSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChXVEZN
b3ZlKHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFn
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSog
d2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLSAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkp
OwotICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Ci19Ci0KLVdlYlBhZ2VQ
cm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsK
LSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBX
ZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsK
LSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBp
bnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5n
IHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRy
dWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xl
RW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50
aW1lRmxhZ3MoeyB9KTsKLSAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRl
KGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwot
ICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVh
dGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclBy
b2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7Ci0KLSAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xp
ZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKLSAgICAgICAgeyAwLCB0aGlzIH0sCi0gICAgICAg
IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24sCi0gICAgICAgIG51bGxwdHIsIC8vIGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZQotICAgICAgICBudWxscHRyLCAvLyBkZWNp
ZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlz
aW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWls
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmln
YXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgotICAgICAgICBu
dWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWls
UHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hE
b2N1bWVudExvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlv
bgotICAgICAgICBudWxscHRyLCAvLyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZQotICAgICAg
ICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCi0gICAg
ICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQotICAgICAg
ICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCi0gICAgICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9N
YXN0ZXJLZXkKLQotICAgICAgICBudWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJl
Ci0gICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBu
dWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyBk
aWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90Ci0gICAgfTsKLQotICAgIFJFQ1QgciA9
IHsgMCwgMCwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwgc3RhdGljX2Nh
c3Q8TE9ORz4oaW5pdGlhbFdpbmRvd0hlaWdodCkgfTsKLSAgICBhdXRvIHBhZ2UgPSBpbnNwZWN0
ZWRQYWdlKCk7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmlld1dpZGdldCgp
OwotICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KG1faW5zcGVj
dGVkVmlld1dpbmRvdyk7Ci0gICAgYXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VD
b25maWd1cmF0aW9uLCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIG1faW5zcGVj
dG9yVmlldyA9ICZ2aWV3LmxlYWtSZWYoKTsKLSAgICBhdXRvIGluc3BlY3RvclBhZ2UgPSBtX2lu
c3BlY3RvclZpZXctPnBhZ2UoKTsKLSAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBpbnNwZWN0
b3JQYWdlLT52aWV3V2lkZ2V0KCk7Ci0gICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQo
dG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOwotCi0gICAgcmV0
dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
Q2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIFdlYkNvcmU6OldpbmRvd01lc3Nh
Z2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlz
KTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yUGFnZSA9
IG51bGxwdHI7Ci0gICAgaWYgKG1faW5zcGVjdG9yVmlld1dpbmRvdykgewotICAgICAgICA6OkRl
c3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JW
aWV3V2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2lu
ZG93KSB7Ci0gICAgICAgIDo6UmVtb3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2Vi
SW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCk7Ci0gICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2lu
c3BlY3RvckRldGFjaFdpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0g
bnVsbHB0cjsKLSAgICB9Ci0gICAgbV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKLSAg
ICBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSBudWxscHRyOwotfQotCi1TdHJpbmcgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQotewotI2lmIFVTRShDRikKLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291
cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBDRlNUUigiaHRt
bCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmlu
ZyhodG1sVVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQot
Ci1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSNp
ZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihD
RkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRl
c3QiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKLSAgICByZXR1
cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7
IH07Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNl
VVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJMUmVm
ID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUo
KSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIiksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1
cm4gQ0ZVUkxHZXRTdHJpbmcoYmFzZVVSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7
IH07Ci0jZW5kaWYKLX0KLQotRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5Ojpp
bmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKLXsKLSAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KLSAgICBy
ZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIFJFQ1Qg
cmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7
Ci0gICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVjdC50b3A7Ci19Ci0KLXVuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBSRUNU
IHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3Qp
OwotICAgIHJldHVybiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1p
bmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cgJiYgOjpHZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRl
dGFjaFdpbmRvdykgewotICAgICAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cs
IG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2lu
c3BlY3RvckRldGFjaFdpbmRvdywgU1dfSElERSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6V2lu
ZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3cs
IHRoaXMpOwotCi0gICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJv
dHRvbSkgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1p
bihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUlu
c3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZh
dWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9Ci0gICAgOjpT
aG93V2luZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWluc3BlY3RlZFBh
Z2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X2luc3BlY3RvckRldGFjaFdpbmRvdykgewotICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7
Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBX
ZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAg
ICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0aCwg
aW5pdGlhbFdpbmRvd0hlaWdodCwKLSAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6Omluc3RhbmNl
SGFuZGxlKCksIDApOwotICAgICAgICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cs
IFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0
aGlzKSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpy
ZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0gICAgUkVDVCBy
ZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgJnJlY3Qp
OwotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0
ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0UGFy
ZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOwotICAg
IDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVjdC5yaWdo
dCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKLSAg
ICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVm
dCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxl
ZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRF
Uik7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3Bl
Y3RvckRldGFjaFdpbmRvdywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAg
IGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3
V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9z
KG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBh
cmVudEhlaWdodCAtIGhlaWdodCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8u
bGVmdCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVj
dGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93
SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWln
aHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQot
ewotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0
ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2lu
ZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAt
IHdpZHRoLCB3aW5kb3dJbmZvLnRvcCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0g
d2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5k
b3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhl
aWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1SZXNldFN0YXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiAv
KiB1cmwgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwg
Ym9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIC8qIGF2YWlsYWJsZSAqLykKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBwbGF0Zm9ybURldGFjaCgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDg0YjA5MGZkYzcyLi45NTgyY2NlZTMyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NDIxLDggKzQ0MjEsOCBA
QAogCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4QjVEMDFGRTFENTVCMDBGOUZBMjgg
LyogV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNwZWN0b3JXS1dl
YlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUxOEI1RDExRkUxRDU1QjAw
RjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tJbnNwZWN0b3JXS1dlYlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1
NDI5M0EyMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5oOyBwYXRoID0gaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25p
emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDI5M0EzMTk1QTQzQzYwMDI3
ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1t
OyBwYXRoID0gaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyog
V0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1NDNFMzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0Uz
MDYyMTVBRDEyRTAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5k
Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NDNFMzA4MjE1QzhB
ODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2
NTQsMTAgKzY2NTQsNiBAQAogCQkJCUY0REI1NEU1MjMxOUU3MzMwMDlFMzE1NSAvKiBXS0hpZ2hs
aWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLm1tICovLAogCQkJCTkzM0RGODJEMUIzQkMw
OTAwMEFFQTlFMyAvKiBXS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLmggKi8sCiAJCQkJOTMz
REY4MkYxQjNCQzBCNDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0g
Ki8sCi0JCQkJMEYzQzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5oICovLAotCQkJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcubW0gKi8sCi0JCQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5z
cGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8sCi0JCQkJQTU0MjkzQTMxOTVB
NDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1t
ICovLAogCQkJCTJERDVFMTI3MjEwQURDN0EwMERCNjAxMiAvKiBXS0tleWJvYXJkU2Nyb2xsaW5n
QW5pbWF0b3IuaCAqLywKIAkJCQkyREQ1RTEyNjIxMEFEQzdBMDBEQjYwMTIgLyogV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLm1tICovLAogCQkJCTJEQjk0Mjk3MjM0RTdBN0YwMEU3NzZBRCAv
KiBXS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKQEAgLTc5ODMsNiArNzk3OSw5OSBAQAog
CQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJOTFE
OTcwRDQyM0RBNkQyNTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJOTFEOTcwRDUyM0RBNkQ1MDAwNTdEQkMzIC8qIEFn
ZW50cyAqLywKKwkJCQk5MUQ5NzBENzIzREE2RDVCMDA1N0RCQzMgLyogaW9zICovLAorCQkJCTkx
RDk3MEQ2MjNEQTZENTUwMDU3REJDMyAvKiBtYWMgKi8sCisJCQkJQTVFMzkxRkIyMTgzQzFFOTAw
QzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmNwcCAqLywKKwkJCQlBNUUzOTFGQzIxODND
MUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCAqLywKKwkJCQlBNTVCQTgxQjFC
QTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwICovLAorCQkJCUE1
NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oICovLAor
CQkJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5t
ZXNzYWdlcy5pbiAqLywKKwkJCQkxQzhFMjgzMzEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVj
dG9yUHJveHkuY3BwICovLAorCQkJCTFDOEUyODMyMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNw
ZWN0b3JQcm94eS5oICovLAorCQkJCTFDNzdDMTk1MTI4OEE4NzIwMDZBNzQyRiAvKiBXZWJJbnNw
ZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQlBNTVCQTgyNzFCQTM4RTFFMDA3Q0QzM0Qg
LyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCAqLywKKwkJCQlBNTVCQTgyODFCQTM4RTFFMDA3
Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmggKi8sCisJCQkJQTVFQzZBRDIyMTUxQkQ2
OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLywKKwkJCQlBNUVDNkFEMzIxNTFC
RDY5MDA2NzdEMTcgLyogV2ViUGFnZURlYnVnZ2FibGUuaCAqLywKKwkJCQlBNTEzRjUzRjIxNTRB
NUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAorCQkJCUE1
MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBJbnNwZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQk5MUQ5NzBENTIzREE2RDUwMDA1N0RCQzMgLyogQWdlbnRzICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCSk7CisJCQlwYXRoID0gQWdlbnRz
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRDYyM0RBNkQ1NTAw
NTdEQkMzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTVEMzUwNEQxRDc4RjBEMjAwNTEyNEE5IC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
TWFjLm1tICovLAorCQkJCTFDQThCOTM1MTI3Qzc3NEUwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbSAqLywKKwkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlci5oICovLAorCQkJCTk5NEJBREYyMUY3RDc3RUIwMEI1NzFFNyAvKiBX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tICovLAorCQkJCUE1MThCNUQwMUZFMUQ1NUIwMEY5
RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5oICovLAorCQkJCUE1MThCNUQxMUZFMUQ1NUIw
MEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0g
bWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRDcyM0RBNkQ1
QjAwNTdEQkMzIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJMEYzQzcyNTkxOTZGNUY2ODAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5oICovLAorCQkJCTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcubW0gKi8sCisJCQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5z
cGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8sCisJCQkJQTU0MjkzQTMxOTVB
NDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1t
ICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OworCQk5MUQ5NzBFMDIzREE2RkIxMDA1N0RCQzMgLyogSW5zcGVjdG9yICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5MUQ5NzBFNTIzREE3MDQ3MDA1
N0RCQzMgLyogbWFjICovLAorCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVX
ZWJJbnNwZWN0b3JVSS5jcHAgKi8sCisJCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJl
bW90ZVdlYkluc3BlY3RvclVJLmggKi8sCisJCQkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAorCQkJCTFDOEUyODFGMTI3NUQx
NTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuY3BwICovLAorCQkJCTFDOEUyODFFMTI3NUQxNTQw
MEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCAqLywKKwkJCQkxQzhFMkExQzEyNzc4MzNGMDBCQzdC
RDAgLyogV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluICovLAorCQkJCUJDMTExQTU5MTEyRjRGQkIw
MDMzN0JBQiAvKiBXZWJJbnNwZWN0b3JDbGllbnQuY3BwICovLAorCQkJCUJDMDMyRDZEMTBGNDM3
OEQwMDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGllbnQuaCAqLywKKwkJCQlBNTVCQTgzMjFCQTNF
NkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcCAqLywK
KwkJCQlBNTVCQTgzMzFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyLmggKi8sCisJCQkJRkVFNDNGRDAxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwICovLAorCQkJCUZFRTQzRkQxMUU2N0FGQzYwMDc3
RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggKi8sCisJCQkJRkVFNDNG
RDIxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVz
c2FnZXMuaW4gKi8sCisJCQkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3Rv
clVJLmNwcCAqLywKKwkJCQkxQzg5MUQ2MzE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9y
VUkuaCAqLywKKwkJCQkxQzg5MUQ2NDE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4gKi8sCisJCQkJQTU0M0UzMEEyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuY3BwICovLAorCQkJCUE1NDNFMzA4MjE1QzhBODMwMDI3OUNEOSAvKiBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggKi8sCisJCQkJQTU0M0UzMDkyMTVDOEE4MzAwMjc5Q0Q5
IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCAqLywKKwkJCQlBNTQzRTMw
QjIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAq
LywKKwkJCQlBNTQzRTMwNjIxNUFEMTJFMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHAgKi8sCisJCQkJQTU0M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gSW5zcGVjdG9yOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFE
OTcwRTUyM0RBNzA0NzAwNTdEQkMzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3Bl
Y3RvclVJTWFjLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQk5MzkyODhFMDIxNDA0REYwMDBFQkJBMzMgLyogSW5kZXhlZERC
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTgxOTYsNiAr
ODI4NSw3IEBACiAJCQkJQkMwRTVGQ0IxMkQ2OTZERDAwMTJBNzJBIC8qIEdlb2xvY2F0aW9uICov
LAogCQkJCTJEN0U0M0JGMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFUgKi8sCiAJCQkJQkMyMDRFREYx
MUM4M0U3MjAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlICovLAorCQkJCTkxRDk3MEUwMjNEQTZG
QjEwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8sCiAJCQkJMzNEM0EzQkQxMzM5NjA5ODAwNzA5QkU0
IC8qIE1lZGlhQ2FjaGUgKi8sCiAJCQkJNEE0MTBGNDExOUFGN0IyNzAwMkVCQUI1IC8qIE1lZGlh
U3RyZWFtICovLAogCQkJCTUxMDVCMEQyMTYyRjdBNUUwMEUyNzcwOSAvKiBOZXR3b3JrICovLApA
QCAtODI0Niw4ICs4MzM2LDYgQEAKIAkJCQlCQzAzMkQ2QTEwRjQzNzhEMDA1OEMxNUEgLyogV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaCAqLywKIAkJCQlCQzFCRTFERjEyRDU0QTQxMDAwNEEyMjggLyog
V2ViR2VvbG9jYXRpb25DbGllbnQuY3BwICovLAogCQkJCUJDMUJFMURFMTJENTRBNDEwMDA0QTIy
OCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5oICovLAotCQkJCUJDMTExQTU5MTEyRjRGQkIwMDMz
N0JBQiAvKiBXZWJJbnNwZWN0b3JDbGllbnQuY3BwICovLAotCQkJCUJDMDMyRDZEMTBGNDM3OEQw
MDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQk1MTNGRkI4RTIwMTQ1OUMy
MDAyNTk2RUEgLyogV2ViTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwICovLAogCQkJCTUx
M0ZGQjhGMjAxNDU5QzIwMDI1OTZFQSAvKiBXZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5o
ICovLAogCQkJCTMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGll
bnQuY3BwICovLApAQCAtODI5Niw5ICs4Mzg0LDYgQEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAz
RTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4
OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8q
IFBhZ2VCYW5uZXIuaCAqLywKLQkJCQlBNTVCQTgxMjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3Rl
V2ViSW5zcGVjdG9yVUkuY3BwICovLAotCQkJCUE1NUJBODEzMUJBMjNFMDUwMDdDRDMzRCAvKiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSS5oICovLAotCQkJCUE1NUJBODE0MUJBMjNFMDUwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLywKIAkJCQkyRDgxOUI5OTE4NjI3
NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJCQkJ
MkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3Iu
aCAqLywKIAkJCQkyRDgxOUI5QjE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRy
eUNvbGxlY3Rvci5tZXNzYWdlcy5pbiAqLywKQEAgLTgzMTgsMTcgKzg0MDMsNiBAQAogCQkJCTFB
NUIxQzUzMTg5ODdFREYwMDRGQ0Y5QiAvKiBXZWJEb2N1bWVudExvYWRlci5oICovLAogCQkJCUJD
MTExQURDMTEyRjVCOTMwMDMzN0JBQiAvKiBXZWJGcmFtZS5jcHAgKi8sCiAJCQkJQkMwMzJEODkx
MEY0MzdBMDAwNThDMTVBIC8qIFdlYkZyYW1lLmggKi8sCi0JCQkJMUM4RTI4MUYxMjc1RDE1NDAw
QkM3QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAgKi8sCi0JCQkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3
QkQwIC8qIFdlYkluc3BlY3Rvci5oICovLAotCQkJCTFDOEUyQTFDMTI3NzgzM0YwMEJDN0JEMCAv
KiBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8sCi0JCQkJQTU1QkE4MzIxQkEzRTZGQTAwN0NE
MzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgKi8sCi0JCQkJQTU1
QkE4MzMxQkEzRTZGQTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
ci5oICovLAotCQkJCUZFRTQzRkQwMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyLmNwcCAqLywKLQkJCQlGRUU0M0ZEMTFFNjdBRkM2MDA3N0Q2RDEgLyog
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oICovLAotCQkJCUZFRTQzRkQyMUU2N0FG
QzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmlu
ICovLAotCQkJCTFDODkxRDYyMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5jcHAg
Ki8sCi0JCQkJMUM4OTFENjMxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmggKi8s
Ci0JCQkJMUM4OTFENjQxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLm1lc3NhZ2Vz
LmluICovLAogCQkJCUJDODU3Rjg0MTJCODJEMEIwMEVERUIyRSAvKiBXZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJQkM4NTdGODMxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggKi8sCiAJCQkJQkM5NjNENkExMTNERDE5MjAwNTc0QkUy
IC8qIFdlYlBhZ2UuY3BwICovLApAQCAtODMzNiwxMiArODQxMCw2IEBACiAJCQkJQzBDRTcyNTgx
MjQ3RTREQTAwQkMwRUM0IC8qIFdlYlBhZ2UubWVzc2FnZXMuaW4gKi8sCiAJCQkJQkM3QjYyMTQx
MkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmNwcCAqLywKIAkJCQlCQzdCNjIx
MzEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCAqLywKLQkJCQlBNTQzRTMw
QTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgKi8sCi0JCQkJ
QTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLywK
LQkJCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENv
bnRyb2xsZXIuY3BwICovLAotCQkJCUE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICovLAotCQkJCUE1NDNFMzA2MjE1QUQxMkUwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCAqLywKLQkJ
CQlBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5oICovLAogCQkJCTJENUM5RDAzMTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdl
T3ZlcmxheS5jcHAgKi8sCiAJCQkJMkQ1QzlEMDQxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VP
dmVybGF5LmggKi8sCiAJCQkJQkNBMEVGN0UxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVw
LmNwcCAqLywKQEAgLTgzNjUsNiArODQzMyw3IEBACiAJCQkJMUFCN0Q0QzcxMjg4QUE5QTAwQ0ZE
MDhDIC8qIERvd25sb2FkcyAqLywKIAkJCQk1MTVCRTE3QjFENTRFRjVBMDBERDdDNjggLyogR2Ft
ZXBhZCAqLywKIAkJCQkyRDdFNDNCQjIzNzUyQ0M0MDBFQTVDQTAgLyogR1BVICovLAorCQkJCTkx
RDk3MEQ0MjNEQTZEMjUwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8sCiAJCQkJMkRBOTQ0QTgxODg0
RTlBQjAwRUQ4NkRCIC8qIGlvcyAqLywKIAkJCQlCQzExMUIxODExMkY1RkI0MDAzMzdCQUIgLyog
TGF1bmNoZXIgKi8sCiAJCQkJQkNDRjA4NUMxMTNGM0I3NTAwQzY1MEM1IC8qIG1hYyAqLywKQEAg
LTgzOTQsOCArODQ2Myw2IEBACiAJCQkJMkRENUE3MkExRUJGMDlBNzAwOUJBNTk3IC8qIEhpZGRl
blBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50ZXIuaCAqLywKIAkJCQk4MzlBMkYyRjFF
MjA2NzM5MDAzOTA1N0UgLyogSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuY3Bw
ICovLAogCQkJCTgzOUEyRjMwMUUyMDY3MzkwMDM5MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFw
aGljc1VzYWdlU2FtcGxlci5oICovLAotCQkJCUE1RTM5MUZCMjE4M0MxRTkwMEM4RkIzMSAvKiBJ
bnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgKi8sCi0JCQkJQTVFMzkxRkMyMTgzQzFFOTAwQzhGQjMx
IC8qIEluc3BlY3RvclRhcmdldFByb3h5LmggKi8sCiAJCQkJNUNFQUJBMkIyMzMzMjUxNDAwNzk3
Nzk3IC8qIExlZ2FjeUdsb2JhbFNldHRpbmdzLmNwcCAqLywKIAkJCQk1Q0VBQkEyQTIzMzMyNDc3
MDA3OTc3OTcgLyogTGVnYWN5R2xvYmFsU2V0dGluZ3MuaCAqLywKIAkJCQkzMTYwN0YzODE5NjI3
MDAyMDA5Qjg3REEgLyogTGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmggKi8sCkBAIC04NDExLDkg
Kzg0NzgsNiBAQAogCQkJCTgzMDQ4QUU1MUFDQTQ1REMwMDgyQzgzMiAvKiBQcm9jZXNzVGhyb3R0
bGVyQ2xpZW50LmggKi8sCiAJCQkJNDY4MzU2OUIyMUU4MUNDNzAwNkUyN0EzIC8qIFByb3Zpc2lv
bmFsUGFnZVByb3h5LmNwcCAqLywKIAkJCQk0NjgzNTY5QTIxRTgxQ0M3MDA2RTI3QTMgLyogUHJv
dmlzaW9uYWxQYWdlUHJveHkuaCAqLywKLQkJCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwICovLAotCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdD
RDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oICovLAotCQkJCUE1NUJBODFBMUJBMjVC
MUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJ
CQlCQzExMUIwODExMkY1RTNDMDAzMzdCQUIgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8s
CiAJCQkJMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAq
LywKIAkJCQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5o
ICovLApAQCAtODQ5MywxMSArODU1Nyw2IEBACiAJCQkJQkMxQkUxRjExMkQ1NERCRDAwMDRBMjI4
IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwICovLAogCQkJCUJDMUJFMUYwMTJENTREQkQw
MDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggKi8sCiAJCQkJNTFDOEUxOUIxRjIx
NjE3MjAwQkY3MzFCIC8qIFdlYkljb25EYXRhYmFzZS5oICovLAotCQkJCTFDOEUyODMzMTI3NUQ3
MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJMUM4RTI4MzIxMjc1
RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJMUM3N0MxOTUxMjg4
QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCUE1
NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwICovLAot
CQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAq
LywKIAkJCQlDOThDNDhBMzFCNkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNN
YW5hZ2VyLmNwcCAqLywKIAkJCQlDOThDNDhBNDFCNkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFT
ZXNzaW9uRm9jdXNNYW5hZ2VyLmggKi8sCiAJCQkJQzlDMTgzMzcxQjczRkQ2QTAwNzAzNkE3IC8q
IFdlYk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlckNsaWVudC5jcHAgKi8sCkBAIC04NTA4LDE2ICs4
NTY3LDEyIEBACiAJCQkJN0NDQ0M4RjkxQTVGNTBGRDAwOEZCMERBIC8qIFdlYk5hdmlnYXRpb25T
dGF0ZS5oICovLAogCQkJCUJDMURGRUEzMTJCMzFGODcwMDVERjczMCAvKiBXZWJPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lclByb3h5LmNwcCAqLywKIAkJCQlCQzFERkVBMjEyQjMxRjg3MDA1REY3MzAg
LyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oICovLAotCQkJCUE1RUM2QUQyMjE1
MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdlRGVidWdnYWJsZS5jcHAgKi8sCi0JCQkJQTVFQzZBRDMy
MTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmggKi8sCiAJCQkJODM3MkRCMjYx
QTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8s
CiAJCQkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oICovLAogCQkJCUJDN0I2MjA1MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3Jv
dXAuY3BwICovLAogCQkJCUJDN0I2MjA0MTI5QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAu
aCAqLywKIAkJCQkyRDlFQTMxMDFBOTZEOUVCMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVu
ZGxlQ2xpZW50LmNwcCAqLywKIAkJCQkyRDlFQTMwRTFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFn
ZUluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8sCi0JCQkJQTUxM0Y1M0YyMTU0QTVDRDAwNjYyODQx
IC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKLQkJCQlBNTEzRjUzRTIxNTRB
NUNDMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKIAkJCQlCQzEx
MUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNwcCAqLywKIAkJCQlCQzAzMkRD
QjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVByb3h5LmggKi8sCiAJCQkJQkNCRDM4RkExMjVC
QUI5QTAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTkxODMsNyAr
OTIzOCw2IEBACiAJCQkJN0M2RDM3RkExNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMu
bW0gKi8sCiAJCQkJMUFBRjI2MzcxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLmggKi8sCiAJCQkJMUFBRjI2MzYxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tICovLAotCQkJCTFDOEUyREFEMTI3OEM1QjIwMEJD
N0JEMCAvKiBXZWJJbnNwZWN0b3JVSU1hYy5tbSAqLywKIAkJCQlCQzk2M0Q2RDExM0REMUE1MDA1
NzRCRTIgLyogV2ViUGFnZU1hYy5tbSAqLywKIAkJCQkyOUNENTVBODEyOEUyOTRGMDAxMzNDODUg
LyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCAqLywKIAkJCQkyOUNENTVBOTEy
OEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UubW0gKi8s
CkBAIC05MjYwLDcgKzkzMTQsNiBAQAogCQkJCTFBRkRFNjVCMTk1NEU4RDUwMEM0OEZGQSAvKiBM
ZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwICovLAogCQkJCTBGQ0I0RTU4MThCQkUzRDkwMDBG
Q0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oICovLAogCQkJCTBGQ0I0RTU5MThCQkUzRDkwMDBG
Q0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSAqLywKLQkJCQlBNUQzNTA0RDFENzhGMEQyMDA1
MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCiAJCQkJRTE4RTY5MDkx
NjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuY3BwICovLAogCQkJCUUxOEU2OTBB
MTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmggKi8sCiAJCQkJRTE4RTY5MEQx
NjlCNTdERjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05
MjgxLDcgKzkzMzQsNiBAQAogCQkJCUY2RDYzMkJBMTMzRDE4MUIwMDc0M0Q3NyAvKiBXZWJDb29r
aWVNYW5hZ2VyUHJveHlNYWMubW0gKi8sCiAJCQkJRTU2OEI5MjAyMEEzQUM2QTAwRTNDODU2IC8q
IFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5oICovLAogCQkJCUU1NjhCOTIxMjBB
M0FDNkEwMEUzQzg1NiAvKiBXZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0gKi8s
Ci0JCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1t
ICovLAogCQkJCUJDODU3RTg1MTJCNzFFQkIwMEVERUIyRSAvKiBXZWJQYWdlUHJveHlNYWMubW0g
Ki8sCiAJCQkJQkM1NzUwOTUxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5TWFj
LmggKi8sCiAJCQkJQkM1NzUwOTYxMjY4RjNDNjAwNkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5
TWFjLm1tICovLApAQCAtOTI5MiwxMCArOTM0NCw2IEBACiAJCQkJQ0RDQTg1QzYxMzJBQkE0RTAw
RTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi8sCiAJCQkJOTMyMUQ1
ODUxQTM4RUUzQzAwODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oICovLAog
CQkJCTkzMjFENTg3MUEzOEVFNzQwMDgwNTJCRSAvKiBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIubW0gKi8sCi0JCQkJOTk0QkFERjExRjdENzdFQTAwQjU3MUU3IC8qIFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIuaCAqLywKLQkJCQk5OTRCQURGMjFGN0Q3N0VCMDBCNTcxRTcgLyogV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5tbSAqLywKLQkJCQlBNTE4QjVEMDFGRTFENTVCMDBGOUZBMjgg
LyogV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCAqLywKLQkJCQlBNTE4QjVEMTFGRTFENTVCMDBGOUZB
MjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0gKi8sCiAJCQkJMEZDQjRFNUMxOEJCRTNEOTAw
MEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggKi8sCiAJCQkJMEZDQjRFNUQxOEJCRTNEOTAwMEZD
RkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAogCQkJCTUxM0U0NjJCMUFEODM3NTYwMDE2MjM0
QSAvKiBXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVsZWdhdGUuaCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU1OGQ4ZjBjMjQ2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKwor
I2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Q2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKworI2lmICFQTEFURk9STShN
QUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclVJKHBhZ2UpKTsKK30KKworUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OlJlbW90ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2Uo
cGFnZSkKKyAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCit7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRhJiYgZGVi
dWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQoreworICAgIG1f
ZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRD
b21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1fcGFnZS5jb3JlUGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7
CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOworICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB0
cnVlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJp
bmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQo
InNhdmVkVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRB
cHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5j
KG1lc3NhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRl
bnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0
Q2xlYXJlZCgpCit7CisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5k
SG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOworCisgICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0
b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7CisgICAgbV9m
cm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRl
ZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKKwor
ICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxl
Il9zLCB0cnVlKTsKKworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdGFy
dFdpbmRvd0RyYWcoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpT
dGFydFdpbmRvd0RyYWcoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZs
b2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVj
dCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5j
aHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK1dlYkNvcmU6OlVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+
dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpicmluZ1RvRnJvbnQoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKK3sKKyAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51
bGxwdHIpOworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5k
RGlkQ2xvc2UoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnJlb3BlbigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OlJlb3BlbigpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKK3sK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3VGFiKHVybCks
IG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpz
YXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBm
b3JjZVNhdmVBcyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJOjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpBcHBlbmQo
ZmlsZW5hbWUsIGNvbnRlbnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKK3sKKyAgICAvLyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2FuIGtub3cgaWYg
dGhlIG1haW4gcmVzb3VyY2UgY2hhbmdlZC4KK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JV
STo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZv
KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNh
dGUoY2VydGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK0luc3BlY3Rv
cjo6RGVidWdnYWJsZVR5cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2FibGVUeXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxlVHlwZTsKK30K
KworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKK30K
KworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKK30K
KworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247
Cit9CisKK2Jvb2wgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxhdG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVsYXRvcjsKK30K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9vbCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0dXJuIG1fcGFnZS5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUsICBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9u
YXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVu
dE5hbWUsICJSZW1vdGUgV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGlj
dGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAg
IC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJl
IHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgorICAgIEFTU0VS
VCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7CisgICAgbV9kaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElE
aXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUi
X3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOworfQorI2VuZGlmCisKKyNpZiAhUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorU3RyaW5nIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorI2VuZGlmIC8v
ICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5iNGFlMWMxZGFhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaApAQCAt
MCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVi
dWdnYWJsZUluZm9EYXRhLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Lmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIEZsb2F0UmVjdDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFJlbW90ZVdlYkluc3Bl
Y3RvclVJIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5zcGVjdG9yVUk+LCBw
dWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JV
ST4gY3JlYXRlKFdlYlBhZ2UmKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBS
ZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisg
ICAgLy8gQ2FsbGVkIGJ5IFJlbW90ZVdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCisgICAgdm9pZCBp
bml0aWFsaXplKERlYnVnZ2FibGVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21t
YW5kc1VSTCk7CisgICAgdm9pZCBkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lk
IGRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgU3RyaW5nJik7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkK
KyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOworI2VuZGlmCisK
KyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudAorICAgIHZvaWQgd2luZG93
T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGNoYW5nZVNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOworICAgIHZv
aWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOworCisgICAgYm9vbCBp
c1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBTdHJpbmcgbG9jYWxp
emVkU3RyaW5nc1VSTCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyBiYWNrZW5kQ29tbWFu
ZHNVUkwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQorICAg
IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
U3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0
YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgdGFyZ2V0SXNT
aW11bGF0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgdm9pZCBicmluZ1RvRnJvbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsb3Nl
V2luZG93KCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW9wZW4oKSBvdmVycmlkZTsKKyAgICB2b2lk
IHJlc2V0U3RhdGUoKSBvdmVycmlkZTsKKworICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYgdXJsKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
VEVMRU1FVFJZKQorICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRl
OworICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVy
biBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGlj
RXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFdlYkNvcmU6OkRpYWdub3N0aWNM
b2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAg
Ym9vbCBjYW5TYXZlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNVbmRl
clRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVkIGluc3BlY3Rp
b25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDE7IH0KKyAgICB2b2lkIHJlcXVlc3RT
ZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjaGFuZ2VBdHRh
Y2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KKworcHJpdmF0ZToKKyAgICBl
eHBsaWNpdCBSZW1vdGVXZWJJbnNwZWN0b3JVSShXZWJQYWdlJik7CisKKyAgICBXZWJQYWdlJiBt
X3BhZ2U7CisgICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q+
IG1fZnJvbnRlbmRIb3N0OworICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZv
OworICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfVEVMRU1FVFJZKQorICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZh
bHNlIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2Vi
SW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjJiZjdlNGM4NzhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpAQCAtMCww
ICsxLDM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
bWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yVUkgeworICAgIEluaXRpYWxpemUoc3RydWN0
IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBTdHJpbmcgYmFja2Vu
ZENvbW1hbmRzVVJMKQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgU2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCisjZW5kaWYKKworICAg
IERpZFNhdmUoU3RyaW5nIHVybCkKKyAgICBEaWRBcHBlbmQoU3RyaW5nIHVybCkKKworICAgIFNl
bmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmcgbWVzc2FnZSkKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzMyMjVkMTNkZDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKQEAg
LTAsMCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0luc3BlY3RvclBhZ2VBZ2VudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CisKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFj
aGVkSGVpZ2h0UmF0aW8gPSAwLjc1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hl
ZFdpZHRoID0gNTAwOworCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitSZWY8V2ViSW5zcGVjdG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBw
YWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Cit9
CisKK1dlYkluc3BlY3Rvcjo6V2ViSW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCisgICAgOiBtX3Bh
Z2UocGFnZSkKK3sKK30KKworV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBp
ZiAobV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5p
bnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChib29sIHVuZGVyVGVzdCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6T3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVz
dCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNldEZy
b250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlm
aWVyKQoreworICAgIC8vIFdlIG1pZ2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlz
IHdlYiBwcm9jZXNzIGdvdCBzd2FwcGVkIGludG8gYSBXZWJQYWdlUHJveHkKKyAgICAvLyBzaG9y
dGx5IGFmdGVyIGFub3RoZXIgcHJvY2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVjdGlvbi4KKyAg
ICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRy
OworICAgIH0KKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkpOworI2VsaWYgT1MoREFSV0lOKQorICAg
IElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVk
Q29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgSVBD
OjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25u
ZWN0aW9uSWRlbnRpZmllci5oYW5kbGUoKSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRp
ZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29u
bmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOworICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uLT5vcGVuKCk7CisKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENv
bm5lY3Rpb25BY3Rpb25zKQorICAgICAgICBjYWxsYmFjaygpOworICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uQWN0aW9ucy5jbGVhcigpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9u
dGVuZENvbm5lY3Rpb24oKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRD
bG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICAvLyBJZiB3ZSB0cmllZCB0byBj
bG9zZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rp
b24gZXhpc3RzIHlldC4KKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENv
bm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0
aW9ucy5jbGVhcigpOworCisgICAgbV9hdHRhY2hlZCA9IGZhbHNlOworICAgIG1fcHJldmlvdXND
YW5BdHRhY2ggPSBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3Bh
Z2UtPmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRD
b25uZWN0aW9uRXN0YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAg
IGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVu
ZChXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKKy8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVz
c2FnZXMKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29y
ZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2Uo
KQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBDbG9zZSBjb3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3du
LgorICAgIGlmICghbV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAg
IGNsb3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVu
SW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgaW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CisKKyAgICBQYWdlKiBp
bnNwZWN0ZWRQYWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpOworICAgIGlmICghaW5zcGVjdGVkUGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGlu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2Fk
UmVxdWVzdCB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZy
YW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0
cmluZyB9LCAiX2JsYW5rIl9zLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6
Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMs
IE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eTo6U2hvdWxkTm90QWxsb3csIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07CisKKyAg
ICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQo
KSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5p
bml0aWF0ZWRCeU1haW5GcmFtZSgpLCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKKyAg
ICBQYWdlKiBuZXdQYWdlID0gaW5zcGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGlu
c3BlY3RlZE1haW5GcmFtZSwgZnJhbWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24pOworICAgIGlm
ICghbmV3UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbmV3UGFnZS0+bWFpbkZyYW1lKCku
bG9hZGVyKCkubG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3I6OmV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sK
KyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
YWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChzY3JpcHQpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQor
eworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3
aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93Q29uc29sZSgp
LCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQor
eworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3
aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93UmVzb3VyY2Vz
KCksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJj
ZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCit7Cisg
ICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJh
bWVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5j
b3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAgU3RyaW5nIGlu
c3BlY3RvckZyYW1lSWRlbnRpZmllciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLmVuc3VyZVBhZ2VBZ2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsK
KworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShpbnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAwKTsKKyAgICB9
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygpCit7CisgICAg
aWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+
Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9u
dGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygp
LCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5n
KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisg
ICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJv
bnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQ
cm9maWxpbmcoKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVs
ZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsK
KyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yOjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDApOworICAgIH0p
OworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBh
Y3RpdmUpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2
ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNldE1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQor
eworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkT3ZlcnJpZGUoZW5hYmxlZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKworYm9v
bCBXZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNv
cmVQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERvbid0IGFsbG93IGF0
dGFjaGluZyB0byBhbm90aGVyIGluc3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2lu
ZG93IGlzIHRvbyBtdWNoIQorICAgIGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFnZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwg
YWxsb3cgYXR0YWNoaW5nIGFnYWluIHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4KKyAgICBpZiAo
bV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0
aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRl
IHRoZSBtaW5pbXVtIGluc3BlY3RvciBzaXplLgorICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VI
ZWlnaHQgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhl
aWdodCgpOworICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlV2lkdGgoKTsKKyAgICB1bnNpZ25lZCBt
YXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFj
aGVkSGVpZ2h0UmF0aW87CisgICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhp
bXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFn
ZVdpZHRoOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0
eSgpCit7CisgICAgaWYgKG1fYXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
Y2FuQXR0YWNoV2luZG93ID0gdGhpcy0+Y2FuQXR0YWNoV2luZG93KCk7CisgICAgaWYgKG1fcHJl
dmlvdXNDYW5BdHRhY2ggPT0gY2FuQXR0YWNoV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3ByZXZpb3VzQ2FuQXR0YWNoID0gY2FuQXR0YWNoV2luZG93OworCisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2lu
ZG93KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNmI4OWU1MjI3NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb24u
aCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
SWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFn
ZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9i
amVjdDo6VHlwZTo6QnVuZGxlSW5zcGVjdG9yPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3I+IGNyZWF0ZShXZWJQ
YWdlKik7CisKKyAgICBXZWJQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisK
KyAgICB2b2lkIHVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKKworICAgIC8vIEltcGxlbWVu
dGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCisgICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVy
cmlkZTsKKworICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9pZCBkaWRDbG9z
ZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KKyAgICB2b2lkIGRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQorCisgICAgdm9p
ZCBzaG93KCk7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcpOworCisgICAgdm9pZCBjYW5BdHRhY2hXaW5kb3coYm9vbCYg
cmVzdWx0KTsKKworICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJj
ZXMoKTsKKworICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllcik7CisKKyAgICB2b2lkIHNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpIHsgbV9h
dHRhY2hlZCA9IGF0dGFjaGVkOyB9CisKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0Rm9yVGVzdChj
b25zdCBTdHJpbmcmIHNjcmlwdCk7CisKKyAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOwor
ICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKKworICAgIHZvaWQgc3RhcnRFbGVtZW50U2Vs
ZWN0aW9uKCk7CisgICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOworICAgIHZvaWQgZWxl
bWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0No
YW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoT3B0aW9uYWw8Ym9vbD4pOworCisgICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBD
OjpBdHRhY2htZW50KTsKKworICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBjbG9zZSgp
OyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdlYkluc3BlY3RvckNsaWVudDsKKwor
ICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvcihXZWJQYWdlKik7CisgICAgdmlydHVhbCB+V2ViSW5z
cGVjdG9yKCk7CisKKyAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpOworCisgICAgLy8gQ2FsbGVk
IGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50CisgICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9u
dGVuZChib29sIHVuZGVyVGVzdCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigp
OworCisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKworICAgIHZvaWQgd2hlbkZyb250ZW5kQ29u
bmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICBXZWJQYWdlKiBt
X3BhZ2U7CisKKyAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Zyb250ZW5kQ29ubmVjdGlv
bjsKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rp
b25zOworCisgICAgYm9vbCBtX2F0dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcHJldmlv
dXNDYW5BdHRhY2ggeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k
YWY3NGI1ZTZiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2Vi
SW5zcGVjdG9yIHsKKyAgICBTaG93KCkKKyAgICBDbG9zZSgpCisKKyAgICBTZXRBdHRhY2hlZChi
b29sIGF0dGFjaGVkKQorCisgICAgU2hvd0NvbnNvbGUoKQorICAgIFNob3dSZXNvdXJjZXMoKQor
CisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBm
cmFtZUlkZW50aWZpZXIpCisKKyAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkKKworICAgIFN0
YXJ0UGFnZVByb2ZpbGluZygpCisgICAgU3RvcFBhZ2VQcm9maWxpbmcoKQorCisgICAgU3RhcnRF
bGVtZW50U2VsZWN0aW9uKCkKKyAgICBTdG9wRWxlbWVudFNlbGVjdGlvbigpCisKKyAgICBTZXRG
cm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4wYjA2ODAxOWVmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JDbGllbnQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCisjaW5jbHVkZSAi
V2ViSW5zcGVjdG9yLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
QW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlIDxXZWJD
b3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGll
bnQgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KFdl
Ykluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICA6IG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudCgpIHsgfQorcHJpdmF0ZToKKyAgICB2b2lkIG5vdGlmeUFu
aW1hdGlvbkVuZGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBTdHJpbmcmKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuYW5pbWF0aW9uRW5kZWRG
b3JMYXllcihsYXllcik7CisgICAgfQorICAgIAorICAgIFdlYkluc3BlY3RvckNsaWVudCYgbV9p
bnNwZWN0b3JDbGllbnQ7Cit9OworCitXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNs
aWVudChXZWJQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2hpZ2hsaWdo
dE92ZXJsYXkobnVsbHB0cikKK3sKK30KKworV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVj
dG9yQ2xpZW50KCkKK3sKKyAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9wYWludFJlY3RMYXllcnMp
CisgICAgICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgCisgICAgbV9wYWludFJl
Y3RMYXllcnMuY2xlYXIoKTsKKworICAgIGlmIChtX3BhaW50UmVjdE92ZXJsYXkgJiYgbV9wYWdl
LT5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKK3sKKyAgICBpZiAoV2ViSW5zcGVjdG9yKiBpbnNwZWN0
b3IgPSBtX3BhZ2UtPmluc3BlY3RvcihXZWJQYWdlOjpMYXp5Q3JlYXRpb25Qb2xpY3k6OlVzZUV4
aXN0aW5nT25seSkpCisgICAgICAgIGluc3BlY3Rvci0+Y2xvc2UoKTsKKworICAgIGRlbGV0ZSB0
aGlzOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZnJvbnRlbmRDb3VudENoYW5nZWQo
dW5zaWduZWQgY291bnQpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3JGcm9udGVuZENvdW50Q2hh
bmdlZChjb3VudCk7Cit9CisKK0luc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBXZWJJbnNwZWN0
b3JDbGllbnQ6Om9wZW5Mb2NhbEZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRl
bmQoY29udHJvbGxlci0+aXNVbmRlclRlc3QoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmJyaW5nRnJvbnRlbmRUb0Zyb250KCkKK3sKKyAg
ICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKKyAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+
YnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRSZXNpemVN
YWluRnJhbWUoRnJhbWUqKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAg
ICBtX3BhZ2UtPmluc3BlY3RvcigpLT51cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQoreworICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICgh
bV9oaWdobGlnaHRPdmVybGF5KSB7CisgICAgICAgIGF1dG8gaGlnaGxpZ2h0T3ZlcmxheSA9IFBh
Z2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBo
aWdobGlnaHRPdmVybGF5LnB0cigpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShXVEZNb3ZlKGhpZ2hsaWdodE92
ZXJsYXkpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBtX2hpZ2hsaWdo
dE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGln
aGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAgbV9oaWdobGln
aHRPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB9CisjZWxzZQorICAgIEhpZ2hsaWdo
dCBoaWdobGlnaHQ7CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuZ2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0ZVN5
c3RlbTo6RG9jdW1lbnQpOworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdo
bGlnaHQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxp
Z2h0KCkKK3sKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAobV9oaWdobGlnaHRP
dmVybGF5KQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CisjZWxzZQorICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hs
aWdodCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fcGFpbnRSZWN0T3ZlcmxheSkgeworICAgICAgICBtX3BhaW50
UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KKworICAgIGlmICghbV9w
YWludEluZGljYXRvckxheWVyQ2xpZW50KQorICAgICAgICBtX3BhaW50SW5kaWNhdG9yTGF5ZXJD
bGllbnQgPSBtYWtlVW5pcXVlPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4oKnRoaXMpOwor
CisgICAgYXV0byBwYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS0+ZHJh
d2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKm1fcGFpbnRJbmRpY2F0b3JMYXll
ckNsaWVudCk7CisgICAgCisgICAgcGFpbnRMYXllci0+c2V0TmFtZSgicGFpbnQgcmVjdCIpOwor
ICAgIHBhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBwYWlu
dExheWVyLT5zZXRQb3NpdGlvbihyZWN0LmxvY2F0aW9uKCkpOworICAgIHBhaW50TGF5ZXItPnNl
dFNpemUocmVjdC5zaXplKCkpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcigxLjBmLCAwLjBmLCAwLjBmLCAwLjJmKSk7CisKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBm
YWRlS2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKKyAgICBmYWRlS2V5ZnJhbWVz
Lmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAsIDEpKTsKKworICAgIGZh
ZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMC4yNSwg
MCkpOworICAgIAorICAgIGF1dG8gb3BhY2l0eUFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7CisgICAgb3BhY2l0eUFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMC4yNSk7CisKKyAgICBwYWlu
dExheWVyLT5hZGRBbmltYXRpb24oZmFkZUtleWZyYW1lcywgRmxvYXRTaXplKCksIG9wYWNpdHlB
bmltYXRpb24ucHRyKCksICJvcGFjaXR5Il9zLCAwKTsKKyAgICAKKyAgICBHcmFwaGljc0xheWVy
JiByYXdMYXllciA9IHBhaW50TGF5ZXIuZ2V0KCk7CisgICAgbV9wYWludFJlY3RMYXllcnMuYWRk
KFdURk1vdmUocGFpbnRMYXllcikpOworCisgICAgR3JhcGhpY3NMYXllciYgb3ZlcmxheVJvb3RM
YXllciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKKyAgICBvdmVybGF5Um9vdExheWVy
LmFkZENoaWxkKHJhd0xheWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmFuaW1h
dGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3Jh
cGhpY3NMYXllciogbm9uQ29uc3RMYXllciA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NMYXllcio+KGxh
eWVyKTsKKyAgICBub25Db25zdExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWlu
dFJlY3RMYXllcnMucmVtb3ZlKCpub25Db25zdExheWVyKTsKK30KKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd0luc3BlY3RvckluZGljYXRp
b24oKQoreworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCkKK3sKKyAgICBt
X3BhZ2UtPmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAo
ZW5hYmxlZCkKKyAgICAgICAgbV9wYWdlLT5lbmFibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7Cisg
ICAgZWxzZQorICAgICAgICBtX3BhZ2UtPmRpc2FibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7Cit9
CisjZW5kaWYKKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmVsZW1lbnRTZWxlY3Rpb25DaGFu
Z2VkKGJvb2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAg
ICBtX3BhZ2UtPmluc3BlY3RvcigpLT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChhY3RpdmUpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJv
b2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3Bh
Z2UtPmluc3BlY3RvcigpLT50aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVy
cmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3Rv
cigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5zZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3
aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5nIGF3
YXkgZnJvbSB0aGUgd2ViIHBhZ2UsIHJlc2V0IGl0LgorICAgIEFTU0VSVChtX2hpZ2hsaWdodE92
ZXJsYXkpOworICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCit7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgLypk
aXJ0eVJlY3QqLykKK3sKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworfQorCitib29sIFdlYkluc3BlY3RvckNsaWVu
dDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yN2MzZWUxNDJlMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgR3JhcGhp
Y3NMYXllcjsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBQYWdlT3ZlcmxheTsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5
ZXJDbGllbnQ7CisKK2NsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitmcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRv
ckxheWVyQ2xpZW50OworcHVibGljOgorICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7
CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yQ2xpZW50KCk7CisKK3ByaXZhdGU6CisgICAgLy8g
V2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50CisgICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVk
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCkgb3Zl
cnJpZGU7CisKKyAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCogb3BlbkxvY2FsRnJvbnRl
bmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopIG92ZXJyaWRlOworICAgIHZvaWQgYnJp
bmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlc2l6ZU1haW5GcmFt
ZShXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOworCisgICAgdm9pZCBoaWdobGlnaHQoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKSBvdmVycmlkZTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgdm9pZCBzaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRl
OworICAgIHZvaWQgaGlkZUluc3BlY3RvckluZGljYXRpb24oKSBvdmVycmlkZTsKKworICAgIHZv
aWQgZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShib29sKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAg
dm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHRp
bWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKSBvdmVycmlkZTsKKworICAgIGJvb2wgb3ZlcnJp
ZGVzU2hvd1BhaW50UmVjdHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAg
dm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8
Ym9vbD4pIGZpbmFsOworCisgICAgLy8gUGFnZU92ZXJsYXk6OkNsaWVudAorICAgIHZvaWQgd2ls
bE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29y
ZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgYm9vbCBtb3VzZUV2ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29u
c3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFu
aW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworCisg
ICAgV2ViUGFnZSogbV9wYWdlOworICAgIFdlYkNvcmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdo
dE92ZXJsYXk7CisgICAgCisgICAgUmVmUHRyPFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50
UmVjdE92ZXJsYXk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNs
aWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50OworICAgIEhhc2hTZXQ8UmVmPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+PiBtX3BhaW50UmVjdExheWVyczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTg5ZTk4MjVhZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JG
cm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRTdGF0ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JGcm9udGVu
ZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQor
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6cmVzZXQoKQoreworICAg
IG1fZnJvbnRlbmRMb2FkZWQgPSBmYWxzZTsKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworICAg
IG1fcXVldWUuY2xlYXIoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXI6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBtX2Zyb250ZW5kTG9hZGVkID0gdHJ1ZTsK
KworICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OnN1c3BlbmQoKQoreworICAgIEFTU0VSVChtX2Zyb250
ZW5kTG9hZGVkKTsKKyAgICBBU1NFUlQoIW1fc3VzcGVuZGVkKTsKKyAgICBBU1NFUlQobV9xdWV1
ZS5pc0VtcHR5KCkpOworCisgICAgbV9zdXNwZW5kZWQgPSB0cnVlOworfQorCit2b2lkIFdlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6dW5zdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQo
bV9zdXNwZW5kZWQpOworCisgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKKworICAgIGV2YWx1YXRl
UXVldWVkRXhwcmVzc2lvbnMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURp
c3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpCit7CisgICAg
ZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQ
SS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCJdKSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNv
bW1hbmQsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhw
cmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBj
b21tYW5kLCAiXCIsIFwiIiwgYXJndW1lbnQsICJcIl0pIikpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZCwgYm9vbCBhcmd1bWVudCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9u
KG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQs
ICJcIiwgIiwgYXJndW1lbnQgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiXSkiKSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaE1lc3NhZ2VBc3luYyhj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbiht
YWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaE1lc3NhZ2VBc3luYygiLCBt
ZXNzYWdlLCAiKSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNo
ZXI6OmV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQor
eworICAgIGlmICghbV9mcm9udGVuZExvYWRlZCB8fCBtX3N1c3BlbmRlZCkgeworICAgICAgICBt
X3F1ZXVlLmFwcGVuZChleHByZXNzaW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2Uo
KS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7CisgICAgbV9wYWdlLmNvcmVQYWdl
KCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihl
eHByZXNzaW9uKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6
OmV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKQoreworICAgIGlmIChtX3F1ZXVlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24g
OiBtX3F1ZXVlKSB7CisgICAgICAgIEFTU0VSVCghbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLnNjcmlwdCgpLmlzUGF1c2VkKCkpOworICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Np
b24pOworICAgIH0KKworICAgIG1fcXVldWUuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjVjNDI0ZTJkODcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsK
KworY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOworCisgICAgdm9p
ZCByZXNldCgpOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHZvaWQgc3VzcGVu
ZCgpOworICAgIHZvaWQgdW5zdXNwZW5kKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmQpOworICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0
cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdm9pZCBkaXNwYXRj
aENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsKKyAgICB2b2lk
IGRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYpOworICAg
IHZvaWQgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOworCisgICAgV2ViUGFnZSYgbV9wYWdl
OworICAgIERlcXVlPFN0cmluZz4gbV9xdWV1ZTsKKyAgICBib29sIG1fZnJvbnRlbmRMb2FkZWQg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzAxNzg1MWY2ODcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5oIgorCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvbW1vblZNLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworUmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IFdlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcik7Cit9CisKK1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXI6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIo
KQorICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIikpCit7Cit9CisKK1dlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXI6On5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCkKK3sKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCit7CisgICAgY29ubmVjdGlvbi0+YWRk
V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om5vdGlmeU5lZWREZWJ1
Z2dlckJyZWFrKCkKK3sKKyAgICAvLyBJZiB0aGUgd2ViIHByb2Nlc3MgaGFzIG5vdCBiZWVuIGZ1
bGx5IGluaXRpYWxpemVkIHlldCwgdGhlbiB0aGVyZQorICAgIC8vIGlzIG5vIFZNIHRvIGJlIG5v
dGlmaWVkIGFuZCB0aHVzIG5vIGluZmluaXRlIGxvb3AgdG8gYnJlYWsuIEJhaWwgb3V0LgorICAg
IGlmICghV2ViQ29yZTo6Y29tbW9uVk1Pck51bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SlNDOjpWTSYgdm0gPSBXZWJDb3JlOjpjb21tb25WTSgpOworICAgIHZtLm5vdGlmeU5lZWREZWJ1
Z2dlckJyZWFrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZDhmNmJkMDIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaApAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJl
Y2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXI+IGNyZWF0ZSgpOworICAgIH5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
KCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24q
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigp
OworICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgorICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpOworICAg
IAorICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTg3MGU1MmI3M2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyNSBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBX
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIHsKKyAgICBOb3RpZnlOZWVkRGVidWdnZXJC
cmVhaygpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclVJLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yVUkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4xZmFhNmY2ZWRlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCkBAIC0wLDAgKzEsNDExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUku
aCIKKworI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYklu
c3BlY3Rvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8V2Vi
SW5zcGVjdG9yVUk+IFdlYkluc3BlY3RvclVJOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JVSShwYWdlKSk7Cit9CisKK1dlYklu
c3BlY3RvclVJOjpXZWJJbnNwZWN0b3JVSShXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBh
Z2UpCisgICAgLCBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcihwYWdlKQorICAgICwgbV9kZWJ1Z2dh
YmxlSW5mbyhEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpCit7CisgICAgUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVk
KHRydWUpOworICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0
SW1hZ2VCaXRtYXBFbmFibGVkKHRydWUpOworI2lmIEVOQUJMRShXRUJHTDIpCisgICAgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJHTDJFbmFibGVkKHRydWUp
OworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmVzdGFibGlzaENvbm5lY3Rpb24o
V2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVi
dWdnYWJsZUluZm9EYXRhJiBkZWJ1Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVk
IGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyID0gaW5z
cGVjdGVkUGFnZUlkZW50aWZpZXI7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IGRlYnVnZ2FibGVJ
bmZvOworICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OworICAgIG1faW5zcGVjdGlvbkxldmVs
ID0gaW5zcGVjdGlvbkxldmVsOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIucmVzZXQo
KTsKKworICAgIG1fZnJvbnRlbmRDb250cm9sbGVyID0gJm1fcGFnZS5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCk7CisgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KHRoaXMpOworCisgICAgdXBkYXRlQ29ubmVjdGlvbigpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclVJOjp1cGRhdGVDb25uZWN0aW9uKCkKK3sKKyAgICBpZiAobV9iYWNr
ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRl
KCk7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKworI2lm
IFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlvbjo6U29ja2V0UGFp
ciBzb2NrZXRQYWlyID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVQbGF0Zm9ybUNvbm5lY3Rpb24o
KTsKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIo
c29ja2V0UGFpci5zZXJ2ZXIpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50
UG9ydChzb2NrZXRQYWlyLmNsaWVudCk7CisjZWxpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0
X3QgbGlzdGVuaW5nUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworICAgIGlmIChtYWNoX3BvcnRfYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5p
bmdQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBpZiAobWFj
aF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0
ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkgIT0gS0VSTl9TVUNDRVNTKQorICAg
ICAgICBDUkFTSCgpOworCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rp
b25JZGVudGlmaWVyKGxpc3RlbmluZ1BvcnQpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0
aW9uQ2xpZW50UG9ydChsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7Cisj
ZWxpZiBQTEFURk9STShXSU4pCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5l
Y3Rpb25JZGVudGlmaWVyLCBjb25uQ2xpZW50OworICAgIElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRl
U2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGll
bnQpOworICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChjb25uQ2xpZW50
KTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKKwor
I2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhEQVJXSU4pIHx8IFBMQVRGT1JNKFdJ
TikKKyAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2
ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7CisgICAgbV9iYWNrZW5k
Q29ubmVjdGlvbi0+b3BlbigpOworI2VuZGlmCisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25DbGllbnRQb3J0KSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OndpbmRvd09i
amVjdENsZWFyZWQoKQoreworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9u
dGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKworICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5z
cGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUodGhpcywgbV9wYWdlLmNvcmVQYWdlKCkpOworICAg
IG1fZnJvbnRlbmRIb3N0LT5hZGRTZWxmVG9HbG9iYWxPYmplY3RJbldvcmxkKG1haW5UaHJlYWRO
b3JtYWxXb3JsZCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQo
KQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmZyb250ZW5kTG9hZGVkKCk7CisKKyAg
ICAvLyBUZWxsIHRoZSBuZXcgZnJvbnRlbmQgYWJvdXQgdGhlIGN1cnJlbnQgZG9jayBzdGF0ZS4g
SWYgdGhlIHdpbmRvdyBvYmplY3QKKyAgICAvLyBjbGVhcmVkIGR1ZSB0byBhIHJlbG9hZCwgdGhl
IGRvY2sgc3RhdGUgd29uJ3QgYmUgcmVzZW50IGZyb20gVUlQcm9jZXNzLgorICAgIHNldERvY2tp
bmdVbmF2YWlsYWJsZShtX2RvY2tpbmdVbmF2YWlsYWJsZSk7CisgICAgc2V0RG9ja1NpZGUobV9k
b2NrU2lkZSk7CisgICAgc2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKTsKKworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpGcm9udGVuZExvYWRlZCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKKworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
OjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpT
dGFydFdpbmRvd0RyYWcoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZs
b2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVj
dCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5j
aHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJy
aW5nVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKworICAgIGlmICht
X2JhY2tlbmRDb25uZWN0aW9uKSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFs
aWRhdGUoKTsKKyAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKG1fZnJvbnRlbmRDb250cm9sbGVyKSB7CisgICAgICAgIG1fZnJvbnRlbmRDb250
cm9sbGVyLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9m
cm9udGVuZENvbnRyb2xsZXIgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2Zyb250ZW5k
SG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKworICAg
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIgPSB7IH07CisgICAgbV91bmRlclRlc3QgPSBmYWxz
ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKK3sKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKK3sKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKK30KKworV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBXZWJJbnNwZWN0
b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQor
eworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKKyAgICBz
d2l0Y2ggKHNpZGUpIHsKKyAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKKyAgICAgICAgd2Vi
UHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKKyAgICAgICAgd2ViUHJvY2Vzcy5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6QXR0YWNoUmlnaHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6CisgICAgICAgIHdlYlByb2Nlc3MucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0
dGFjaExlZnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNo
Qm90dG9tKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUp
Cit7CisgICAgQVNDSUlMaXRlcmFsIHNpZGVTdHJpbmcgeyBBU0NJSUxpdGVyYWw6Om51bGwoKSB9
OworCisgICAgc3dpdGNoIChzaWRlKSB7CisgICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Cisg
ICAgICAgIHNpZGVTdHJpbmcgPSAidW5kb2NrZWQiX3M7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBEb2NrU2lkZTo6UmlnaHQ6CisgICAgICAgIHNpZGVTdHJpbmcgPSAicmlnaHQiX3M7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKKyAgICAgICAgc2lkZVN0
cmluZyA9ICJsZWZ0Il9zOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRG9ja1NpZGU6OkJv
dHRvbToKKyAgICAgICAgc2lkZVN0cmluZyA9ICJib3R0b20iX3M7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIG1fZG9ja1NpZGUgPSBzaWRlOworCisgICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NrU2lkZSJfcywgU3RyaW5nKHNpZGVTdHJpbmcp
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wg
dW5hdmFpbGFibGUpCit7CisgICAgbV9kb2NraW5nVW5hdmFpbGFibGUgPSB1bmF2YWlsYWJsZTsK
KworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2lu
Z1VuYXZhaWxhYmxlIl9zLCB1bmF2YWlsYWJsZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6
OnNldElzVmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9pc1Zpc2libGUgPSB2aXNpYmxl
OworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zp
c2libGUiX3MsIHZpc2libGUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hl
ZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNl
dFNoZWV0UmVjdChyZWN0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBp
ZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6Ok9wZW5Jbk5ld1RhYih1cmwpLCAwKTsKKyAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQo
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgfQorfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjpzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKK3sKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFz
ZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSTo6YXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjpJbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2Vy
dGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9v
bCBXZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0
dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxl
ZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURp
Y3Rpb25hcnkmIGRpY3Rpb25hcnkpCit7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5
KGV2ZW50TmFtZSwgIldlYiBJbnNwZWN0b3IgRnJvbnRlbmQgRGlhZ25vc3RpY3MiX3MsIGRpY3Rp
b25hcnksIFNob3VsZFNhbXBsZTo6Tm8pOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzZXRE
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyAgICAvLyBJbnNw
ZWN0b3IncyBkaWFnbm9zdGljIGxvZ2dpbmcgY2xpZW50IHNob3VsZCBuZXZlciBiZSB1c2VkIHVu
bGVzcyB0aGUgcGFnZSBzZXR0aW5nIGlzIGFsc28gZW5hYmxlZC4KKyAgICBBU1NFUlQoIWF2YWls
YWJsZSB8fCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkpOworICAgIG1fZGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUgPSBhdmFpbGFibGU7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hl
ci5kaXNwYXRjaENvbW1hbmQoInNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIl9zLCBtX2Rp
YWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkluc3BlY3Rv
clVJOjpzaG93Q29uc29sZSgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJzaG93Q29uc29sZSJfcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNo
b3dSZXNvdXJjZXMoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29t
bWFuZCgic2hvd1Jlc291cmNlcyJfcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcikKK3sKKyAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dNYWluUmVzb3Vy
Y2VGb3JGcmFtZSJfcywgZnJhbWVJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5k
aXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywgdHJ1ZSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5lUHJvZmlsaW5n
RW5hYmxlZCJfcywgZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydEVsZW1l
bnRTZWxlY3Rpb24oKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29t
bWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVuYWJsZWQiX3MsIHRydWUpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJOjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJf
cywgZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmlu
ZyYgdXJsKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgi
c2F2ZWRVUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChj
b25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRj
aENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VQYXVzZWQoKQoreworICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLnN1c3BlbmQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVVu
cGF1c2VkKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci51bnN1c3BlbmQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZW5kTWVzc2Fn
ZVRvQmFja2VuZChtZXNzYWdlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK1N0
cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQbGF0Zm9ybU5hbWU7Cit9CisKK1N0cmluZyBX
ZWJJbnNwZWN0b3JVSTo6dGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRCdWlsZFZlcnNpb247Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JVSTo6dGFyZ2V0UHJvZHVjdFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2Rl
YnVnZ2FibGVJbmZvLnRhcmdldFByb2R1Y3RWZXJzaW9uOworfQorCisjaWYgIVBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKK2Jvb2wgV2ViSW5zcGVjdG9y
VUk6OmNhblNhdmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9
CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JN
KFdJTikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjYzOWYyMWM5YjYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5oCkBAIC0wLDAgKzEs
MTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kSG9zdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworY2xh
c3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsK
KworY2xhc3MgV2ViSW5zcGVjdG9yVUkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJJbnNwZWN0b3JV
ST4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQsIHB1YmxpYyBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0
b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRl
ZCBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAg
Ly8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYpIG92ZXJyaWRlIHsgLyogRG8gbm90aGluZywgdGhlIGluc3BlY3RlZCBwYWdlIHByb2Nl
c3MgbWF5IGhhdmUgY3Jhc2hlZCBhbmQgbWF5IGJlIGdldHRpbmcgcmVwbGFjZWQuICovIH0KKyAg
ICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2VXaW5k
b3coKTsgfQorCisgICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCisgICAg
dm9pZCBlc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYsIGJvb2wgdW5kZXJUZXN0
LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOworICAgIHZvaWQgdXBkYXRlQ29ubmVjdGlvbigp
OworCisgICAgdm9pZCBzaG93Q29uc29sZSgpOworICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOwor
CisgICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlk
ZW50aWZpZXIpOworCisgICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0
b3BQYWdlUHJvZmlsaW5nKCk7CisKKyAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVjdGlvbigpOwor
ICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIHZvaWQgYXR0YWNoZWRCb3R0
b20oKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpCb3R0b20pOyB9CisgICAgdm9pZCBhdHRhY2hl
ZFJpZ2h0KCkgeyBzZXREb2NrU2lkZShEb2NrU2lkZTo6UmlnaHQpOyB9CisgICAgdm9pZCBhdHRh
Y2hlZExlZnQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpMZWZ0KTsgfQorICAgIHZvaWQgZGV0
YWNoZWQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpVbmRvY2tlZCk7IH0KKworICAgIHZvaWQg
c2V0RG9ja1NpZGUoRG9ja1NpZGUpOworICAgIHZvaWQgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJv
b2wpOworCisgICAgdm9pZCBzZXRJc1Zpc2libGUoYm9vbCk7CisKKyAgICB2b2lkIGRpZFNhdmUo
Y29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJs
KTsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOworCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZShib29sIGF2YWxpYWJsZSk7CisjZW5kaWYKKworICAgIC8vIFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50CisgICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVuZExvYWRlZCgpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9h
dCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNSZW1vdGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBmYWxzZTsgfQorICAgIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1
Z2dhYmxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5
cGU6OldlYlBhZ2U7IH0KKyAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5z
cGVjdGlvbkxldmVsOyB9CisKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpIG92ZXJyaWRlOworICAg
IHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlb3BlbigpIG92ZXJyaWRl
OworICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6VXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgY2hhbmdlU2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwp
IG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZl
KGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29s
IGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOworICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50KSBv
dmVycmlkZTsKKworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8mKSBvdmVycmlkZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQor
ICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOworICAgIGJvb2wg
ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlOyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3Qg
V1RGOjpTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHNl
bmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdm9pZCBw
YWdlUGF1c2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWdlVW5wYXVzZWQoKSBvdmVycmlkZTsK
KworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBtX3VuZGVyVGVzdDsg
fQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclVJKFdlYlBhZ2UmKTsKKwor
ICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNo
ZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7CisgICAgUmVmUHRyPElQQzo6Q29ubmVjdGlv
bj4gbV9iYWNrZW5kQ29ubmVjdGlvbjsKKworICAgIC8vIEtlZXAgYSBwb2ludGVyIHRvIHRoZSBm
cm9udGVuZCdzIGluc3BlY3RvciBjb250cm9sbGVyIHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2gK
KyAgICAvLyBjb3JlUGFnZSgpLCBzaW5jZSB3ZSBtYXkgbmVlZCBpdCBhZnRlciB0aGUgZnJvbnRl
bmQncyBwYWdlIGhhcyBzdGFydGVkIGRlc3RydWN0aW9uLgorICAgIFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXIqIG1fZnJvbnRlbmRDb250cm9sbGVyIHsgbnVsbHB0ciB9OworCisgICAgV2Vi
UGFnZVByb3h5SWRlbnRpZmllciBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyOworICAgIGJvb2wg
bV91bmRlclRlc3QgeyBmYWxzZSB9OworICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2Fi
bGVJbmZvOworICAgIGJvb2wgbV9kb2NraW5nVW5hdmFpbGFibGUgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZ
KQorICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07CisjZW5k
aWYKKworICAgIERvY2tTaWRlIG1fZG9ja1NpZGUgeyBEb2NrU2lkZTo6VW5kb2NrZWQgfTsKKyAg
ICB1bnNpZ25lZCBtX2luc3BlY3Rpb25MZXZlbCB7IDEgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjk0ZjEzODVkNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpAQCAt
MCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJIHsKKyAgICBFc3RhYmxpc2hDb25uZWN0aW9u
KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwg
c3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBib29sIHVu
ZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQorICAgIFVwZGF0ZUNvbm5lY3Rpb24o
KQorCisgICAgQXR0YWNoZWRCb3R0b20oKQorICAgIEF0dGFjaGVkUmlnaHQoKQorICAgIEF0dGFj
aGVkTGVmdCgpCisgICAgRGV0YWNoZWQoKQorICAgIFNldERvY2tpbmdVbmF2YWlsYWJsZShib29s
IHVuYXZhaWxhYmxlKQorICAgIFNldElzVmlzaWJsZShib29sIHZpc2libGUpCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisgICAgU2hvd0NvbnNvbGUoKQorICAgIFNob3dS
ZXNvdXJjZXMoKQorCisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmluZyBmcmFtZUlk
ZW50aWZpZXIpCisKKyAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQorICAgIFN0b3BQYWdlUHJvZmls
aW5nKCkKKworICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCisgICAgU3RvcEVsZW1lbnRTZWxl
Y3Rpb24oKQorCisgICAgRGlkU2F2ZShTdHJpbmcgdXJsKQorICAgIERpZEFwcGVuZChTdHJpbmcg
dXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFn
ZUluc3BlY3RvclRhcmdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmE3MGY2ZmQ1MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKworI2luY2x1
ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0KFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKK3sKK30KKworU3Ry
aW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIoKSBjb25zdAoreworICAgIHJl
dHVybiB0b1RhcmdldElEKG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQoreworICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NoYW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWw+KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7
CisgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKK30KKwor
dm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1f
Y2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKKyAg
ICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0
RnJvbnRlbmQoKm1fY2hhbm5lbCk7CisgICAgbV9jaGFubmVsLnJlc2V0KCk7Cit9CisKK3ZvaWQg
V2ViUGFnZUluc3BlY3RvclRhcmdldDo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKKyAgICAgICAg
bV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VG
cm9tRnJvbnRlbmQobWVzc2FnZSk7Cit9CisKK1N0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Ojp0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKK3sKKyAgICByZXR1
cm4gbWFrZVN0cmluZygicGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Cit9CisKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi42Y2JkN2ZhZDVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRh
cmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7
CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOworCitjbGFzcyBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKKyAgICB+V2ViUGFnZUluc3BlY3RvclRh
cmdldCgpID0gZGVmYXVsdDsKKworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBl
OjpQYWdlOyB9CisKKyAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5k
TWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHN0
YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CisKK3ByaXZh
dGU6CisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBtX2NoYW5uZWw7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY5MDE3YzRlZGFmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBh
Z2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fcGFnZVRhcmdldChwYWdlKQoreworICAg
IC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRhcmdldCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2Vi
UGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlzIGZvciB1cy4KKyAgICBtX3RhcmdldHMuc2V0KG1f
cGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZtX3BhZ2VUYXJnZXQpOworfQorCitXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
KCkKK3sKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFy
Z2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCit7CisgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyKCksICZ0YXJnZXQpOworICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICBt
X3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQo
dGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0LnR5cGUoKSkpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVu
dGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1v
dmUgdGhlIG1haW4gdGFyZ2V0LiIpOworCisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpKSk7CisK
KyAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFy
Z2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQt
PmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQp
Cit7CisgICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKKyAgICBpZiAo
IXRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Cit9
CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlm
ICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9U
YXJnZXRCYWNrZW5kKG1lc3NhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uN2M5MzFkYWQxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmKTsKKyAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0Jik7CisgICAgdm9pZCByZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXQmKTsKKworICAgIHZvaWQgY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElk
LCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOworICAgIHZvaWQg
ZGlzY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICB2b2lkIHNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9wYWdlVGFyZ2V0OworICAgIEhhc2hNYXA8U3RyaW5nLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCo+IG1fdGFyZ2V0czsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUxYjVmNzEz
NzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlv
blR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fdGFyZ2V0SWQodGFyZ2V0SWQpCisg
ICAgLCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKQoreworfQorCit2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3Nh
Z2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi44MTg0YWM1YmRhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKTsKK3B1Ymxp
YzoKKyAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGUpOworICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgQ29ubmVjdGlvblR5cGUgY29ubmVj
dGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9Cisg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVy
cmlkZTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBTdHJpbmcgbV90YXJnZXRJZDsKKyAg
ICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9u
VHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3Rl
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmI0Zjk3ZmU4ZDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJ
bnNwZWN0b3JVSUd0ay5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JV
SS5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJLmgiCisKKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNh
blNhdmUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6
OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoInJlc291
cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxp
emVkU3RyaW5ncy5qcyIpOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2Fs
aXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8v
L29yZy93ZWJraXQvaW5zcGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcyIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjllNTVmM2Q1OGExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMv
V2ViSW5zcGVjdG9yVUlNYWMubW0KQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVSS5oIgorI2ltcG9ydCAi
UmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQoreworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgU3RyaW5nIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5n
c1VSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRl
bnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOworICAgIGlmICghYnVuZGxlKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUg
cGF0aEZvclJlc291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMiXTsKKyAgICBp
ZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAKKyAgICByZXR1cm4gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsK
K30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisK
K1N0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDY4
MDE5ZWY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFJlcGFpbnRJbmRpY2F0
b3JMYXllckNsaWVudCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZXBhaW50SW5kaWNhdG9yTGF5
ZXJDbGllbnQoV2ViSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQpCi0gICAgICAgIDog
bV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQotICAgIHsKLSAgICB9Ci0gICAgdmly
dHVhbCB+UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KCkgeyB9Ci1wcml2YXRlOgotICAgIHZv
aWQgbm90aWZ5QW5pbWF0aW9uRW5kZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2luc3BlY3RvckNsaWVudC5hbmlt
YXRpb25FbmRlZEZvckxheWVyKGxheWVyKTsKLSAgICB9Ci0gICAgCi0gICAgV2ViSW5zcGVjdG9y
Q2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLX07Ci0KLVdlYkluc3BlY3RvckNsaWVudDo6V2Vi
SW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAs
IG1faGlnaGxpZ2h0T3ZlcmxheShudWxscHRyKQotewotfQotCi1XZWJJbnNwZWN0b3JDbGllbnQ6
On5XZWJJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX3BhaW50
UmVjdExheWVycykKLSAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAKLSAg
ICBtX3BhaW50UmVjdExheWVycy5jbGVhcigpOwotCi0gICAgaWYgKG1fcGFpbnRSZWN0T3Zlcmxh
eSAmJiBtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFn
ZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3Zl
cmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQotewotICAgIGlmIChXZWJJbnNwZWN0
b3IqIGluc3BlY3RvciA9IG1fcGFnZS0+aW5zcGVjdG9yKFdlYlBhZ2U6OkxhenlDcmVhdGlvblBv
bGljeTo6VXNlRXhpc3RpbmdPbmx5KSkKLSAgICAgICAgaW5zcGVjdG9yLT5jbG9zZSgpOwotCi0g
ICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpmcm9udGVuZENv
dW50Q2hhbmdlZCh1bnNpZ25lZCBjb3VudCkKLXsKLSAgICBtX3BhZ2UtPmluc3BlY3RvckZyb250
ZW5kQ291bnRDaGFuZ2VkKGNvdW50KTsKLX0KLQotSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwq
IFdlYkluc3BlY3RvckNsaWVudDo6b3BlbkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxl
ciogY29udHJvbGxlcikKLXsKLSAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5vcGVuTG9jYWxJbnNw
ZWN0b3JGcm9udGVuZChjb250cm9sbGVyLT5pc1VuZGVyVGVzdCgpKTsKLQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YnJpbmdGcm9udGVuZFRvRnJv
bnQoKQotewotICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICBtX3BhZ2UtPmlu
c3BlY3RvcigpLT5icmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OmRpZFJlc2l6ZU1haW5GcmFtZShGcmFtZSopCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9y
KCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxp
dHkoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCi17Ci0gICAg
aWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAgYXV0byBoaWdobGlnaHRP
dmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgICAgIG1faGlnaGxpZ2h0
T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJsYXkucHRyKCk7Ci0gICAgICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KFdURk1vdmUo
aGlnaGxpZ2h0T3ZlcmxheSksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7Ci0gICAgICAg
IG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOwotICAgICAg
ICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwotICAgIH0KLSNlbHNlCi0g
ICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpD
b29yZGluYXRlU3lzdGVtOjpEb2N1bWVudCk7Ci0gICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySGln
aGxpZ2h0KGhpZ2hsaWdodCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OmhpZGVIaWdobGlnaHQoKQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmICht
X2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1faGlnaGxpZ2h0T3ZlcmxheSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLSNlbHNlCi0gICAgbV9wYWdlLT5oaWRlSW5z
cGVjdG9ySGlnaGxpZ2h0KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Ci0gICAg
ICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMsIFBhZ2VP
dmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAgICAgICBtX3BhZ2UtPmNvcmVQYWdl
KCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgqbV9wYWludFJl
Y3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCi0gICAgICAgIG1fcGFpbnRJbmRp
Y2F0b3JMYXllckNsaWVudCA9IG1ha2VVbmlxdWU8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50
PigqdGhpcyk7Ci0KLSAgICBhdXRvIHBhaW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUo
bV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqbV9wYWludElu
ZGljYXRvckxheWVyQ2xpZW50KTsKLSAgICAKLSAgICBwYWludExheWVyLT5zZXROYW1lKCJwYWlu
dCByZWN0Iik7Ci0gICAgcGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkp
OwotICAgIHBhaW50TGF5ZXItPnNldFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7Ci0gICAgcGFp
bnRMYXllci0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0QmFja2dy
b3VuZENvbG9yKENvbG9yKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKLQotICAgIEtleWZyYW1l
VmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgIGZh
ZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMCwgMSkp
OwotCi0gICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZh
bHVlPigwLjI1LCAwKSk7Ci0gICAgCi0gICAgYXV0byBvcGFjaXR5QW5pbWF0aW9uID0gQW5pbWF0
aW9uOjpjcmVhdGUoKTsKLSAgICBvcGFjaXR5QW5pbWF0aW9uLT5zZXREdXJhdGlvbigwLjI1KTsK
LQotICAgIHBhaW50TGF5ZXItPmFkZEFuaW1hdGlvbihmYWRlS2V5ZnJhbWVzLCBGbG9hdFNpemUo
KSwgb3BhY2l0eUFuaW1hdGlvbi5wdHIoKSwgIm9wYWNpdHkiX3MsIDApOwotICAgIAotICAgIEdy
YXBoaWNzTGF5ZXImIHJhd0xheWVyID0gcGFpbnRMYXllci5nZXQoKTsKLSAgICBtX3BhaW50UmVj
dExheWVycy5hZGQoV1RGTW92ZShwYWludExheWVyKSk7Ci0KLSAgICBHcmFwaGljc0xheWVyJiBv
dmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5sYXllcigpOwotICAgIG92ZXJs
YXlSb290TGF5ZXIuYWRkQ2hpbGQocmF3TGF5ZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6YW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXllcikK
LXsKLSAgICBHcmFwaGljc0xheWVyKiBub25Db25zdExheWVyID0gY29uc3RfY2FzdDxHcmFwaGlj
c0xheWVyKj4obGF5ZXIpOwotICAgIG5vbkNvbnN0TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
LSAgICBtX3BhaW50UmVjdExheWVycy5yZW1vdmUoKm5vbkNvbnN0TGF5ZXIpOwotfQotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93SW5zcGVj
dG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUluc3BlY3RvckluZGljYXRpb24o
KQotewotICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQot
ewotICAgIGlmIChlbmFibGVkKQotICAgICAgICBtX3BhZ2UtPmVuYWJsZUluc3BlY3Rvck5vZGVT
ZWFyY2goKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFnZS0+ZGlzYWJsZUluc3BlY3Rvck5vZGVT
ZWFyY2goKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZWxlbWVudFNl
bGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9y
KCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2Vk
KGFjdGl2ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVJlY29yZGlu
Z0NoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0g
ICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChhY3Rp
dmUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0TW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1fcGFn
ZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnNldE1vY2tDYXB0
dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKLXsKLSAg
ICBpZiAocGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBp
cyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCi0gICAgQVNTRVJUKG1f
aGlnaGxpZ2h0T3ZlcmxheSk7Ci0gICAgbV9oaWdobGlnaHRPdmVybGF5ID0gbnVsbHB0cjsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQ
YWdlKikKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VPdmVy
bGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiAvKmRpcnR5UmVjdCovKQotewotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7Ci19Ci0KLWJvb2wgV2ViSW5z
cGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
N2MzZWUxNDJlMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NMYXllcjsKLWNsYXNzIEludFJlY3Q7Ci1j
bGFzcyBQYWdlT3ZlcmxheTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBh
Z2U7Ci1jbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0KLWNsYXNzIFdlYkluc3Bl
Y3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2Vi
Q29yZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1mcmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwotcHVibGljOgotICAg
IFdlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVjdG9y
Q2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50Ci0g
ICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9u
dGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0KLSAgICBJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbCogb3BlbkxvY2FsRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlciopIG92ZXJyaWRlOwotICAgIHZvaWQgYnJpbmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpZFJlc2l6ZU1haW5GcmFtZShXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBoaWdobGlnaHQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZGVIaWdobGln
aHQoKSBvdmVycmlkZTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzaG93
SW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUluc3BlY3Rvcklu
ZGljYXRpb24oKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShi
b29sKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdl
ZChib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29s
KSBvdmVycmlkZTsKLQotICAgIGJvb2wgb3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURl
dmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pIGZpbmFsOwotCi0gICAgLy8gUGFn
ZU92ZXJsYXk6OkNsaWVudAotICAgIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRNb3ZlVG9QYWdl
KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBtb3VzZUV2
ZW50KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2
ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotCi0gICAgV2ViUGFnZSogbV9wYWdlOwotICAgIFdl
YkNvcmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7Ci0gICAgCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVy
Q2xpZW50OwotICAgIEhhc2hTZXQ8UmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX3BhaW50
UmVjdExheWVyczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NThkOGYwYzI0Ni4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9y
VUkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQotI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1v
dGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ2hy
b21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotI2lmICFQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlbW90ZVdlYkluc3BlY3RvclVJKHBhZ2UpKTsKLX0KLQotUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OlJlbW90ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFn
ZSkKLSAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCi17Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRhJiYgZGVidWdn
YWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQotewotICAgIG1fZGVi
dWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKLSAgICBtX2JhY2tlbmRDb21t
YW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKLQotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7Ci0K
LSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOwotICAgIG1fZnJvbnRlbmRBUElE
aXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB0cnVl
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcm
IHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNh
dmVkVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRBcHBl
bmQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlz
cGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1l
c3NhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFj
a2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRp
ZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xl
YXJlZCgpCi17Ci0gICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5kSG9z
dC0+ZGlzY29ubmVjdENsaWVudCgpOwotCi0gICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7Ci0gICAgbV9mcm9u
dGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgp
Ci17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKLQotICAg
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9z
LCB0cnVlKTsKLQotICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1fcGFn
ZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdGFydFdp
bmRvd0RyYWcoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTdGFy
dFdpbmRvd0RyYWcoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIEZsb2F0
UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgp
OwotICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJv
bWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KLVdlYkNvcmU6OlVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpicmluZ1RvRnJvbnQoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKLXsKLSAgICBtX3BhZ2UuY29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxw
dHIpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kRGlk
Q2xvc2UoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnJlb3BlbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlJlb3BlbigpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3VGFiKHVybCksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzYXZl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3Jj
ZVNhdmVBcyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250
ZW50KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmls
ZW5hbWUsIGNvbnRlbnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKLXsKLSAgICAvLyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2FuIGtub3cgaWYgdGhl
IG1haW4gcmVzb3VyY2UgY2hhbmdlZC4KLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUo
Y2VydGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLUluc3BlY3Rvcjo6
RGVidWdnYWJsZVR5cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2FibGVUeXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxlVHlwZTsKLX0KLQot
U3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKLX0KLQot
U3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKLX0KLQot
U3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Ci19
Ci0KLWJvb2wgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxhdG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVsYXRvcjsKLX0KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JV
STo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCi17Ci0gICAgcmV0dXJuIG1fcGFnZS5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBl
dmVudE5hbWUsICBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5
JiBkaWN0aW9uYXJ5KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5h
bWUsICJSZW1vdGUgV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlv
bmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotICAgIC8v
IEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVz
ZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgotICAgIEFTU0VSVCgh
YXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7Ci0gICAgbV9kaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3Ms
IG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOwotfQotI2VuZGlmCi0KLSNpZiAhUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotU3RyaW5nIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotI2VuZGlmIC8vICFQ
TEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI0YWUxYzFkYWExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkRlYnVnZ2Fi
bGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kSG9zdC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JV
SSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclVJPiwgcHVibGlj
IElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IGNy
ZWF0ZShXZWJQYWdlJik7Ci0KLSAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0ZWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8v
IENhbGxlZCBieSBSZW1vdGVXZWJJbnNwZWN0b3JVSSBtZXNzYWdlcwotICAgIHZvaWQgaW5pdGlh
bGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNV
UkwpOwotICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBkaWRB
cHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAg
dm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKLSNlbmRpZgotCi0gICAg
Ly8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKLSAgICB2b2lkIHdpbmRvd09iamVj
dENsZWFyZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKLSAgICB2b2lkIG1v
dmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNSZW1v
dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgU3RyaW5nIGxvY2FsaXplZFN0
cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJM
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KLSAgICBJbnNw
ZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgU3RyaW5nIHRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmlu
ZyB0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0
UHJvZHVjdFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHRhcmdldElzU2ltdWxh
dG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZVdpbmRv
dygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNl
dFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcm
IHVybCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tl
bmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVN
RVRSWSkKLSAgICBib29sIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSBvdmVycmlkZTsKLSAg
ICBib29sIGRpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZTsgfQotICAgIHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50
KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIGJvb2wg
Y2FuU2F2ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlzVW5kZXJUZXN0
KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2
ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAxOyB9Ci0gICAgdm9pZCByZXF1ZXN0U2V0RG9j
a1NpZGUoRG9ja1NpZGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdlQXR0YWNoZWRX
aW5kb3dXaWR0aCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgUmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdl
OwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zy
b250ZW5kSG9zdDsKLSAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgbV9kZWJ1Z2dhYmxlSW5mbzsKLSAg
ICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKLSAgICBib29sIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUgeyBmYWxzZSB9
OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9y
VUkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZjdlNGM4Nzhk
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAg
QEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdl
cyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JVSSB7Ci0gICAgSW5pdGlhbGl6ZShzdHJ1Y3QgV2ViS2l0
OjpEZWJ1Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIFN0cmluZyBiYWNrZW5kQ29tbWFu
ZHNVUkwpCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBTZXREaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLSNlbmRpZgotCi0gICAgRGlkU2F2
ZShTdHJpbmcgdXJsKQotICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQotCi0gICAgU2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDMzMjI1ZDEzZGQzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJJbnNwZWN0b3IuaCIKLQotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAi
V2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DaHJv
bWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rv
clBhZ2VBZ2VudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2Uu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1dpbmRvd0ZlYXR1cmVzLmg+Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNo
ZWRIZWlnaHQgPSAyNTA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0
UmF0aW8gPSAwLjc1Owotc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0g
NTAwOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1S
ZWY8V2ViSW5zcGVjdG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBwYWdlKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Ci19Ci0KLVdlYklu
c3BlY3Rvcjo6V2ViSW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkK
LXsKLX0KLQotV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkKLXsKLSAgICBpZiAobV9mcm9u
dGVuZENvbm5lY3Rpb24pCi0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRl
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChi
b29sIHVuZGVyVGVzdCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6T3Blbkxv
Y2FsSW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1fcGFn
ZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250ZW5kQ29u
bmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQotewot
ICAgIC8vIFdlIG1pZ2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlzIHdlYiBwcm9j
ZXNzIGdvdCBzd2FwcGVkIGludG8gYSBXZWJQYWdlUHJveHkKLSAgICAvLyBzaG9ydGx5IGFmdGVy
IGFub3RoZXIgcHJvY2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVjdGlvbi4KLSAgICBpZiAobV9m
cm9udGVuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFs
aWRhdGUoKTsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0K
LQotI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIu
cmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkpOwotI2VsaWYgT1MoREFSV0lOKQotICAgIElQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlv
bklkZW50aWZpZXIucG9ydCgpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgSVBDOjpDb25uZWN0
aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRl
bnRpZmllci5oYW5kbGUoKSk7Ci0jZWxzZQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuOwotI2VuZGlmCi0KLSAgICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFs
aWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Zyb250
ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29ubmVjdGlvbihj
b25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5v
cGVuKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENvbm5lY3Rpb25B
Y3Rpb25zKQotICAgICAgICBjYWxsYmFjaygpOwotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0
aW9ucy5jbGVhcigpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZENvbm5l
Y3Rpb24oKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBt
X3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci0KLSAgICAvLyBJZiB3ZSB0cmllZCB0byBjbG9zZSB0aGUg
ZnJvbnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rpb24gZXhpc3Rz
IHlldC4KLSAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24g
PSBudWxscHRyOwotICAgIH0KLQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVh
cigpOwotCi0gICAgbV9hdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fcHJldmlvdXNDYW5BdHRhY2gg
PSBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UtPmlkZW50
aWZpZXIoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRDb25uZWN0aW9u
RXN0YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQotewotICAgIGlmIChtX2Zy
b250ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVuZChXVEZNb3Zl
KGNhbGxiYWNrKSk7Ci19Ci0KLS8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVzc2FnZXMKLXZv
aWQgV2ViSW5zcGVjdG9yOjpzaG93KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuc2hvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQotewotICAg
IGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDbG9z
ZSBjb3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3duLgotICAgIGlm
ICghbV9mcm9udGVuZENvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsb3NlRnJv
bnRlbmRDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuSW5OZXdUYWIo
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5k
aWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07Ci0KLSAgICBQYWdlKiBpbnNwZWN0ZWRQ
YWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpOwotICAgIGlmICghaW5zcGVjdGVkUGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRnJhbWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGluc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpOwotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7
ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZyYW1lLmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0cmluZyB9LCAi
X2JsYW5rIl9zLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXli
ZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1l
T3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxk
Tm90QWxsb3csIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07Ci0KLSAgICBOYXZpZ2F0
aW9uQWN0aW9uIGFjdGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5pbml0aWF0ZWRC
eU1haW5GcmFtZSgpLCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKLSAgICBQYWdlKiBu
ZXdQYWdlID0gaW5zcGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGluc3BlY3RlZE1h
aW5GcmFtZSwgZnJhbWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24pOwotICAgIGlmICghbmV3UGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbmV3UGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCku
bG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6
OmV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBpZiAo
IW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChz
Y3JpcHQpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQotewotICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3aGVuRnJvbnRl
bmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93Q29uc29sZSgpLCAwKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQotewotICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICB3aGVuRnJvbnRl
bmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93UmVzb3VyY2VzKCksIDApOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1l
KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCi17Ci0gICAgV2ViRnJh
bWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJZGVudGlm
aWVyKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGFn
ZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdlLT5jb3JlUGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgU3RyaW5nIGluc3BlY3RvckZy
YW1lSWRlbnRpZmllciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmVuc3VyZVBhZ2VBZ2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsKLQotICAgIHdo
ZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5k
Q29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dNYWluUmVzb3Vy
Y2VGb3JGcmFtZShpbnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAwKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFtX3Bh
Z2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS0+Y29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5l
Y3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygpLCAwKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5nKCkKLXsKLSAg
ICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYWdl
LT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgd2hlbkZy
b250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25u
ZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQcm9maWxpbmco
KSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVsZW1lbnRTZWxl
Y3Rpb24oKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdGFy
dEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
OjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hl
ZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDApOwotICAgIH0pOwotfQotCi12
b2lkIFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17
Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25DaGFuZ2Vk
KGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6
OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSksIG1fcGFn
ZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnNldE1vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQotewotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3Zl
cnJpZGUoZW5hYmxlZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotYm9vbCBXZWJJbnNw
ZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0IGFsbG93IGF0dGFjaGluZyB0
byBhbm90aGVyIGluc3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2luZG93IGlzIHRv
byBtdWNoIQotICAgIGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFnZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwgYWxsb3cgYXR0
YWNoaW5nIGFnYWluIHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4KLSAgICBpZiAobV9hdHRhY2hl
ZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgYXR0YWNo
IGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZSBtaW5p
bXVtIGluc3BlY3RvciBzaXplLgotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBt
X3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwot
ICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkudmlldygpLT52aXNpYmxlV2lkdGgoKTsKLSAgICB1bnNpZ25lZCBtYXhpbXVtQXR0
YWNoZWRIZWlnaHQgPSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0
UmF0aW87Ci0gICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNo
ZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFnZVdpZHRoOwot
fQotCi12b2lkIFdlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpCi17Ci0g
ICAgaWYgKG1fYXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgY2FuQXR0YWNo
V2luZG93ID0gdGhpcy0+Y2FuQXR0YWNoV2luZG93KCk7Ci0gICAgaWYgKG1fcHJldmlvdXNDYW5B
dHRhY2ggPT0gY2FuQXR0YWNoV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ByZXZp
b3VzQ2FuQXR0YWNoID0gY2FuQXR0YWNoV2luZG93OwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93KSwgbV9w
YWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDI2Yjg5ZTUyMjc3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUlkZW50aWZpZXIu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNz
IFdlYkluc3BlY3RvciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6
OkJ1bmRsZUluc3BlY3Rvcj4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yPiBjcmVhdGUoV2ViUGFnZSopOwotCi0g
ICAgV2ViUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQotCi0gICAgdm9pZCB1
cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7Ci0KLSAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5l
cmF0ZWQgV2ViSW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAg
ICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25u
ZWN0aW9uJikgb3ZlcnJpZGUgeyBjbG9zZSgpOyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KLQotICAgIHZvaWQgc2hvdygpOwot
ICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKTsKLQotICAgIHZvaWQgY2FuQXR0YWNoV2luZG93KGJvb2wmIHJlc3VsdCk7Ci0K
LSAgICB2b2lkIHNob3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0KLSAg
ICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIp
OwotCi0gICAgdm9pZCBzZXRBdHRhY2hlZChib29sIGF0dGFjaGVkKSB7IG1fYXR0YWNoZWQgPSBh
dHRhY2hlZDsgfQotCi0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEZvclRlc3QoY29uc3QgU3RyaW5n
JiBzY3JpcHQpOwotCi0gICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKLSAgICB2b2lkIHN0
b3BQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVjdGlvbigpOwot
ICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKLSAgICB2b2lkIGVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wp
OwotICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFs
PGJvb2w+KTsKLQotICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVu
dCk7Ci0KLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgY2xvc2UoKTsgfQotCi1wcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7Ci0KLSAgICBleHBsaWNp
dCBXZWJJbnNwZWN0b3IoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfldlYkluc3BlY3RvcigpOwot
Ci0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKLQotICAgIC8vIENhbGxlZCBmcm9tIFdlYklu
c3BlY3RvckNsaWVudAotICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCB1
bmRlclRlc3QpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKLQotICAgIHZv
aWQgYnJpbmdUb0Zyb250KCk7Ci0KLSAgICB2b2lkIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3Rh
Ymxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0gICAgV2ViUGFnZSogbV9wYWdlOwotCi0g
ICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9mcm9udGVuZENvbm5lY3Rpb247Ci0gICAgVmVj
dG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9uczsKLQotICAg
IGJvb2wgbV9hdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3ByZXZpb3VzQ2FuQXR0YWNo
IHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmlu
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWY3NGI1ZTZiMC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3Nh
Z2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgot
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3Igewot
ICAgIFNob3coKQotICAgIENsb3NlKCkKLQotICAgIFNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQp
Ci0KLSAgICBTaG93Q29uc29sZSgpCi0gICAgU2hvd1Jlc291cmNlcygpCi0KLSAgICBTaG93TWFp
blJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmll
cikKLQotICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQotCi0gICAgU3RhcnRQYWdlUHJvZmls
aW5nKCkKLSAgICBTdG9wUGFnZVByb2ZpbGluZygpCi0KLSAgICBTdGFydEVsZW1lbnRTZWxlY3Rp
b24oKQotICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLQotICAgIFNldEZyb250ZW5kQ29ubmVj
dGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQ
SURpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYzE4OWU5ODI1YWQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIK
LQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3Jp
cHRTdGF0ZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViSW5zcGVjdG9yRnJvbnRlbmRB
UElEaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYg
cGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6cmVzZXQoKQotewotICAgIG1fZnJvbnRlbmRMb2FkZWQgPSBmYWxz
ZTsKLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotICAgIG1fcXVldWUuY2xlYXIoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmZyb250ZW5kTG9hZGVkKCkK
LXsKLSAgICBtX2Zyb250ZW5kTG9hZGVkID0gdHJ1ZTsKLQotICAgIGV2YWx1YXRlUXVldWVkRXhw
cmVzc2lvbnMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6
OnN1c3BlbmQoKQotewotICAgIEFTU0VSVChtX2Zyb250ZW5kTG9hZGVkKTsKLSAgICBBU1NFUlQo
IW1fc3VzcGVuZGVkKTsKLSAgICBBU1NFUlQobV9xdWV1ZS5pc0VtcHR5KCkpOwotCi0gICAgbV9z
dXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlcjo6dW5zdXNwZW5kKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kZWQpOwotCi0gICAgbV9z
dXNwZW5kZWQgPSBmYWxzZTsKLQotICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpCi17Ci0gICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lv
bihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5k
LCAiXCJdKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6
OmRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgYXJn
dW1lbnQpCi17Ci0gICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNw
ZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCIsIFwiIiwgYXJndW1l
bnQsICJcIl0pIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBhcmd1bWVudCkK
LXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZy
b250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgIiwgYXJndW1lbnQgPyAidHJ1
ZSIgOiAiZmFsc2UiLCAiXSkiKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyOjpkaXNwYXRjaE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9u
dGVuZEFQSS5kaXNwYXRjaE1lc3NhZ2VBc3luYygiLCBtZXNzYWdlLCAiKSIpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlT3JRdWV1ZUV4cHJl
c3Npb24oY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQotewotICAgIGlmICghbV9mcm9udGVuZExv
YWRlZCB8fCBtX3N1c3BlbmRlZCkgewotICAgICAgICBtX3F1ZXVlLmFwcGVuZChleHByZXNzaW9u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCku
aXNQYXVzZWQoKSk7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgp
LmV4ZWN1dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihleHByZXNzaW9uKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlUXVldWVkRXhwcmVzc2lv
bnMoKQotewotICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yIChjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24gOiBtX3F1ZXVlKSB7Ci0gICAgICAgIEFT
U0VSVCghbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmlzUGF1c2VkKCkp
OwotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0
ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOwotICAgIH0KLQotICAgIG1fcXVl
dWUuY2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWM0
MjRlMmQ4Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyKFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGZyb250
ZW5kTG9hZGVkKCk7Ci0KLSAgICB2b2lkIHN1c3BlbmQoKTsKLSAgICB2b2lkIHVuc3VzcGVuZCgp
OwotCi0gICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kKTsKLSAg
ICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZCwgYm9vbCBhcmd1bWVudCk7Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VBc3luYyhjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIHZvaWQgZXZhbHVhdGVPclF1ZXVl
RXhwcmVzc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGV2YWx1YXRlUXVldWVkRXhwcmVz
c2lvbnMoKTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBEZXF1ZTxTdHJpbmc+IG1fcXVl
dWU7Ci0gICAgYm9vbCBtX2Zyb250ZW5kTG9hZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3Vz
cGVuZGVkIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzAxNzg1MWY2ODcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgiCi0KLSNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9WTS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KLSNpbmNsdWRl
IDx3dGYvV29ya1F1ZXVlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1SZWY8V2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6
Y3JlYXRlKCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyKTsKLX0KLQotV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6V2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCi0gICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6
Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIi
KSkKLXsKLX0KLQotV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6fldlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXIoKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXI6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbikKLXsKLSAgICBjb25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9xdWV1ZS5nZXQoKSwgdGhpcyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcjo6bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQotewotICAgIC8vIElmIHRo
ZSB3ZWIgcHJvY2VzcyBoYXMgbm90IGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgeWV0LCB0aGVuIHRo
ZXJlCi0gICAgLy8gaXMgbm8gVk0gdG8gYmUgbm90aWZpZWQgYW5kIHRodXMgbm8gaW5maW5pdGUg
bG9vcCB0byBicmVhay4gQmFpbCBvdXQuCi0gICAgaWYgKCFXZWJDb3JlOjpjb21tb25WTU9yTnVs
bCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6OlZNJiB2bSA9IFdlYkNvcmU6OmNvbW1v
blZNKCk7Ci0gICAgdm0ubm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZjZiZDAyMGEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIDogcHVibGljIElQQzo6Q29u
bmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IGNyZWF0ZSgpOwotICAgIH5XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7Ci0gICAgCi0gICAgdm9pZCBpbml0aWFsaXpl
Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpOwotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6V29y
a1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0gICAgCi0gICAgdm9pZCBub3Rp
ZnlOZWVkRGVidWdnZXJCcmVhaygpOwotICAgIAotICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5ODcwZTUyYjczYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgorKysg
L2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBh
cmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
Ci0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlciB7
Ci0gICAgTm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxZmFhNmY2ZWRlNS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUg
IldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29y
bGQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0b3JVST4gV2ViSW5zcGVjdG9yVUk6OmNyZWF0
ZShXZWJQYWdlJiBwYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3Rv
clVJKHBhZ2UpKTsKLX0KLQotV2ViSW5zcGVjdG9yVUk6OldlYkluc3BlY3RvclVJKFdlYlBhZ2Um
IHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
KHBhZ2UpCi0gICAgLCBtX2RlYnVnZ2FibGVJbmZvKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHko
KSkKLXsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldElu
c3BlY3RvckFkZGl0aW9uc0VuYWJsZWQodHJ1ZSk7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJbWFnZUJpdG1hcEVuYWJsZWQodHJ1ZSk7Ci0jaWYgRU5B
QkxFKFdFQkdMMikKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LnNldFdlYkdMMkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JV
STo6ZXN0YWJsaXNoQ29ubmVjdGlvbihXZWJQYWdlUHJveHlJZGVudGlmaWVyIGluc3BlY3RlZFBh
Z2VJZGVudGlmaWVyLCBjb25zdCBEZWJ1Z2dhYmxlSW5mb0RhdGEmIGRlYnVnZ2FibGVJbmZvLCBi
b29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAgIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIgPSBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllcjsKLSAgICBtX2RlYnVn
Z2FibGVJbmZvID0gZGVidWdnYWJsZUluZm87Ci0gICAgbV91bmRlclRlc3QgPSB1bmRlclRlc3Q7
Ci0gICAgbV9pbnNwZWN0aW9uTGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWw7Ci0KLSAgICBtX2Zyb250
ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOwotCi0gICAgbV9mcm9udGVuZENvbnRyb2xsZXIgPSAm
bV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBtX2Zyb250ZW5k
Q29udHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7Ci0KLSAgICB1cGRh
dGVDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnVwZGF0ZUNvbm5lY3Rp
b24oKQotewotICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAgIG1fYmFja2Vu
ZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9
IG51bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBD
OjpDb25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNy
ZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbigpOwotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBjb25uZWN0aW9uSWRlbnRpZmllcihzb2NrZXRQYWlyLnNlcnZlcik7Ci0gICAgSVBDOjpBdHRh
Y2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KHNvY2tldFBhaXIuY2xpZW50KTsKLSNlbGlmIE9T
KERBUldJTikKLSAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7
Ci0gICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRf
UklHSFRfUkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAg
Q1JBU0goKTsKLQotICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxm
KCksIGxpc3RlbmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5E
KSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCk7Ci0gICAg
SVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGxpc3RlbmluZ1BvcnQsIE1BQ0hf
TVNHX1RZUEVfTU9WRV9TRU5EKTsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICBJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGllbnQ7Ci0gICAg
SVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhjb25uZWN0
aW9uSWRlbnRpZmllciwgY29ubkNsaWVudCk7Ci0gICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rp
b25DbGllbnRQb3J0KGNvbm5DbGllbnQpOwotI2Vsc2UKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybjsKLSNlbmRpZgotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9T
KERBUldJTikgfHwgUExBVEZPUk0oV0lOKQotICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBJUEM6
OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIs
ICp0aGlzKTsKLSAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5vcGVuKCk7Ci0jZW5kaWYKLQotICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVj
dGlvbkNsaWVudFBvcnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgaWYgKG1fZnJvbnRl
bmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOwotCi0g
ICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBt
X3BhZ2UuY29yZVBhZ2UoKSk7Ci0gICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9i
amVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclVJOjpmcm9udGVuZExvYWRlZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZnJvbnRlbmRMb2FkZWQoKTsKLQotICAgIC8vIFRlbGwgdGhlIG5ldyBmcm9udGVuZCBhYm91dCB0
aGUgY3VycmVudCBkb2NrIHN0YXRlLiBJZiB0aGUgd2luZG93IG9iamVjdAotICAgIC8vIGNsZWFy
ZWQgZHVlIHRvIGEgcmVsb2FkLCB0aGUgZG9jayBzdGF0ZSB3b24ndCBiZSByZXNlbnQgZnJvbSBV
SVByb2Nlc3MuCi0gICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKG1fZG9ja2luZ1VuYXZhaWxhYmxl
KTsKLSAgICBzZXREb2NrU2lkZShtX2RvY2tTaWRlKTsKLSAgICBzZXRJc1Zpc2libGUobV9pc1Zp
c2libGUpOwotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kTG9hZGVk
KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotCi0gICAgYnJpbmdUb0Zyb250KCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0
IHgsIGZsb2F0IHkpCi17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFn
ZSgpLT5jaHJvbWUoKS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0g
ICAgbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKLXsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRvdygpCi17Ci0gICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOwotCi0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAgICAgICAgbV9i
YWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2JhY2tlbmRDb25uZWN0
aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9mcm9udGVuZENvbnRyb2xsZXIpIHsK
LSAgICAgICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50
KG51bGxwdHIpOwotICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlz
Y29ubmVjdENsaWVudCgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllciA9IHsgfTsK
LSAgICBtX3VuZGVyVGVzdCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpyZW9w
ZW4oKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZW9wZW4oKSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlc2V0U3Rh
dGUoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZXNldFN0YXRlKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi1XZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uIFdlYkluc3BlY3RvclVJOjp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVxdWVzdFNldERv
Y2tTaWRlKERvY2tTaWRlIHNpZGUpCi17Ci0gICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpOwotICAgIHN3aXRjaCAoc2lkZSkgewotICAgIGNhc2UgRG9ja1NpZGU6
OlVuZG9ja2VkOgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEZXRhY2goKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0
OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKLSAg
ICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgotICAgICAg
ICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpBdHRhY2hCb3R0b20oKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0
RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKLXsKLSAgICBBU0NJSUxpdGVyYWwgc2lkZVN0cmluZyB7
IEFTQ0lJTGl0ZXJhbDo6bnVsbCgpIH07Ci0KLSAgICBzd2l0Y2ggKHNpZGUpIHsKLSAgICBjYXNl
IERvY2tTaWRlOjpVbmRvY2tlZDoKLSAgICAgICAgc2lkZVN0cmluZyA9ICJ1bmRvY2tlZCJfczsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKLSAgICAgICAgc2lk
ZVN0cmluZyA9ICJyaWdodCJfczsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRl
OjpMZWZ0OgotICAgICAgICBzaWRlU3RyaW5nID0gImxlZnQiX3M7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgotICAgICAgICBzaWRlU3RyaW5nID0gImJvdHRv
bSJfczsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV9kb2NrU2lkZSA9IHNpZGU7Ci0K
LSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERvY2tTaWRl
Il9zLCBTdHJpbmcoc2lkZVN0cmluZykpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXRE
b2NraW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKLXsKLSAgICBtX2RvY2tpbmdVbmF2
YWlsYWJsZSA9IHVuYXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlz
cGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHVuYXZhaWxhYmxlKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0SXNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAg
ICBtX2lzVmlzaWJsZSA9IHZpc2libGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5k
aXNwYXRjaENvbW1hbmQoInNldElzVmlzaWJsZSJfcywgdmlzaWJsZSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkK
LXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCi17Ci0g
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93V2lkdGgod2lk
dGgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JV
STo6Y2hhbmdlU2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0
IFN0cmluZyYgdXJsKQotewotICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAg
IG1fYmFja2VuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6T3Blbklu
TmV3VGFiKHVybCksIDApOwotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJp
bmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZUFzKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTYXZl
KGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjphcHBlbmQoY29u
c3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCkKLXsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6
Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsK
LSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmlj
YXRlSW5mbyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9URUxFTUVUUlkpCi1ib29sIFdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0
aWNMb2dnaW5nKCkKLXsKLSAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCku
ZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6Omxv
Z0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKLXsKLSAgICBtX3Bh
Z2UuY29yZVBhZ2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZURpY3Rpb25hcnkoZXZlbnROYW1lLCAiV2ViIEluc3BlY3RvciBGcm9udGVu
ZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZh
aWxhYmxlKQotewotICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQg
c2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFi
bGVkLgotICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmco
KSk7Ci0gICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKLQotICAg
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDb25zb2xlKCkKLXsKLSAgICBtX2Zyb250
ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dDb25zb2xlIl9zKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd1Jlc291cmNlcygpCi17Ci0gICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93UmVzb3VyY2VzIl9zKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGNvbnN0IFN0cmluZyYg
ZnJhbWVJZGVudGlmaWVyKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNo
Q29tbWFuZCgic2hvd01haW5SZXNvdXJjZUZvckZyYW1lIl9zLCBmcmFtZUlkZW50aWZpZXIpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFBhZ2VQcm9maWxpbmcoKQotewotICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGltZWxpbmVQcm9maWxp
bmdFbmFibGVkIl9zLCB0cnVlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RvcFBhZ2VQ
cm9maWxpbmcoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFu
ZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJf
cywgdHJ1ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BFbGVtZW50U2VsZWN0aW9u
KCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldEVs
ZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6OmRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzYXZlZFVSTCJfcywgdXJsKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgiYXBwZW5kZWRUb1VSTCJfcywgdXJsKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaE1l
c3NhZ2VBc3luYyhtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVBhdXNl
ZCgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuc3VzcGVuZCgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclVJOjpwYWdlVW5wYXVzZWQoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLnVuc3VzcGVuZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2Fn
ZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9y
bU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRm
b3JtTmFtZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24o
KSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lv
bjsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247
Ci19Ci0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0o
V0lOKQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JVSTo6bG9j
YWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJ
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzlmMjFjOWI2Mi4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0Rh
dGEuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKLSNp
bmNsdWRlICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNw
ZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kSG9zdC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwotY2xhc3Mg
Q2VydGlmaWNhdGVJbmZvOwotY2xhc3MgRmxvYXRSZWN0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yVUkgOiBwdWJsaWMgUmVm
Q291bnRlZDxXZWJJbnNwZWN0b3JVST4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQs
IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKLQotICAgIC8vIElt
cGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAK
LSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpIG92ZXJyaWRlOwotCi0gICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2b2lk
IGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlIHsgLyogRG8gbm90aGluZywgdGhl
IGluc3BlY3RlZCBwYWdlIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZCBhbmQgbWF5IGJlIGdldHRp
bmcgcmVwbGFjZWQuICovIH0KLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2Up
IG92ZXJyaWRlIHsgY2xvc2VXaW5kb3coKTsgfQotCi0gICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3Bl
Y3RvclVJIG1lc3NhZ2VzCi0gICAgdm9pZCBlc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94
eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZv
RGF0YSYsIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOwotICAgIHZv
aWQgdXBkYXRlQ29ubmVjdGlvbigpOwotCi0gICAgdm9pZCBzaG93Q29uc29sZSgpOwotICAgIHZv
aWQgc2hvd1Jlc291cmNlcygpOwotCi0gICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpOwotCi0gICAgdm9pZCBzdGFydFBhZ2VQcm9m
aWxpbmcoKTsKLSAgICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICB2b2lkIHN0YXJ0
RWxlbWVudFNlbGVjdGlvbigpOwotICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKLQot
ICAgIHZvaWQgYXR0YWNoZWRCb3R0b20oKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpCb3R0b20p
OyB9Ci0gICAgdm9pZCBhdHRhY2hlZFJpZ2h0KCkgeyBzZXREb2NrU2lkZShEb2NrU2lkZTo6Umln
aHQpOyB9Ci0gICAgdm9pZCBhdHRhY2hlZExlZnQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpM
ZWZ0KTsgfQotICAgIHZvaWQgZGV0YWNoZWQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpVbmRv
Y2tlZCk7IH0KLQotICAgIHZvaWQgc2V0RG9ja1NpZGUoRG9ja1NpZGUpOwotICAgIHZvaWQgc2V0
RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wpOwotCi0gICAgdm9pZCBzZXRJc1Zpc2libGUoYm9vbCk7
Ci0KLSAgICB2b2lkIGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgZGlkQXBw
ZW5kKGNvbnN0IFN0cmluZyYgdXJsKTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAg
dm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWxpYWJsZSk7Ci0jZW5k
aWYKLQotICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Ci0gICAgdm9pZCB3
aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9udGVuZExvYWRlZCgp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKLSAgICB2
b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQotICAgIGJvb2wg
aXNSZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIFN0cmluZyBsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGJhY2tlbmRDb21t
YW5kc1VSTCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIElu
c3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7IH0KLSAgICBTdHJpbmcgdGFyZ2V0UGxh
dGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lv
bigpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNv
bnN0IG92ZXJyaWRlOwotICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1faW5zcGVjdGlvbkxldmVsOyB9Ci0KLSAgICB2b2lkIGJyaW5nVG9G
cm9udCgpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlb3BlbigpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJyaWRlOwot
Ci0gICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJlcXVlc3RTZXRE
b2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRv
d1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2hhbmdlU2hlZXRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvcGVuSW5OZXdU
YWIoY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjYW5TYXZlKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdURjo6
U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpIG92
ZXJyaWRlOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygp
IG92ZXJyaWRlOwotICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlk
ZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9Ci0gICAgdm9pZCBsb2dE
aWFnbm9zdGljRXZlbnQoY29uc3QgV1RGOjpTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgV2ViQ29y
ZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJyaWRlOwot
I2VuZGlmCi0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBwYWdlUGF1c2VkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWdl
VW5wYXVzZWQoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7
IHJldHVybiBtX3VuZGVyVGVzdDsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFdlYkluc3Bl
Y3RvclVJKFdlYlBhZ2UmKTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7Ci0gICAg
UmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9iYWNrZW5kQ29ubmVjdGlvbjsKLQotICAgIC8vIEtl
ZXAgYSBwb2ludGVyIHRvIHRoZSBmcm9udGVuZCdzIGluc3BlY3RvciBjb250cm9sbGVyIHJhdGhl
ciB0aGFuIGdvaW5nIHRocm91Z2gKLSAgICAvLyBjb3JlUGFnZSgpLCBzaW5jZSB3ZSBtYXkgbmVl
ZCBpdCBhZnRlciB0aGUgZnJvbnRlbmQncyBwYWdlIGhhcyBzdGFydGVkIGRlc3RydWN0aW9uLgot
ICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIG1fZnJvbnRlbmRDb250cm9sbGVyIHsg
bnVsbHB0ciB9OwotCi0gICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyOwotICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OwotICAgIERlYnVnZ2Fi
bGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOwotICAgIGJvb2wgbV9kb2NraW5nVW5hdmFpbGFi
bGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OwotI2lmIEVOQUJM
RShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLQotICAgIERvY2tTaWRlIG1fZG9ja1NpZGUgeyBEb2Nr
U2lkZTo6VW5kb2NrZWQgfTsKLSAgICB1bnNpZ25lZCBtX2luc3BlY3Rpb25MZXZlbCB7IDEgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmMTM4NWQ0ODkuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmlu
CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JVSSB7Ci0gICAg
RXN0YWJsaXNoQ29ubmVjdGlvbihXZWJLaXQ6OldlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIsIHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJbmZvRGF0YSBkZWJ1
Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKLSAg
ICBVcGRhdGVDb25uZWN0aW9uKCkKLQotICAgIEF0dGFjaGVkQm90dG9tKCkKLSAgICBBdHRhY2hl
ZFJpZ2h0KCkKLSAgICBBdHRhY2hlZExlZnQoKQotICAgIERldGFjaGVkKCkKLSAgICBTZXREb2Nr
aW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKLSAgICBTZXRJc1Zpc2libGUoYm9vbCB2
aXNpYmxlKQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgU2V0RGlhZ25v
c3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi0jZW5kaWYKLQotICAgIFNob3dD
b25zb2xlKCkKLSAgICBTaG93UmVzb3VyY2VzKCkKLQotICAgIFNob3dNYWluUmVzb3VyY2VGb3JG
cmFtZShTdHJpbmcgZnJhbWVJZGVudGlmaWVyKQotCi0gICAgU3RhcnRQYWdlUHJvZmlsaW5nKCkK
LSAgICBTdG9wUGFnZVByb2ZpbGluZygpCi0KLSAgICBTdGFydEVsZW1lbnRTZWxlY3Rpb24oKQot
ICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLQotICAgIERpZFNhdmUoU3RyaW5nIHVybCkKLSAg
ICBEaWRBcHBlbmQoU3RyaW5nIHVybCkKLQotICAgIFNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJp
bmcgbWVzc2FnZSkKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE3MGY2ZmQ1MjA5Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLVdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQ6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShw
YWdlKQotewotfQotCi1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRlbnRpZmllcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRvVGFyZ2V0SUQobV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19
Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgaWYgKG1f
Y2hhbm5lbCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2hhbm5lbCA9IG1ha2VVbmlxdWU8V2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4obV9wYWdlLCBpZGVudGlmaWVyKCks
IGNvbm5lY3Rpb25UeXBlKTsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1f
cGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCpt
X2NoYW5uZWwpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmRpc2Nvbm5lY3Qo
KQotewotICAgIGlmICghbV9jaGFubmVsKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcGFn
ZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKLSAgICBtX2NoYW5uZWwucmVz
ZXQoKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fcGFnZS5jb3Jl
UGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFn
ZUlEKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJwYWdlLSIsIHBhZ2VJRC50b1VJbnQ2NCgp
KTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNiZDdmYWQ1ZmYuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclRhcmdldC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFdlYlBhZ2U7Ci1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KTsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmKTsKLSAgICB+V2Vi
UGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKLQotICAgIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9Ci0KLSAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0
IGZpbmFsOwotCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKLQotICAgIHN0YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRp
Zmllcik7Ci0KLXByaXZhdGU6Ci0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBtX2NoYW5uZWw7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwMTdjNGVkYWYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
cihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX3BhZ2VUYXJnZXQo
cGFnZSkKLXsKLSAgICAvLyBEbyBub3Qgc2VuZCB0aGUgcGFnZSB0YXJnZXQgdG8gdGhlIFVJUHJv
Y2VzcywgdGhlIFdlYlBhZ2VQcm94eSB3aWxsIG1hbmFnZXIgdGhpcyBmb3IgdXMuCi0gICAgbV90
YXJnZXRzLnNldChtX3BhZ2VUYXJnZXQuaWRlbnRpZmllcigpLCAmbV9wYWdlVGFyZ2V0KTsKLX0K
LQotV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6On5XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlcigpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXI6OmFkZFRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQotewot
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90YXJnZXRzLnNldCh0YXJnZXQuaWRlbnRpZmllcigpLCAm
dGFyZ2V0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOwotCi0gICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlSW5z
cGVjdG9yVGFyZ2V0KHRhcmdldC5pZGVudGlmaWVyKCksIHRhcmdldC50eXBlKCkpKTsKLX0KLQot
dm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSh0YXJnZXQuaWRlbnRpZmllcigpICE9IG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICJTaG91
bGQgbmV2ZXIgcmVtb3ZlIHRoZSBtYWluIHRhcmdldC4iKTsKLQotICAgIG1fcGFnZS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50
aWZpZXIoKSkpOwotCi0gICAgbV90YXJnZXRzLnJlbW92ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsK
LX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6Y29ubmVjdEluc3Bl
Y3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3Rh
cmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdGFyZ2V0LT5jb25uZWN0KGNvbm5lY3Rpb25UeXBlKTsKLX0KLQotdm9pZCBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6ZGlzY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJp
bmcmIHRhcmdldElkKQotewotICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJ
ZCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRhcmdldC0+ZGlz
Y29ubmVjdCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpz
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdl
dElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5z
ZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChtZXNzYWdlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggN2M5MzFkYWQxYzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci1jbGFzcyBJbnNwZWN0b3JUYXJnZXQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29u
dHJvbGxlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoV2ViUGFnZSYpOwotICAgIH5XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcigpOwotCi0gICAgdm9pZCBhZGRUYXJnZXQoSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXQmKTsKLSAgICB2b2lkIHJlbW92ZVRhcmdldChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldCYpOwotCi0gICAgdm9pZCBjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSk7
Ci0gICAgdm9pZCBkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOwot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlJiBtX3Bh
Z2U7Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldCBtX3BhZ2VUYXJnZXQ7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Kj4gbV90YXJnZXRzOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWI1ZjcxMzcz
My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKLQotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6V2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiBwYWdlLCBjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUg
Y29ubmVjdGlvblR5cGUpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fdGFyZ2V0SWQodGFy
Z2V0SWQpCi0gICAgLCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKQotewotfQotCi12
b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw6OnNlbmRNZXNzYWdlVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKG1fdGFyZ2V0
SWQsIG1lc3NhZ2UpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgxODRhYzViZGEyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk7
Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQ
YWdlJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlKTsKLSAgICB2aXJ0dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsKCkgPSBkZWZhdWx0OwotCi1wcml2YXRlOgotICAgIENvbm5lY3Rpb25UeXBl
IGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb25uZWN0aW9uVHlw
ZTsgfQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgU3RyaW5nIG1fdGFyZ2V0
SWQ7Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIG1fY29u
bmVjdGlvblR5cGUgeyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6
OlJlbW90ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI0Zjk3ZmU4ZDAuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JV
SUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclVJLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJbnNwZWN0b3JV
STo6Y2FuU2F2ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0
b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygi
cmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9s
b2NhbGl6ZWRTdHJpbmdzLmpzIik7Ci19Ci0KLVN0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3Vy
Y2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJTWFj
Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTU1ZjNkNThhMS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3Rv
clVJTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JVSS5oIgotI2ltcG9y
dCAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWJvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQotewotICAgIHJl
dHVybiB0cnVlOwotfQotCi1zdGF0aWMgU3RyaW5nIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3Ry
aW5nc1VSTCgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRo
SWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVuZGxl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMiXTsKLSAg
ICBpZiAoIXBhdGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKLSAgICByZXR1cm4g
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmlu
ZzsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci19
Ci0KLVN0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHdlYkluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388647</attachid>
            <date>2020-01-23 20:24:08 -0800</date>
            <delta_ts>2020-01-23 23:44:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>771449</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLjJhMzM2ZDE1M2MzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDg5IEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFr
ZToKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5j
bWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0
OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0
b3JUYXJnZXRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yVGFyZ2V0UHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3Bl
Y3RvclRhcmdldFByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3RvclRhcmdldFByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAg
ICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xp
Yi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3Bl
Y3RvclByb3h5R3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
ci9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVj
dG9yV2luZG93LmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3Bl
Y3RvckhpZ2hsaWdodFZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2du
aXplci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVj
dG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmguCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW06IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9t
YWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0uCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0uCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1t
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYkluc3BlY3RvclBy
b3h5TWFjLm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlci5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2Fn
ZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAu
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmlu
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3Rvci5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
Q2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVz
c2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oLgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuaC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbTogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJJbnNwZWN0b3JVSU1h
Yy5tbS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbToKKyAgICAgICAgQWRk
IHNvbWUgbWlzc2luZyBpbmNsdWRlcy4KKwogMjAyMC0wMS0xNyAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBSZW1vdmUgdGhlIElPSElERXZlbnRT
ZXJ2aWNlRmFzdFBhdGhVc2VyQ2xpZW50IElPS2l0IGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRl
eCA1MzI2NzhmMzc2MC4uNGRkOTlhMDhiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtNTYsNiAr
NTYsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvRG93bmxvYWRzIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9HYW1l
cGFkIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9HUFUiCisgICAgIiR7V0VCS0lUX0RJ
Un0vVUlQcm9jZXNzL0luc3BlY3RvciIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvTGF1
bmNoZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL05ldHdvcmsiCiAgICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzIgpAQCAtODUsNiArODYs
NyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5zcGVj
dG9yIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvTGF1bmNoaW5nIgogICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3MvTWVkaWFDYWNoZSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL01lZGlhU3RyZWFtIgpAQCAtMTQ4LDEyICsxNTAsMTAgQEAgc2V0KFdlYktpdF9NRVNT
QUdFU19JTl9GSUxFUwogICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
Lm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5p
bgotICAgIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogICAg
IFVJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dl
YkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9u
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCi0gICAgVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5
Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgogICAg
IFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KQEAgLTE2Myw2ICsxNjMsOSBAQCBzZXQoV2ViS2l0
X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkubWVzc2FnZXMuaW4KKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clByb3h5Lm1lc3NhZ2VzLmluCisKICAgICBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5Lm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNz
UHJveHkubWVzc2FnZXMuaW4KQEAgLTE3OSw2ICsxODIsMTEgQEAgc2V0KFdlYktpdF9NRVNTQUdF
U19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1h
bmFnZXIubWVzc2FnZXMuaW4KIAorICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYklu
c3BlY3RvclVJLm1lc3NhZ2VzLmluCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yLm1lc3NhZ2VzLmluCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgorICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisKICAgICBXZWJQcm9jZXNzL05ldHdvcmsvd2VicnRj
L1dlYk1ETlNSZWdpc3Rlci5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvTmV0d29yay93ZWJy
dGMvV2ViUlRDTW9uaXRvci5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvTmV0d29yay93ZWJy
dGMvV2ViUlRDUmVzb2x2ZXIubWVzc2FnZXMuaW4KQEAgLTIwMiwxMSArMjEwLDcgQEAgc2V0KFdl
YktpdF9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5t
ZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5t
ZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVz
c2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JV
SS5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CiAKICAgICBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFyZWFNYXAubWVzc2FnZXMuaW4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCA5
ODA4MWFhNmIyYy4uNmRjYmIyMzc1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTc5LDExICs3OSwxMiBAQCAkKFBST0pFQ1RfRElSKS9V
SVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eS5tZXNzYWdlcy5p
bgorJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm9jZXNzUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgotJChQ
Uk9KRUNUX0RJUikvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9WaWV3R2Vz
dHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9WaXNp
dGVkTGlua1N0b3JlLm1lc3NhZ2VzLmluCkBAIC05MSw3ICs5Miw2IEBAICQoUFJPSkVDVF9ESVIp
L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQ
cm94eS5tZXNzCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkdlb2xvY2F0
aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2Vi
SW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQYXN0ZWJv
YXJkUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5tZXNzYWdlcy5pbgpAQCAtMTEyLDYgKzExMiwxMCBAQCAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dlb2xvY2F0
aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KKyQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgor
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwubWVzc2FnZXMu
aW4KQEAgLTEzMywxMyArMTM3LDkgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNo
ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4K
LSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLm1lc3NhZ2Vz
LmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYzM0YWY1Y2QzYTEuLjgxMGUwZTE4
MzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC01NCw2ICs1NCw3IEBAIFZQQVRI
ID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNv
bkRhdGFiYXNlIFwKKyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yIFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL01lZGlhU3RyZWFtIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTmV0d29yayBcCkBA
IC03OSw2ICs4MCw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0RhdGFi
YXNlcyBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvRG93bmxvYWRzIFwKICAgICAkKFdlYktp
dDIpL1VJUHJvY2Vzcy9HUFUgXAorICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0luc3BlY3RvciBc
CiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvTWVkaWFTdHJlYW0gXAogICAgICQoV2ViS2l0Mikv
VUlQcm9jZXNzL05ldHdvcmsgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDc2N2Q2YzkyMDczLi44
NmQ4ZTllZmM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCkBAIC00OCw2ICs0OCw4IEBAIGxp
c3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKIAorICAgIFVJUHJv
Y2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAorCiAgICAgVUlQcm9j
ZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3BwCiAKICAgICBVSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5jcHAKQEAgLTU2LDcgKzU4LDYg
QEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy93aW4vUGFnZUNs
aWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJDb250ZXh0TWVudVByb3h5V2luLmNw
cAotICAgIFVJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCiAgICAgVUlQcm9j
ZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1l
bnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlByb2Nlc3NQb29sV2luLmNwcApA
QCAtNjQsNiArNjUsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVXaW4uY3BwCiAKKyAgICBXZWJQ
cm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCisKICAgICBXZWJQcm9j
ZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHAKIAogICAgIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk5vbmUuY3BwCkBAIC03OCw3ICs4
MSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3Qu
Y3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYkluc3BlY3RvclVJV2luLmNwcAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKIAogICAgIFdlYlByb2Nl
c3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcApAQCAtMTA5LDYgKzExMSw4IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9j
ZXNzL0FQSS9jcHAvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd2luIgog
ICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgorICAgICIk
e1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgorICAgICIke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9QbHVnaW5zL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgogICAgICIk
e1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKQEAgLTE4MSwx
MCArMTg1LDEwIEBAIGxpc3QoQVBQRU5EIFdlYktpdF9MSUJSQVJJRVMKIAogaWYgKEVOQUJMRV9S
RU1PVEVfSU5TUEVDVE9SKQogICAgIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAg
IFVJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAotICAgICAgICBVSVBy
b2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKKyAgICAgICAg
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorICAg
ICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuY3BwCiAKLSAgICAgICAgVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eVdpbi5jcHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlXaW4uY3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVf
RElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGUwZjlhOWNmNDNhLi5iYjA2
NzdhNmEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zOTYsNiArMzk2LDggQEAgbGlz
dChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvQVBJL2dsaWIiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsi
CiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCisgICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliIgorICAgICIke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9QbHVnaW5zL2d0ayIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvZ2VvY2x1ZSIKICAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvZ2xpYiIKQEAgLTQwNyw2ICs0MDksNyBAQCBsaXN0
KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvRE9NIgogICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayIKICAgICAiJHtXRUJLSVRfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NIgorICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0ayIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvdW5peCIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUveDExIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvZ3RrIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggMWUzZDcwZjliMmYuLmJlODZmNzNiN2U5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTU1LDYgKzU1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0
X1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9BdXRoZW50aWNhdGlvbi9jb2NvYSIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQ29j
b2EiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbiIK
KyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYyIKICAgICAiJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MiCkBAIC04OSw2ICs5MCw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9QUklW
QVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvY29jb2EiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9tYWMiCisgICAgIiR7V0VCS0lUX0RJUn0vV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL0NvY29hIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL21hYyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGIzN2Y0NzBiMzcuLjlkOGY3YjVh
NmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTQ4LDYgKzQ4LDggQEAgbGlzdChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAogCisgICAgVUlQcm9jZXNzL0lu
c3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisKICAgICBVSVByb2Nlc3MvTGF1
bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAKIAogICAgIFVJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNTYsNyArNTgsNiBAQCBsaXN0
KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1w
bC5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCi0gICAg
VUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2lu
L1dlYlBhZ2VQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5
V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwCkBAIC02NCw2
ICs2NSw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAKIAorICAgIFdlYlByb2Nlc3Mv
SW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKKwogICAgIFdlYlByb2Nlc3MvTWVk
aWFDYWNoZS9XZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTm9uZS5jcHAKQEAgLTc3LDcgKzgwLDYgQEAg
bGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy93aW4v
V2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0xMDgsNiArMTEwLDggQEAgbGlzdChBUFBFTkQgV2Vi
S2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJ
L2NwcC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS93aW4iCiAgICAgIiR7
V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCisgICAgIiR7V0VCS0lU
X0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQiCisgICAgIiR7V0VCS0lUX0RJUn0vVUlQ
cm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1BsdWdp
bnMvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy93aW4iCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luIgpAQCAtMTgxLDEwICsxODUs
MTAgQEAgZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQogICAgIGxpc3Qo
QVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcAotICAgICAgICBVSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlci5jcHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCiAKLSAgICAgICAgVUlQcm9j
ZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKyAgICAgICAgVUlQcm9jZXNz
L0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCiAgICAgKQogCiAg
ICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4
IDNkYTI4MDBjOWM1Li5kN2JkMTdhZmI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNjcsMTMgKzI2Nywx
MSBAQCBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKIFVJUHJvY2Vzcy9GcmFtZUxvYWRT
dGF0ZS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclBy
b3h5LmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAK
LVVJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKIFVJUHJvY2Vzcy9MZWdhY3lHbG9i
YWxTZXR0aW5ncy5jcHAKIFVJUHJvY2Vzcy9QYWdlTG9hZFN0YXRlLmNwcAogVUlQcm9jZXNzL1By
b2Nlc3NBc3NlcnRpb24uY3BwCiBVSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5jcHAKIFVJUHJv
Y2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5jcHAKLVVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5jcHAKIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAogVUlQcm9jZXNz
L1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAogVUlQcm9jZXNzL1N1c3BlbmRlZFBhZ2VQcm94eS5jcHAK
QEAgLTMwNiwxNSArMzA0LDExIEBAIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcAogVUlQcm9j
ZXNzL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViR2VvbG9jYXRp
b25NYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25Qcm92aWRlci5jcHAK
LVVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKLVVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JV
dGlsaXRpZXMuY3BwCiBVSVByb2Nlc3MvV2ViTmF2aWdhdGlvblN0YXRlLmNwcAogVUlQcm9jZXNz
L1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwCi1VSVByb2Nlc3MvV2ViUGFnZURl
YnVnZ2FibGUuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNw
cAogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlSW5qZWN0ZWRC
dW5kbGVDbGllbnQuY3BwCi1VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAogVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94
eS5jcHAKIFVJUHJvY2Vzcy9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTQyNiw2ICs0MjAsMTMgQEAg
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKIAogVUlQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzUHJveHkuY3BwCiAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFy
Z2V0UHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5
LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAKK1VJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAorVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCisKIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL05vdGlmaWNhdGlv
bnMvV2ViTm90aWZpY2F0aW9uLmNwcAogVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5LmNwcApAQCAtNTE3LDYgKzUxOCwxNiBAQCBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGUu
Y3BwCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZS5jcHAgQG5vLXVuaWZ5CiAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1Jl
bW90ZVdlYkluc3BlY3RvclVJLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
LmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcAorV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAKK1dl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKKwogV2ViUHJvY2Vzcy9NZWRp
YVN0cmVhbS9NZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcAogV2ViUHJvY2Vzcy9NZWRp
YVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCiAKQEAgLTU5Myw3
ICs2MDQsNiBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcAotV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
Yk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5jcHAKQEAgLTYxMCwyMyArNjIwLDE1IEBAIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERp
c3BhdGNoZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVX
ZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5j
cHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJDb29raWVKYXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRG9jdW1lbnRMb2Fk
ZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCi1XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLmNw
cAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VHcm91cFByb3h5LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0
b3JUYXJnZXQuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENv
bnRyb2xsZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAK
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVIYW5kbGVyUHJveHkuY3BwCiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lVGFza1Byb3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDZhOGUyZTY5MDVjLi5jNDE3NDRhMzI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApA
QCAtMjI5LDcgKzIyOSw2IEBAIFVJUHJvY2Vzcy9XZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIu
Y3BwCiBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyQ2xpZW50LmNwcAogVUlQ
cm9jZXNzL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKIFVJUHJvY2Vzcy9XS0ltYWdlUHJl
dmlld1ZpZXdDb250cm9sbGVyLm1tCi1VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
Lm1tCiAKIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFSZWNvcmQuY3BwCiAKQEAgLTQwMiw2
ICs0MDEsMTQgQEAgVUlQcm9jZXNzL0dhbWVwYWQvY29jb2EvVUlHYW1lcGFkUHJvdmlkZXJDb2Nv
YS5tbQogVUlQcm9jZXNzL0dhbWVwYWQvaW9zL1VJR2FtZXBhZFByb3ZpZGVySU9TLm1tCiBVSVBy
b2Nlc3MvR2FtZXBhZC9tYWMvVUlHYW1lcGFkUHJvdmlkZXJNYWMubW0KIAorVUlQcm9jZXNzL0lu
c3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCitVSVByb2Nlc3MvSW5zcGVj
dG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQorCitVSVBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQorVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KK1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KK1VJUHJvY2Vzcy9JbnNwZWN0
b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCisKIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tB
aXJQbGF5Um91dGVQaWNrZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tEYXRlUGlja2VyVmll
d0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxlVXBsb2FkUGFuZWwubW0K
QEAgLTQ1MSw3ICs0NTgsNiBAQCBVSVByb2Nlc3MvaW9zL1dLRHJhd2luZ1ZpZXcubW0KIFVJUHJv
Y2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCiBVSVByb2Nlc3MvaW9zL1dLR2Vv
bG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbQogVUlQcm9jZXNzL2lvcy9X
S0hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLm1tCi1VSVByb2Nlc3MvaW9zL1dL
SW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCiBVSVByb2Nlc3MvaW9zL1dL
S2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQogVUlQcm9jZXNzL2lvcy9XS01vdXNlR2VzdHVy
ZVJlY29nbml6ZXIubW0KIFVJUHJvY2Vzcy9pb3MvV0tQYXNzd29yZFZpZXcubW0KQEAgLTQ3MSw3
ICs0NzcsNiBAQCBVSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcAogVUlQcm9jZXNzL21hYy9I
aWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL21hYy9MZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmcuY3BwCiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCi1VSVBy
b2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1Nl
Y0l0ZW1TaGltUHJveHkuY3BwCiBVSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5tbQog
VUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtNDgyLDE1ICs0ODcsMTIgQEAgVUlQ
cm9jZXNzL21hYy9XZWJDb2xvclBpY2tlck1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0
TWVudVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYkNvb2tpZU1hbmFnZXJQcm94eU1hYy5t
bQogVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0KLVVJ
UHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9tYWMvV2ViUGFn
ZVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tCiBVSVBy
b2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uLm1tCiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIubW0KIFVJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCi1VSVBy
b2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KLVVJUHJvY2Vzcy9tYWMvV0tJ
bnNwZWN0b3JXS1dlYlZpZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KIFVJ
UHJvY2Vzcy9tYWMvV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRlLm1tCiBVSVByb2Nlc3Mv
bWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQpAQCAtNTc3LDYgKzU3OSw4IEBAIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENv
bnRyb2xsZXIubW0KIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5k
bGVNYWMubW0KIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1t
CisKIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcAog
CiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBlUGx1Z2luTWFjLm1tCkBA
IC02MTgsNyArNjIyLDYgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVhTWFjLmNwcAogV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9QYWdlQmFubmVyTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCi1XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3Bl
Y3RvclVJTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UubW0KIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlc0dUSy50eHQKaW5kZXggMWVmNzNiYzIxNGMuLjg1YWIwYTNlMmM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0dUSy50eHQKQEAgLTIxNSw2ICsyMTUsMTIgQEAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKIFVJUHJvY2Vzcy9n
ZW9jbHVlL0dlb2NsdWVHZW9sb2NhdGlvblByb3ZpZGVyLmNwcAogCitVSVByb2Nlc3MvSW5zcGVj
dG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorCitVSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2Vi
S2l0SW5zcGVjdG9yV2luZG93LmNwcAorCiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9Qcm9jZXNz
TGF1bmNoZXJHTGliLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9MYXVuY2hlci9nbGliL0J1YmJs
ZXdyYXBMYXVuY2hlci5jcHAgQG5vLXVuaWZ5CiAKQEAgLTIzMCw3ICsyMzYsNiBAQCBVSVByb2Nl
c3MvV2Vic2l0ZURhdGEvdW5peC9XZWJzaXRlRGF0YVN0b3JlVW5peC5jcHAKIAogVUlQcm9jZXNz
L2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcCBAbm8tdW5pZnkKIAotVUlQcm9jZXNzL2dsaWIv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAogVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Bvb2xH
TGliLmNwcAogVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vzc1Byb3h5R0xpYi5jcHAKIFVJUHJvY2Vz
cy9nbGliL1dlYnNpdGVEYXRhU3RvcmVHTGliLmNwcCBAbm8tdW5pZnkKQEAgLTI0OCw3ICsyNTMs
NiBAQCBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcAogVUlQcm9jZXNzL2d0
ay9Qb2ludGVyTG9ja01hbmFnZXIuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9Qb2ludGVy
TG9ja01hbmFnZXJXYXlsYW5kLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxv
Y2tNYW5hZ2VyWDExLmNwcCBAbm8tdW5pZnkKLVVJUHJvY2Vzcy9ndGsvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9ndGsvVmlld1NuYXBzaG90U3RvcmVHdGsuY3BwCkBAIC0yNTYsOCArMjYwLDYg
QEAgVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvZ3RrL1dlYkNvbG9yUGlja2VyR3RrLmNwcAogVUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0TWVu
dVByb3h5R3RrLmNwcAogVUlQcm9jZXNzL2d0ay9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJvcGRv
d25HdGsuY3BwCi1VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcAotVUlQcm9j
ZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCiBVSVByb2Nlc3MvZ3RrL1dlYlBhZ2VQ
cm94eUd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1dlYlBhc3RlYm9hcmRQcm94eUd0
ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViUG9wdXBNZW51UHJveHlHdGsuY3BwCkBAIC0zOTIsNiAr
Mzk0LDggQEAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Y
UGF0aFJlc3VsdC5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9nbGliL0luamVjdGVk
QnVuZGxlR2xpYi5jcHAKIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJ
R3RrLmNwcAorCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdl
ci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3VuaXgvTmV0c2NhcGVQbHVnaW5V
bml4LmNwcCBAbm8tdW5pZnkKQEAgLTQyMyw3ICs0MjcsNiBAQCBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0Fj
Y2VsZXJhdGVkU3VyZmFjZVdheWxhbmQuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0FjY2Vs
ZXJhdGVkU3VyZmFjZVgxMS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1By
aW50ZXJMaXN0R3RrLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JVSUd0
ay5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCmluZGV4IDQzYTQ3ZGQ3ZDBhLi4yZTA2NDlhOGRk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIE9CSkNfQ0xB
U1MgTlNGaWxlV3JhcHBlcjsKK09CSkNfQ0xBU1MgTlNTdHJpbmc7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KaW5kZXggZmM0ZDg1NmYwMmUuLmVk
NTk4ODFjNWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3VGVzdGluZy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3VGVzdGluZy5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiV2ViVmll
d0ltcGwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9X
S0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9uQnViYmxlLmg+CiAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdl
dFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JU
YXJnZXRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY5
MjhjYTJmYmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgorCisjaW5jbHVkZSAiUHJvdmlz
aW9uYWxQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAi
V2ViUGFnZUluc3BlY3RvclRhcmdldC5oIgorI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8
SW5zcGVjdG9yVGFyZ2V0UHJveHk+KHBhZ2UsIHRhcmdldElkLCB0eXBlKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3Jl
YXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQoreworICAgIGF1
dG8gdGFyZ2V0ID0gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2Uu
cGFnZSgpLCB0YXJnZXRJZCwgdHlwZSk7CisgICAgdGFyZ2V0LT5tX3Byb3Zpc2lvbmFsUGFnZSA9
IG1ha2VXZWFrUHRyKHByb3Zpc2lvbmFsUGFnZSk7CisgICAgcmV0dXJuIHRhcmdldDsKK30KKwor
SW5zcGVjdG9yVGFyZ2V0UHJveHk6Okluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYg
cGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRU
eXBlIHR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1faWRlbnRpZmllcih0YXJnZXRJ
ZCkKKyAgICAsIG1fdHlwZSh0eXBlKQoreworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5
Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25u
ZWN0aW9uVHlwZSkKK3sKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9w
cm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3Io
aWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICBtX3BhZ2Uuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5l
Y3Rpb25UeXBlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3Qo
KQoreworICAgIGlmIChpc1BhdXNlZCgpKQorICAgICAgICByZXN1bWUoKTsKKworICAgIGlmICht
X3Byb3Zpc2lvbmFsUGFnZSkgeworICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkK
KyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0
b3IoaWRlbnRpZmllcigpKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OnNlbmRN
ZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAo
bV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwg
bWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGFnZS5oYXNS
dW5uaW5nUHJvY2VzcygpKQorICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdlKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCkK
K3sKKyAgICBtX3Byb3Zpc2lvbmFsUGFnZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
VGFyZ2V0UHJveHk6OmlzUHJvdmlzaW9uYWwoKSBjb25zdAoreworICAgIHJldHVybiAhIW1fcHJv
dmlzaW9uYWxQYWdlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEyMjM5Y2VjOGUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0luc3BlY3Rv
clRhcmdldFByb3h5LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBy
b3Zpc2lvbmFsUGFnZVByb3h5OworY2xhc3MgV2ViUGFnZVByb3h5OworCisvLyBOT1RFOiBUaGlz
IFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZy
b250ZW5kIGNoYW5uZWwsIHNpbmNlCisvLyBhbnkgdGFyZ2V0IC0+IGZyb250ZW5kIG1lc3NhZ2Vz
IHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0aCBhIHRhcmdldElkLgorCitj
bGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkm
LCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUp
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0
ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgSW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFn
ZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlKTsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9IGRlZmF1bHQ7CisKKyAgICBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9CisKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7
CisgICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNlbmRNZXNzYWdl
VG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IFdlYlBhZ2VQcm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlwZTsKKyAgICBXZWFrUHRyPFByb3Zpc2lv
bmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjIxOTJjMjlmNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcApAQCAtMCww
ICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8u
aCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VH
cm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2Vy
dGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQorICAgIDogbV9kZWJ1Z2dh
YmxlSW5mbyhBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjpl
bXB0eSgpKSkKK3sKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6On5SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eSgpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2UpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkKK3sKKyAgICBjbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpz
ZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OmxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+JiYgZGVidWdn
YWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQoreworICAgIGNyZWF0
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1v
dmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENv
bW1hbmRzVVJMOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6ZShtX2RlYnVnZ2FibGVJbmZvLT5kZWJ1Z2dhYmxlSW5m
b0RhdGEoKSwgYmFja2VuZENvbW1hbmRzVVJMKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5sb2Fk
UmVxdWVzdChVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkp
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQmFja2VuZCgp
Cit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQ3Jhc2goKQoreworICAgIC8vIEJlaGF2ZSBhcyBp
ZiB0aGUgZnJvbnRlbmQganVzdCBjbG9zZWQsIHNvIGNsaWVudHMgYXJlIGluZm9ybWVkIHRoZSBm
cm9udGVuZCBpcyBnb25lLgorICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCit7CisgICAgYnJpbmdUb0Zyb250KCk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsK
K30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmREaWRDbG9zZSgpCit7
CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBwcm90ZWN0KCp0aGlzKTsKKworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnJvbUZyb250ZW5kKCk7CisK
KyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIEFTU0VSVCghbV9iYWNrZW5kQ29tbWFuZHNV
UkwuaXNFbXB0eSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAg
bG9hZChtX2RlYnVnZ2FibGVJbmZvLmNvcHlSZWYoKSwgbV9iYWNrZW5kQ29tbWFuZHNVUkwpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRlKCkKK3sKKyAgICBw
bGF0Zm9ybVJlc2V0U3RhdGUoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
YnJpbmdUb0Zyb250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVEaWFsb2cpCit7CisgICAgcGxhdGZvcm1TYXZlKHN1Z2dlc3RlZFVSTCwgY29udGVudCwgYmFz
ZTY0RW5jb2RlZCwgZm9yY2VTYXZlRGlhbG9nKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoc3VnZ2VzdGVkVVJMLCBjb250ZW50KTsK
K30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBw
bGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgcGxhdGZvcm1PcGVu
SW5OZXdUYWIodXJsKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0Nl
cnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAg
IHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zZW5kTWVz
c2FnZVRvQmFja2VuZChtZXNzYWdlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6Y3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JQ
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9ybUNy
ZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1f
aW5zcGVjdG9yUGFnZSwgbnVsbHB0cik7CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCksICp0aGlz
KTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hc3N1bWVSZWFkQWNjZXNzVG9CYXNl
VVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJM
KCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICB1bnRyYWNrSW5zcGVjdG9y
UGFnZShtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0cjsK
KworICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKworI2lmICFF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pKQorV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBi
b29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBw
ZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikgeyB9Cit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpIHsg
fQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29u
c3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKSB7IH0KK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKSB7IH0K
KyNlbmRpZiAvLyAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5mYWI1OGY4Y2UwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCkBAIC0wLDAgKzEsMTY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIK
KyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKyNpZiBQTEFURk9STShNQUMpCitPQkpDX0NMQVNTIE5TVVJMOworT0JKQ19DTEFTUyBO
U1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKK09CSkNfQ0xB
U1MgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyOworT0JKQ19DTEFTUyBXS1dl
YlZpZXc7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJ
bmZvOworfQorCituYW1lc3BhY2UgQVBJIHsKK2NsYXNzIERlYnVnZ2FibGVJbmZvOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViVmlldzsK
KworY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgflJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0gMDsKK307CisKK2NsYXNzIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpKTsKKyAgICB9CisK
KyAgICB+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIHZvaWQgc2V0Q2xpZW50KFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7
IH0KKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisg
ICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKKworICAgIHZvaWQg
aW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBsb2FkKFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYm
LCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7CisgICAgdm9pZCBjbG9zZUZyb21C
YWNrZW5kKCk7CisgICAgdm9pZCBzaG93KCk7CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5T
V2luZG93ICp3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdy5nZXQoKTsgfQorICAgIFdL
V2ViVmlldyAqd2ViVmlldygpIGNvbnN0OworCisgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShHVEspCisgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZShjb25zdCBDU3RyaW5n
Jik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBMUkVTVUxUIHNpemVD
aGFuZ2UoKTsKKyAgICBMUkVTVUxUIG9uQ2xvc2UoKTsKKworICAgIHN0YXRpYyBMUkVTVUxUIENB
TExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworI2VuZGlmCisKKyAg
ICB2b2lkIGNsb3NlRnJvbUNyYXNoKCk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
KworICAgIC8vIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IG1lc3NhZ2VzLgorICAgIHZvaWQgZnJv
bnRlbmREaWRDbG9zZSgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCByZXNldFN0YXRl
KCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlQXMpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGNvbnN0IFN0cmluZyYgY29udGVudCk7CisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKTsKKyAgICB2b2lk
IG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBzaG93Q2VydGlmaWNh
dGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisgICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgdm9pZCBjcmVhdGVGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7CisKKyAgICAvLyBQbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuCisgICAgV2ViUGFnZVByb3h5
KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZv
cm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZvcm1SZXNldFN0
YXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZv
cm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIHBsYXRmb3JtQXBw
ZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CisgICAg
dm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAg
ICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybU9wZW5J
bk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKworICAgIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5Q2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIgfTsKKyAgICBXZWJQYWdlUHJv
eHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKworICAgIFJlZjxBUEk6OkRlYnVnZ2Fi
bGVJbmZvPiBtX2RlYnVnZ2FibGVJbmZvOworICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VS
TDsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8V0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3OworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV93aW5k
b3c7CisgICAgUmV0YWluUHRyPFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4g
bV9vYmpDQWRhcHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9z
dWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zaGVldFJl
Y3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBtX3dlYlZpZXcg
eyBudWxscHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7IG51bGxwdHIgfTsKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKKyAgICBIV05EIG1fZnJvbnRlbmRIYW5kbGU7Cisg
ICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlMDkxYjc4ZmI2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkgeworICAgIEZyb250ZW5kRGlkQ2xvc2UoKQorICAgIFJlb3BlbigpCisgICAgUmVzZXRTdGF0
ZSgpCisgICAgQnJpbmdUb0Zyb250KCkKKworICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJp
bmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQorICAgIEFw
cGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQorCisgICAgU2V0U2hlZXRSZWN0
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCisgICAgU3RhcnRXaW5kb3dEcmFnKCkKKworICAg
IE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQorICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQorCisgICAgU2VuZE1lc3NhZ2VUb0JhY2tl
bmQoU3RyaW5nIG1lc3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMjNkNzA1ZTgzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwCkBAIC0wLDAg
KzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2luY2x1ZGUg
IkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24u
aCIKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkF1dG9tYXRpb25TZXNz
aW9uLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rvck1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIK
KyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU2V0Rm9yU2Nv
cGUuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNs
aWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93
V2lkdGggPSA1MDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdp
bmRvd0hlaWdodCA9IDQwMDsKKworY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Omlu
aXRpYWxXaW5kb3dXaWR0aCA9IDEwMDA7Citjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94
eTo6aW5pdGlhbFdpbmRvd0hlaWdodCA9IDY1MDsKKworV2ViSW5zcGVjdG9yUHJveHk6OldlYklu
c3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKKyNpZiBQTEFURk9STShN
QUMpCisgICAgOiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rp
dml0eVRpbWVyRmlyZWQpCisjZW5kaWYKK3sKKyAgICBpZiAoaW5zcGVjdGVkUGFnZSAmJiBpbnNw
ZWN0ZWRQYWdlLT5oYXNSdW5uaW5nUHJvY2VzcygpKSB7CisgICAgICAgIG1faW5zcGVjdGVkUGFn
ZSA9IGluc3BlY3RlZFBhZ2U7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOworICAgIH0K
K30KKworV2ViSW5zcGVjdG9yUHJveHk6On5XZWJJbnNwZWN0b3JQcm94eSgpCit7Cit9CisKK3Vu
c2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0aW9uTGV2ZWwoKSBjb25zdAoreworICAg
IHJldHVybiBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKTsKK30KKworV2Vi
UHJlZmVyZW5jZXMmIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIHJldHVybiBtX2lu
c3BlY3RvclBhZ2UtPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQoreworICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCisg
ICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNw
ZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpOworICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlID0g
bnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKK30KKworLy8g
UHVibGljIEFQSXMKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzRnJvbnQoKQoreworICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
cGxhdGZvcm1Jc0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNvbm5lY3Qo
KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9zaG93TWVzc2FnZVNlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvd01lc3Nh
Z2VTZW50ID0gdHJ1ZTsKKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gdHJ1ZTsKKwor
ICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpOb3RpZnlOZWVkRGVidWdn
ZXJCcmVhaygpLCAwKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6U2hvdygpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCit7
CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChp
c0Nvbm5lY3RlZCgpKSB7CisgICAgICAgIGJyaW5nVG9Gcm9udCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29ubmVjdCgpOworCisgICAgLy8gRG9uJ3QgaWdub3JlIHRoZSBmaXJz
dCBicmluZ1RvRnJvbnQgc28gaXQgb3BlbnMgdGhlIEluc3BlY3Rvci4KKyAgICBtX2lnbm9yZUZp
cnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omhp
ZGUoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgcGxhdGZvcm1IaWRlKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3I6OkNsb3NlKCkpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGb3JDcmFzaCgpCit7CisgICAg
Y2xvc2UoKTsKKworICAgIHBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjbG9zZSgpOworICAgIHNob3coKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCit7CisgICAgaW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKKyAgICBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7CisgICAgaW5z
cGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKTsK
KyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3Rvcldp
bmRvd0ZyYW1lKCk7CisKKyAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cmVzZXQoKQoreworICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpIHsKKyAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3Bl
Y3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQ
cm9jZXNzKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKK3sKKyAgICBBU1NFUlQoIW1faW5z
cGVjdGVkUGFnZSk7CisgICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNwZWN0
ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKworICAg
IGlmIChtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24oKSk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29u
bmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIpKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUoKQoreworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsK
KworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93
Q29uc29sZSgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd1Jlc291cmNlcygp
Cit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGNy
ZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlNob3dSZXNvdXJjZXMoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSkKK3sK
KyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRl
RnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3Rvcjo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFtZUlEKCkpKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoQm90dG9tKCkKK3sKKyAgICBhdHRh
Y2goQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmF0dGFjaFJpZ2h0KCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OlJpZ2h0KTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoTGVmdCgpCit7CisgICAgYXR0YWNoKEF0
dGFjaG1lbnRTaWRlOjpMZWZ0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNo
KEF0dGFjaG1lbnRTaWRlIHNpZGUpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UgfHwgIWNh
bkF0dGFjaCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNoZWQgPSB0cnVlOwor
ICAgIG1fYXR0YWNobWVudFNpZGUgPSBzaWRlOworCisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNobWVudFNpZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNp
ZGUpKTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7CisKKyAgICBtX2luc3Bl
Y3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSkp
OworCisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6Qm90dG9tOgorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHBsYXRmb3JtQXR0YWNoKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OmRldGFjaCgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOworCisgICAgaWYg
KG1faXNWaXNpYmxlKQorICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFsc2UpKTsKKyAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKKwor
ICAgIHBsYXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChoZWlnaHQpOworICAgIHBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAg
ICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hlZFdpZHRoKHdp
ZHRoKTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIHBsYXRmb3JtU2V0U2hlZXRSZWN0KHJlY3QpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIHBsYXRmb3JtU3RhcnRXaW5kb3dE
cmFnKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2dsZVBhZ2VQcm9maWxpbmco
KQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9pc1Byb2ZpbGluZ1BhZ2UpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdGFydFBh
Z2VQcm9maWxpbmcoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2dsZUVsZW1l
bnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlKSB7CisgICAgICAgIG1faWdu
b3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IHRydWU7CisgICAgICAgIG1faW5zcGVjdGVkUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wRWxlbWVudFNlbGVjdGlvbigpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBjb25uZWN0KCk7CisgICAgICAgIG1faW5zcGVjdGVkUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSk7
CisgICAgfQorfQorCitib29sIFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0
b3JQYWdlKGNvbnN0IFVSTCYgdXJsKQoreworICAgIC8vIFVzZSBVUkwgc28gd2UgY2FuIGNvbXBh
cmUgdGhlIHBhdGhzIGFuZCBwcm90b2NvbHMuCisgICAgVVJMIG1haW5QYWdlVVJMKFVSTCgpLCBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKTsKKyAgICBpZiAodXJsLnByb3Rv
Y29sKCkgPT0gbWFpblBhZ2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1haW5QYWdlVVJMLnBh
dGgoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2UgbWlnaHQgbm90IGhhdmUg
YSBUZXN0IFVSTCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4KKyAgICBTdHJpbmcgdGVzdFBhZ2VVUkxT
dHJpbmcgPSBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBp
ZiAodGVzdFBhZ2VVUkxTdHJpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFVSTCB0ZXN0UGFnZVVSTChVUkwoKSwgdGVzdFBhZ2VVUkxTdHJpbmcpOworICAgIHJldHVy
biB1cmwucHJvdG9jb2woKSA9PSB0ZXN0UGFnZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGVz
dFBhZ2VVUkwucGF0aCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJv
bnRlbmRQYWdlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOwor
ICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdl
LCBtX2luc3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgKnRoaXMpOworICAgIG1f
aW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwoKm1faW5z
cGVjdG9yUGFnZSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wg
Y2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKSkgeworICAgICAgICBzaG93KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsKKyAgICBjcmVh
dGVGcm9udGVuZFBhZ2UoKTsKKworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAgIGlm
ICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFc3RhYmxpc2hDb25uZWN0aW9uKG1f
aW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBpbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCksIG1f
dW5kZXJUZXN0LCBpbnNwZWN0aW9uTGV2ZWwoKSkpOworCisgICAgQVNTRVJUKCFtX2lzQWN0aXZl
RnJvbnRlbmQpOworICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IHRydWU7CisgICAgbV9pbnNwZWN0
ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKKwor
ICAgIGlmICghbV91bmRlclRlc3QpIHsKKyAgICAgICAgbV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNh
bkF0dGFjaChjYW5BdHRhY2gpOworICAgICAgICBtX2lzQXR0YWNoZWQgPSBzaG91bGRPcGVuQXR0
YWNoZWQoKTsKKyAgICAgICAgbV9hdHRhY2htZW50U2lkZSA9IHN0YXRpY19jYXN0PEF0dGFjaG1l
bnRTaWRlPihpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2htZW50U2lk
ZSgpKTsKKworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSk7CisKKyAgICAgICAgaWYgKG1faXNBdHRh
Y2hlZCkgeworICAgICAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgICAg
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206CisgICAgICAgICAgICAgICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20o
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAg
ICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOworCisgICAgICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSgh
bV9jYW5BdHRhY2gpKTsKKyAgICB9CisKKyAgICAvLyBOb3RpZnkgV2ViS2l0IGNsaWVudCB3aGVu
IGEgbG9jYWwgaW5zcGVjdG9yIGF0dGFjaGVzIHNvIHRoYXQgaXQgbWF5IGluc3RhbGwgZGVsZWdh
dGVzIHByaW9yIHRvIHRoZSBfV0tJbnNwZWN0b3IgbG9hZGluZyBpdHMgZnJvbnRlbmQuCisgICAg
bV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgpLmRpZEF0dGFjaEluc3BlY3RvcigqbV9pbnNwZWN0
ZWRQYWdlLCAqdGhpcyk7CisKKyAgICAvLyBCYWlsIG91dCBpZiB0aGUgY2xpZW50IGNsb3NlZCB0
aGUgaW5zcGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1ldGhvZC4KKyAgICBpZiAoIW1faW5zcGVj
dG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVx
dWVzdChVUkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clRlc3RQYWdlVVJMKCkgOiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW4oKQoreworICAgIGlmIChtX3VuZGVy
VGVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNldEZvclNjb3BlPGJvb2w+IGlzT3BlbmluZyhtX2lzT3Blbmlu
ZywgdHJ1ZSk7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkp
OworCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAgICAgcGxhdGZvcm1BdHRhY2goKTsKKyAg
ICBlbHNlCisgICAgICAgIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsKKworICAgIHBs
YXRmb3JtQnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmRpZENs
b3NlKCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNWaXNpYmxlID0g
ZmFsc2U7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBmYWxzZTsKKyAgICBtX3Nob3dNZXNzYWdl
U2VudCA9IGZhbHNlOworICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKKwor
ICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSk7CisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9p
c1Zpc2libGUpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpKTsKKworICAgIGlmIChtX2lzQWN0aXZl
RnJvbnRlbmQpIHsKKyAgICAgICAgbV9pc0FjdGl2ZUZyb250ZW5kID0gZmFsc2U7CisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVu
ZCgqdGhpcyk7CisgICAgfQorCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAgICAgcGxhdGZv
cm1EZXRhY2goKTsKKworICAgIC8vIE51bGwgb3V0IG1faW5zcGVjdG9yUGFnZSBhZnRlciBwbGF0
Zm9ybURldGFjaCgpLCBzbyB0aGUgdmlld3MgY2FuIGJlIGNsZWFuZWQgdXAgY29ycmVjdGx5Lgor
ICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisKKyAgICBtX2lzQXR0YWNoZWQgPSBmYWxz
ZTsKKyAgICBtX2NhbkF0dGFjaCA9IGZhbHNlOworICAgIG1fdW5kZXJUZXN0ID0gZmFsc2U7CisK
KyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJv
bUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpmcm9udGVu
ZExvYWRlZCgpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkKKyAgICAgICAgYXV0b21h
dGlvblNlc3Npb24tPmluc3BlY3RvckZyb250ZW5kTG9hZGVkKCptX2luc3BlY3RlZFBhZ2UpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQoKQoreworICAgIC8vIFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgdGVsbHMgdXMgdG8gZG8gdGhpcyBv
biBsb2FkLiBXZSB3YW50IHRvCisgICAgLy8gaWdub3JlIGl0IG9uY2UgaWYgd2Ugb25seSB3YW50
ZWQgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgdGhlIEluc3BlY3RvciB0byBsYXRlcgorICAgIC8v
IHJlcXVlc3QgdG8gYmUgYnJvdWdodCB0byB0aGUgZnJvbnQgd2hlbiBhIGJyZWFrcG9pbnQgaXMg
aGl0IG9yIHNvbWUgb3RoZXIgYWN0aW9uLgorICAgIGlmIChtX2lnbm9yZUZpcnN0QnJpbmdUb0Zy
b250KSB7CisgICAgICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgcGxhdGZv
cm1CcmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlCisgICAgICAgIG9wZW4oKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAgcGxh
dGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCit7CisgICAg
Ym9vbCBwcmV2aW91c0NhbkF0dGFjaCA9IG1fY2FuQXR0YWNoOworCisgICAgbV9jYW5BdHRhY2gg
PSBwbGF0Zm9ybUNhbkF0dGFjaChhdmFpbGFibGUpOworCisgICAgaWYgKHByZXZpb3VzQ2FuQXR0
YWNoID09IG1fY2FuQXR0YWNoKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pbnNwZWN0
b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFj
aCkpOworCisgICAgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKG1fY2FuQXR0YWNo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQo
dXJsU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRl
KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIHBsYXRmb3Jt
U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIG1fZWxl
bWVudFNlbGVjdGlvbkFjdGl2ZSA9IGFjdGl2ZTsKKworICAgIGlmIChtX2lnbm9yZUVsZW1lbnRT
ZWxlY3Rpb25DaGFuZ2UpIHsKKyAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdl
ID0gZmFsc2U7CisgICAgICAgIGlmICghbV9pc1Zpc2libGUpCisgICAgICAgICAgICBjbG9zZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAgcGxh
dGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAgZWxzZSBpZiAoaXNDb25uZWN0
ZWQoKSkKKyAgICAgICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBtX2lzUHJv
ZmlsaW5nUGFnZSA9IGFjdGl2ZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0TW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCit7
CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZXRNb2NrQ2FwdHVyZURldmlj
ZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShlbmFi
bGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXREaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxl
KSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNhdmUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2
NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCit7CisgICAgcGxhdGZvcm1TYXZlKGZpbGVuYW1l
LCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpOworfQor
Citib29sIFdlYkluc3BlY3RvclByb3h5OjpzaG91bGRPcGVuQXR0YWNoZWQoKQoreworICAgIHJl
dHVybiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgp
ICYmIGNhbkF0dGFjaCgpOworfQorCisvLyBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBjYW4g
dXNlIHRoZSBzdHVicyBwcm92aWRlZCBoZXJlLgorCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5z
cGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlu
c3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVk
V2luZG93V2lkdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFj
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNo
ZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RvclBhZ2VVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJM
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworRGVidWdnYWJsZUluZm9E
YXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dX
aWR0aCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYjFmZGZj
YTFkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JQcm94eS5oCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
UElPYmplY3QuaCIKKyNpbmNsdWRlICJBdHRhY2htZW50LmgiCisjaW5jbHVkZSAiRGVidWdnYWJs
ZUluZm9EYXRhLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiV2Vi
SW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJXS0dl
b21ldHJ5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKworT0JKQ19DTEFTUyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNWaWV3OworT0JKQ19DTEFT
UyBOU1dpbmRvdzsKK09CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyOwor
T0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOworI2VsaWYgUExBVEZPUk0oV0lO
KQorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBDZXJ0aWZpY2F0ZUluZm87Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJGcmFtZVByb3h5OworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQ7CitjbGFzcyBXZWJQ
YWdlUHJveHk7CitjbGFzcyBXZWJQcmVmZXJlbmNlczsKKworZW51bSBjbGFzcyBBdHRhY2htZW50
U2lkZSB7CisgICAgQm90dG9tLAorICAgIFJpZ2h0LAorICAgIExlZnQsCit9OworCitjbGFzcyBX
ZWJJbnNwZWN0b3JQcm94eQorICAgIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6SW5zcGVjdG9yPgorICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyCisg
ICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKKyNpZiBQTEFURk9STShXSU4p
CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCisjZW5kaWYKK3sK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoV2ViUGFn
ZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViSW5zcGVjdG9yUHJveHkoaW5zcGVjdGVkUGFnZSkpOworICAgIH0KKworICAgIH5XZWJJ
bnNwZWN0b3JQcm94eSgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICAvLyBQdWJs
aWMgQVBJcworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zcGVjdGVkUGFnZTsgfQorICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsgfQorCisgICAgYm9vbCBpc0Nvbm5lY3RlZCgp
IGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQYWdlOyB9CisgICAgYm9vbCBpc1Zpc2libGUo
KSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQorICAgIGJvb2wgaXNGcm9udCgpOworCisg
ICAgdm9pZCBjb25uZWN0KCk7CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGhpZGUoKTsK
KyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBjbG9zZUZvckNyYXNoKCk7CisgICAgdm9pZCBy
ZW9wZW4oKTsKKyAgICB2b2lkIHJlc2V0U3RhdGUoKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKyAg
ICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSopOworCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIGVudW0gY2xhc3MgSW5zcGVjdGlvblRhcmdldFR5cGUgeyBMb2NhbCwg
UmVtb3RlIH07CisgICAgc3RhdGljIFJldGFpblB0cjxOU1dpbmRvdz4gY3JlYXRlRnJvbnRlbmRX
aW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlKTsKKwor
ICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyAgICB2b2lkIGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0ID0gMCk7CisgICAgdm9pZCB3aW5kb3dG
cmFtZURpZENoYW5nZSgpOworICAgIHZvaWQgd2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwor
ICAgIE5TV2luZG93KiBpbnNwZWN0b3JXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3Rv
cldpbmRvdy5nZXQoKTsgfQorCisgICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZSgpOworICAgIHZv
aWQgY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKTsKKworICAgIHZvaWQg
YXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1ZpZXcp
OworICAgIHZvaWQgYXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2lu
ZG93KTsKKyAgICB2b2lkIGF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5ld1dp
bmRvdyk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAg
ICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXcoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclZp
ZXc7IH07CisgICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclBy
b3h5Q2xpZW50PiYmKTsKKyNlbmRpZgorCisgICAgdm9pZCBzaG93Q29uc29sZSgpOworICAgIHZv
aWQgc2hvd1Jlc291cmNlcygpOworICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdl
YkZyYW1lUHJveHkqKTsKKworICAgIEF0dGFjaG1lbnRTaWRlIGF0dGFjaG1lbnRTaWRlKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2lkZTsgfQorICAgIGJvb2wgaXNBdHRhY2hlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNBdHRhY2hlZDsgfQorICAgIHZvaWQgYXR0YWNoUmlnaHQoKTsKKyAg
ICB2b2lkIGF0dGFjaExlZnQoKTsKKyAgICB2b2lkIGF0dGFjaEJvdHRvbSgpOworICAgIHZvaWQg
YXR0YWNoKEF0dGFjaG1lbnRTaWRlID0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7CisgICAgdm9p
ZCBkZXRhY2goKTsKKworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQp
OworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisKKyAgICB2b2lk
IHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworICAgIHZvaWQgc3Rh
cnRXaW5kb3dEcmFnKCk7CisKKyAgICBib29sIGlzUHJvZmlsaW5nUGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNQcm9maWxpbmdQYWdlOyB9CisgICAgdm9pZCB0b2dnbGVQYWdlUHJvZmlsaW5nKCk7
CisKKyAgICBib29sIGlzRWxlbWVudFNlbGVjdGlvbkFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudFNlbGVjdGlvbkFjdGl2ZTsgfQorICAgIHZvaWQgdG9nZ2xlRWxlbWVudFNlbGVjdGlv
bigpOworCisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJUZXN0
OyB9CisKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOworCisg
ICAgLy8gUHJvdmlkZWQgYnkgcGxhdGZvcm0gV2ViSW5zcGVjdG9yUHJveHkgaW1wbGVtZW50YXRp
b25zLgorICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVSTCgpOworICAgIHN0YXRpYyBT
dHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3Rv
ckJhc2VVUkwoKTsKKyAgICBzdGF0aWMgYm9vbCBpc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNv
bnN0IFVSTCYpOworICAgIHN0YXRpYyBEZWJ1Z2dhYmxlSW5mb0RhdGEgaW5mb0ZvckxvY2FsRGVi
dWdnYWJsZSgpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dXaWR0
aDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdpbmRvd0hlaWdodDsKKworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWlnaHQ7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5Kik7CisKKyAgICB2b2lkIGNyZWF0ZUZy
b250ZW5kUGFnZSgpOworICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKwor
ICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0
aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbm5lY3Rpb25UeXBlOjpMb2NhbDsg
fQorCisgICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAg
IHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOworICAgIHZvaWQgcGxhdGZvcm1D
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgdm9pZCBwbGF0Zm9ybURpZENsb3Nl
Rm9yQ3Jhc2goKTsKKyAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOworICAgIHZvaWQgcGxh
dGZvcm1SZXNldFN0YXRlKCk7CisgICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworICAg
IHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAgdm9pZCBwbGF0
Zm9ybUhpZGUoKTsKKyAgICBib29sIHBsYXRmb3JtSXNGcm9udCgpOworICAgIHZvaWQgcGxhdGZv
cm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgcGxhdGZvcm1JbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcGxhdGZvcm1TaG93Q2Vy
dGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisgICAgdW5zaWduZWQg
cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBwbGF0Zm9ybUlu
c3BlY3RlZFdpbmRvd1dpZHRoKCk7CisgICAgdm9pZCBwbGF0Zm9ybUF0dGFjaCgpOworICAgIHZv
aWQgcGxhdGZvcm1EZXRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOworICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKKyAgICB2
b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBw
bGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9v
bCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKKyNlbHNlCisgICAgYm9vbCBwbGF0Zm9ybUNhbkF0dGFj
aChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsgcmV0dXJuIHdlYlByb2Nlc3NDYW5BdHRhY2g7
IH0KKyNlbmRpZgorCisgICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclByb3h5IG1lc3NhZ2Vz
CisgICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9v
bCB1bmRlclRlc3QpOworICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNo
bWVudCk7CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICB2b2lkIGRpZENsb3NlKCk7CisgICAgdm9p
ZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKTsK
KyAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2hvd0NlcnRpZmljYXRl
KGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHZvaWQgZWxlbWVudFNlbGVj
dGlvbkNoYW5nZWQoYm9vbCk7CisgICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9v
bCk7CisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9u
YWw8Ym9vbD4pOworCisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsK
KyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpOworCisgICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7IHJldHVybiBtX2NhbkF0dGFj
aDsgfQorICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7CisKKyAgICB2b2lkIG9wZW4oKTsK
KworICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0OworCisgICAgV2ViUHJlZmVy
ZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0OworCisjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCisgICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRs
ZSgpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIExSRVNV
TFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAgYm9v
bCByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgdm9pZCB3aW5kb3dSZWNlaXZlZE1lc3NhZ2Uo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBXZWJQ
YWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51bGxwdHIgfTsKKyAgICBXZWJQYWdlUHJveHkq
IG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKKworICAgIGJvb2wgbV91bmRlclRlc3QgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0F0
dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuQXR0YWNoIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2hvd01lc3NhZ2VT
ZW50IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2lzT3BlbmluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzQWN0aXZlRnJvbnRlbmQgeyBmYWxz
ZSB9OworCisgICAgQXR0YWNobWVudFNpZGUgbV9hdHRhY2htZW50U2lkZSB7QXR0YWNobWVudFNp
ZGU6OkJvdHRvbX07CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWlu
UHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRvdzsKKyAgICBSZXRhaW5QdHI8V0tXZWJJbnNw
ZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOworICAgIEhhc2hNYXA8U3RyaW5n
LCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOworICAgIFJ1bkxv
b3A6OlRpbWVyPFdlYkluc3BlY3RvclByb3h5PiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZp
dHlUaW1lcjsKKyAgICBTdHJpbmcgbV91cmxTdHJpbmc7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IG1fc2hlZXRSZWN0OworICAgIGJvb2wgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0IHsg
ZmFsc2UgfTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViSW5z
cGVjdG9yUHJveHlDbGllbnQ+IG1fY2xpZW50OworICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JW
aWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5kb3cgeyBudWxs
cHRyIH07CisgICAgR3RrV2lkZ2V0KiBtX2hlYWRlckJhciB7IG51bGxwdHIgfTsKKyAgICBTdHJp
bmcgbV9pbnNwZWN0ZWRVUkxTdHJpbmc7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgSFdORCBt
X2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3RlZFZp
ZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3RvclZpZXdXaW5k
b3cgeyBudWxscHRyIH07CisgICAgSFdORCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyB7IG51bGxw
dHIgfTsKKyAgICBSZWZQdHI8V2ViVmlldz4gbV9pbnNwZWN0b3JWaWV3OworI2VuZGlmCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWJiNzc1NTNjNmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
UHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw1OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JQcm94eSB7
CisgICAgT3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5k
ZXJUZXN0KQorICAgIFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVj
dGlvbklkZW50aWZpZXIpCisKKyAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2Fn
ZSkKKworICAgIEZyb250ZW5kTG9hZGVkKCkKKyAgICBEaWRDbG9zZSgpCisgICAgQnJpbmdUb0Zy
b250KCkKKyAgICBCcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKKyAgICBSZW9wZW4oKQorICAg
IFJlc2V0U3RhdGUoKQorCisgICAgSW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJpbmcgdXJsU3RyaW5n
KQorICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNh
dGVJbmZvKQorICAgIEVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQorICAgIFRp
bWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKKyAgICBTZXRNb2NrQ2FwdHVyZURl
dmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKKworICAgIFNhdmUo
U3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29s
IGZvcmNlU2F2ZUFzKQorICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50
KQorCisgICAgQXR0YWNoQm90dG9tKCkKKyAgICBBdHRhY2hSaWdodCgpCisgICAgQXR0YWNoTGVm
dCgpCisgICAgRGV0YWNoKCkKKworICAgIEF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBh
dmFpbGFibGUpCisKKyAgICBTZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQp
CisgICAgU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKKworICAgIFNldFNo
ZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKworICAgIFN0YXJ0V2luZG93RHJhZygp
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5jZmVhMTVlZTY1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMTAy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclV0aWxpdGllcy5oIgorCisjaW5jbHVkZSAiQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiBIYXNoTWFwPFdlYlBhZ2VQcm94eSosIHVuc2ln
bmVkPiBQYWdlTGV2ZWxNYXA7CisKK3N0YXRpYyBQYWdlTGV2ZWxNYXAmIHBhZ2VMZXZlbE1hcCgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBhZ2VMZXZlbE1hcD4gbWFwOworICAgIHJl
dHVybiBtYXA7Cit9CisKK3Vuc2lnbmVkIGluc3BlY3RvckxldmVsRm9yUGFnZShXZWJQYWdlUHJv
eHkqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpIHsKKyAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0g
cGFnZUxldmVsTWFwKCkuZmluZChwYWdlKTsKKyAgICAgICAgaWYgKGZpbmRSZXN1bHQgIT0gcGFn
ZUxldmVsTWFwKCkuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUg
KyAxOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitTdHJpbmcgaW5zcGVjdG9yUGFnZUdy
b3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIHJldHVybiBt
YWtlU3RyaW5nKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91cExldmVsIiwgaW5zcGVjdG9yTGV2ZWxG
b3JQYWdlKHBhZ2UpLCAiX18iKTsKK30KKwordm9pZCB0cmFja0luc3BlY3RvclBhZ2UoV2ViUGFn
ZVByb3h5KiBpbnNwZWN0b3JQYWdlLCBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCit7Cisg
ICAgcGFnZUxldmVsTWFwKCkuc2V0KGluc3BlY3RvclBhZ2UsIGluc3BlY3RvckxldmVsRm9yUGFn
ZShpbnNwZWN0ZWRQYWdlKSk7Cit9CisKK3ZvaWQgdW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFn
ZVByb3h5KiBpbnNwZWN0b3JQYWdlKQoreworICAgIHBhZ2VMZXZlbE1hcCgpLnJlbW92ZShpbnNw
ZWN0b3JQYWdlKTsKK30KKworc3RhdGljIFdlYlByb2Nlc3NQb29sKiBzX21haW5JbnNwZWN0b3JQ
cm9jZXNzUG9vbDsKK3N0YXRpYyBXZWJQcm9jZXNzUG9vbCogc19uZXN0ZWRJbnNwZWN0b3JQcm9j
ZXNzUG9vbDsKKworV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVk
IGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICAvLyBIYXZpbmcgb3VyIG93biBwcm9jZXNzIHBvb2wg
cmVtb3ZlcyB1cyBmcm9tIHRoZSBtYWluIHByb2Nlc3MgcG9vbCBhbmQKKyAgICAvLyBndWFyYW50
ZWVzIG5vIHByb2Nlc3Mgc2hhcmluZyBmb3Igb3VyIHVzZXIgaW50ZXJmYWNlLgorICAgIFdlYlBy
b2Nlc3NQb29sKiYgcG9vbCA9IChpbnNwZWN0aW9uTGV2ZWwgPT0gMSkgPyBzX21haW5JbnNwZWN0
b3JQcm9jZXNzUG9vbCA6IHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CisgICAgaWYgKCFw
b29sKSB7CisgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IEFQSTo6UHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcG9vbCA9ICZXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlKGNvbmZpZ3VyYXRpb24uZ2V0KCkpLmxlYWtSZWYoKTsKKyAgICAgICAgLy8gRG8gbm90IGRl
bGF5IHByb2Nlc3MgbGF1bmNoIGZvciBpbnNwZWN0b3IgcGFnZXMgYXMgaW5zcGVjdG9yIHBhZ2Vz
IGRvIG5vdCBrbm93IGhvdyB0byB0cmFuc2l0aW9uIGZyb20gYSB0ZXJtaW5hdGVkIHByb2Nlc3Mu
CisgICAgICAgIHBvb2wtPmRpc2FibGVEZWxheWVkV2ViUHJvY2Vzc0xhdW5jaCgpOworICAgIH0K
KyAgICByZXR1cm4gKnBvb2w7Cit9CisKK2Jvb2wgaXNJbnNwZWN0b3JQcm9jZXNzUG9vbChXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCit7CisgICAgcmV0dXJuIChzX21haW5JbnNwZWN0b3JQ
cm9jZXNzUG9vbCAmJiBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCA9PSAmcHJvY2Vzc1Bvb2wp
CisgICAgICAgIHx8IChzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sICYmIHNfbmVzdGVkSW5z
cGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQb29sKTsKK30KKworYm9vbCBpc0luc3BlY3Rv
clBhZ2UoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQoreworICAgIHJldHVybiBwYWdlTGV2ZWxNYXAo
KS5jb250YWlucygmd2ViUGFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxp
dGllcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0
aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTllYTc1
ODhjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFdlYlByb2Nlc3NQb29s
OworCisvLyBUaGUgaW5zcGVjdG9yIHBhZ2UgZ3JvdXBzIGFyZSB1c2VkIHRvIGdpdmUgZGlmZmVy
ZW50IHByZWZlcmVuY2VzIHRvIGVhY2gKKy8vIGluc3BlY3RvciBsZXZlbCBieSBzZXR0aW5nIGEg
cGVyLWxldmVsIHBhZ2UgZ3JvdXAgaWRlbnRpZmllci4KK3Vuc2lnbmVkIGluc3BlY3RvckxldmVs
Rm9yUGFnZShXZWJQYWdlUHJveHkqKTsKK1N0cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlm
aWVyRm9yUGFnZShXZWJQYWdlUHJveHkqKTsKK3ZvaWQgdHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBh
Z2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKTsKK3Zv
aWQgdW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKTsKKwor
V2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVkIGluc3BlY3Rpb25M
ZXZlbCk7Citib29sIGlzSW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKTsKK2Jv
b2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYpOworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmViYmRmODdhY2UKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVn
Z2FibGUuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VE
ZWJ1Z2dhYmxlLmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUg
IldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworV2ViUGFnZURlYnVnZ2FibGU6OldlYlBhZ2VEZWJ1
Z2dhYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCitT
dHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6Om5hbWUoKSBjb25zdAoreworICAgIGlmICghbV9uYW1l
T3ZlcnJpZGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBtX25hbWVPdmVycmlkZTsKKworICAg
IGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLT50aXRsZSgpOworfQorCitTdHJpbmcgV2ViUGFn
ZURlYnVnZ2FibGU6OnVybCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2UubWFpbkZyYW1lKCkp
CisgICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3RyaW5nKCk7CisKKyAgICBTdHJpbmcg
dXJsID0gbV9wYWdlLm1haW5GcmFtZSgpLT51cmwoKS5zdHJpbmcoKTsKKyAgICBpZiAodXJsLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6YmxhbmtVUkwoKS5zdHJpbmcoKTsKKworICAg
IHJldHVybiB1cmw7Cit9CisKK2Jvb2wgV2ViUGFnZURlYnVnZ2FibGU6Omhhc0xvY2FsRGVidWdn
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmhh
c0xvY2FsRnJvbnRlbmQoKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6Y29ubmVjdChG
cm9udGVuZENoYW5uZWwmIGNoYW5uZWwsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0aW9uLCBib29s
IGltbWVkaWF0ZWx5UGF1c2UpCit7CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5j
b25uZWN0RnJvbnRlbmQoY2hhbm5lbCwgaXNBdXRvbWF0aWNDb25uZWN0aW9uLCBpbW1lZGlhdGVs
eVBhdXNlKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6ZGlzY29ubmVjdChGcm9udGVu
ZENoYW5uZWwmIGNoYW5uZWwpCit7CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5k
aXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2FibGU6
OmRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5k
KG1lc3NhZ2UpOworfQorCit2b2lkIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpzZXRJbmRpY2F0aW5nKGJv
b2wgaW5kaWNhdGluZykKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLnNldElu
ZGljYXRpbmcoaW5kaWNhdGluZyk7Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OnNldE5h
bWVPdmVycmlkZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9uYW1lT3ZlcnJpZGUgPSBu
YW1lOworICAgIHVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uOGY4NDhkZTExNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuaApAQCAtMCww
ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rpb25UYXJnZXQuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94
eTsKKworY2xhc3MgV2ViUGFnZURlYnVnZ2FibGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpS
ZW1vdGVJbnNwZWN0aW9uVGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlRGVidWdnYWJsZSk7CitwdWJsaWM6CisgICAg
V2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVByb3h5Jik7CisgICAgfldlYlBhZ2VEZWJ1Z2dhYmxl
KCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpSZW1vdGVDb250cm9sbGFibGVUYXJnZXQ6
OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJv
bGxhYmxlVGFyZ2V0OjpUeXBlOjpXZWJQYWdlOyB9CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
IGZpbmFsOworICAgIFN0cmluZyB1cmwoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGhhc0xvY2Fs
RGVidWdnZXIoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0aW9uID0gZmFsc2UsIGJvb2wg
aW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBmaW5hbDsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIHNldElu
ZGljYXRpbmcoYm9vbCkgZmluYWw7CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWVPdmVycmlkZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZU92ZXJyaWRlOyB9CisgICAgdm9pZCBzZXROYW1lT3ZlcnJp
ZGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7
CisgICAgU3RyaW5nIG1fbmFtZU92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ09OVFJPTExBQkxFX1RBUkdFVChXZWJLaXQ6Oldl
YlBhZ2VEZWJ1Z2dhYmxlLCBXZWJQYWdlKTsKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFlZTI4YmY3MTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmNwcApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFnZW50QmFzZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJn
ZXRBZ2VudC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitzdGF0aWMgU3RyaW5nIGdldFRhcmdl
dElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCit7CisgICAg
cmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdl
LndlYlBhZ2VJRCgpKTsKK30KKworV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OldlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdl
KQorICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRlcjo6Y3JlYXRlKCkpCisgICAg
LCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUobV9mcm9udGVu
ZFJvdXRlci5jb3B5UmVmKCkpKQoreworICAgIGF1dG8gdGFyZ2V0QWdlbnQgPSBtYWtlVW5pcXVl
PEluc3BlY3RvclRhcmdldEFnZW50PihtX2Zyb250ZW5kUm91dGVyLmdldCgpLCBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpKTsKKworICAgIG1fdGFyZ2V0QWdlbnQgPSB0YXJnZXRBZ2VudC5nZXQo
KTsKKworICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdldEFnZW50KSk7Cit9CisKK3Zv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmluaXQoKQoreworICAgIFN0cmluZyBwYWdl
VGFyZ2V0SWQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKG1fcGFnZS53ZWJQ
YWdlSUQoKSk7CisgICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBhZ2VUYXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6cGFnZUNsb3NlZCgpCit7CisgICAgZGlzY29ubmVjdEFsbEZyb250ZW5k
cygpOworCisgICAgbV9hZ2VudHMuZGlzY2FyZFZhbHVlcygpOworfQorCitib29sIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpoYXNMb2NhbEZyb250ZW5kKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9mcm9udGVuZFJvdXRlci0+aGFzTG9jYWxGcm9udGVuZCgpOworfQorCit2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCwgYm9vbCwgYm9vbCkKK3sKKyAgICBib29sIGNvbm5l
Y3RpbmdGaXJzdEZyb250ZW5kID0gIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpOwor
CisgICAgbV9mcm9udGVuZFJvdXRlci0+Y29ubmVjdEZyb250ZW5kKGZyb250ZW5kQ2hhbm5lbCk7
CisKKyAgICBpZiAoY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQpCisgICAgICAgIG1fYWdlbnRzLmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCgmbV9mcm9udGVuZFJvdXRlci5nZXQoKSwgJm1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCkpOworCisgICAgbV9wYWdlLmRpZENoYW5nZUluc3BlY3RvckZy
b250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRDb3VudCgpKTsKKworI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIGlmIChoYXNMb2NhbEZyb250ZW5kKCkpCisgICAg
ICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgpOworI2VuZGlm
Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVu
ZChGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCkKK3sKKyAgICBtX2Zyb250ZW5kUm91
dGVyLT5kaXNjb25uZWN0RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVsKTsKKworICAgIGJvb2wgZGlz
Y29ubmVjdGluZ0xhc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMo
KTsKKyAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkKKyAgICAgICAgbV9hZ2VudHMu
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdG9y
RGVzdHJveWVkKTsKKworICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50
KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKKyAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkKKyAgICAgICAg
bV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCk7CisjZW5kaWYKK30K
Kwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEFsbEZyb250ZW5k
cygpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSBhIGxvY2FsIGluc3BlY3RvciBjbGllbnQuCisK
KyAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBOb3RpZnkgYWdlbnRzIGZpcnN0LCBzaW5jZSB0aGV5IG1heSBuZWVkIHRv
IHVzZSBJbnNwZWN0b3JDbGllbnQuCisgICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsKKwor
ICAgIC8vIERpc2Nvbm5lY3QgYW55IHJlbWFpbmluZyByZW1vdGUgZnJvbnRlbmRzLgorICAgIG1f
ZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIG1fcGFnZS5k
aWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5k
Q291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBtX3BhZ2UucmVt
b3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPmRpc3BhdGNo
KG1lc3NhZ2UpOworfQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCit2b2lkIFdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKK3sK
KyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBtX3BhZ2Uuc2V0SW5kaWNhdGluZyhpbmRp
Y2F0aW5nKTsKKyNlbHNlCisgICAgaWYgKGluZGljYXRpbmcpCisgICAgICAgIG1fcGFnZS5zaG93
SW5zcGVjdG9ySW5kaWNhdGlvbigpOworICAgIGVsc2UKKyAgICAgICAgbV9wYWdlLmhpZGVJbnNw
ZWN0b3JJbmRpY2F0aW9uKCk7CisjZW5kaWYKK30KKyNlbmRpZgorCit2b2lkIFdlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCit7CisgICAgYWRkVGFy
Z2V0KEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdlLCB0YXJnZXRJZCwgdHlwZSkp
OworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkZXN0cm95SW5zcGVjdG9y
VGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit7CisgICAgYXV0byBpdCA9IG1fdGFyZ2V0
cy5maW5kKHRhcmdldElkKTsKKyAgICBpZiAoaXQgPT0gbV90YXJnZXRzLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCppdC0+dmFsdWUp
OworICAgIG1fdGFyZ2V0cy5yZW1vdmUoaXQpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnNl
bmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQsIG1lc3NhZ2UpOworfQorCiti
b29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzaG91bGRQYXVzZUxvYWRpbmcoY29uc3Qg
UHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdldElEKHByb3Zpc2lv
bmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHJldHVybiB0YXJnZXQtPmlzUGF1
c2VkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnNldENvbnRpbnVl
TG9hZGluZ0NhbGxiYWNrKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBh
Z2UsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGF1dG8qIHRhcmdl
dCA9IG1fdGFyZ2V0cy5nZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7CisgICAgQVNT
RVJUKHRhcmdldCk7CisgICAgdGFyZ2V0LT5zZXRSZXN1bWVDYWxsYmFjayhXVEZNb3ZlKGNhbGxi
YWNrKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVBy
b3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQorewor
ICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFn
ZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlOjpQYWdlKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6Ondp
bGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UpCit7CisgICAgZGVzdHJveUluc3BlY3RvclRhcmdldChnZXRUYXJnZXRJRChw
cm92aXNpb25hbFBhZ2UpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9sZFdlYlBh
Z2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlEKQoreworICAgIFN0cmlu
ZyBvbGRJRCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQob2xkV2ViUGFnZUlE
KTsKKyAgICBTdHJpbmcgbmV3SUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElE
KG5ld1dlYlBhZ2VJRCk7CisgICAgYXV0byBuZXdUYXJnZXQgPSBtX3RhcmdldHMudGFrZShuZXdJ
RCk7CisgICAgQVNTRVJUKG5ld1RhcmdldCk7CisgICAgbmV3VGFyZ2V0LT5kaWRDb21taXRQcm92
aXNpb25hbFRhcmdldCgpOworICAgIG1fdGFyZ2V0QWdlbnQtPmRpZENvbW1pdFByb3Zpc2lvbmFs
VGFyZ2V0KG9sZElELCBuZXdJRCk7CisKKyAgICAvLyBXZSd2ZSBkaXNjb25uZWN0ZWQgZnJvbSB0
aGUgb2xkIHBhZ2UgYW5kIHdpbGwgbm90IHJlY2VpdmUgYW55IG1lc3NhZ2UgZnJvbSBpdCwgc28K
KyAgICAvLyB3ZSBkZXN0cm95IGV2ZXJ5dGhpbmcgYnV0IHRoZSBuZXcgdGFyZ2V0IGhlcmUuCisg
ICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDI5Mzc+IGRvIG5vdCBkZXN0cm95
IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvbW1pdHRlZCBwYWdlLgorICAgIGZvciAoYXV0
byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQorICAgICAgICBtX3RhcmdldEFnZW50LT50
YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7CisgICAgbV90YXJnZXRzLmNsZWFyKCk7CisgICAgbV90
YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZShuZXdUYXJnZXQpKTsK
K30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkVGFyZ2V0KHN0ZDo6dW5p
cXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJiB0YXJnZXQpCit7CisgICAgbV90YXJnZXRB
Z2VudC0+dGFyZ2V0Q3JlYXRlZCgqdGFyZ2V0KTsKKyAgICBtX3RhcmdldHMuc2V0KHRhcmdldC0+
aWRlbnRpZmllcigpLCBXVEZNb3ZlKHRhcmdldCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdl
SW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjc4Y2FlZGYwYzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIEZyb250
ZW5kQ2hhbm5lbDsKK2NsYXNzIEZyb250ZW5kUm91dGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQ
YWdlUHJveHkmKTsKKworICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgcGFnZUNsb3NlZCgpOwor
CisgICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbm5lY3RG
cm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNJbnNw
ZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKKyAgICB2b2lk
IGRpc2Nvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOworICAgIHZv
aWQgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOworCisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VG
cm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQorICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKKyNlbmRpZgorCisgICAg
dm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JUYXJn
ZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVj
dG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKKworICAgIGJvb2wgc2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVBy
b3h5JikgY29uc3Q7CisgICAgdm9pZCBzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQ
cm92aXNpb25hbFBhZ2VQcm94eSYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKKworICAgIHZv
aWQgZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7CisgICAg
dm9pZCB3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94
eSYpOworICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFnZUlE
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yVGFyZ2V0UHJveHk+JiYpOworCisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CisgICAgUmVm
PEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7CisgICAgUmVmPElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAgSW5z
cGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5p
cXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5ZDUwZGMyODZiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJ
bnNwZWN0b3JDbGllbnQuaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5j
bHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvclV0aWxzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUg
PGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1
YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNw
ZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVudCwgdWludDY0X3QgY29ubmVjdGlvbklELCB1aW50
NjRfdCB0YXJnZXRJRCkKKyAgICAgICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQp
CisgICAgICAgICwgbV9jb25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQorICAgICAgICAsIG1fdGFy
Z2V0SUQodGFyZ2V0SUQpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQodGhpcyk7
CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3RvclByb3h5KCkKKyAgICB7CisgICAgICAgIG1f
cHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9wcm94eS0+aW52YWxpZGF0ZSgp
OworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisgICAgeworICAgICAgICAvLyBGSVhNRSA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwg
ZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgorICAgICAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxl
SW5mbz4gZGVidWdnYWJsZUluZm8gPSBBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdn
YWJsZUluZm9EYXRhOjplbXB0eSgpKTsKKyAgICAgICAgZGVidWdnYWJsZUluZm8tPnNldERlYnVn
Z2FibGVUeXBlKEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2UpOworICAgICAgICBt
X3Byb3h5LT5sb2FkKFdURk1vdmUoZGVidWdnYWJsZUluZm8pLCBtX2luc3BlY3RvckNsaWVudC5i
YWNrZW5kQ29tbWFuZHNVUkwoKSk7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRhcmdldE5hbWUo
Y29uc3QgQ1N0cmluZyYgbmFtZSkKKyAgICB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBt
X3Byb3h5LT51cGRhdGVXaW5kb3dUaXRsZShuYW1lKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKKyAgICB9CisK
KyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNzYWdlVG9CYWNr
ZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVj
dG9yQ2xpZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElEKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3By
b3h5OworICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7CisgICAg
dWludDY0X3QgbV9jb25uZWN0aW9uSUQ7CisgICAgdWludDY0X3QgbV90YXJnZXRJRDsKK307CisK
K2NvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyYgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjptZXNzYWdlSGFuZGxlcnMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnM+IG1lc3NhZ2VIYW5kbGVycyA9
IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5kbGVycyh7CisgICAgeyAiRGlkQ2xvc2UiLCBz
dGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7IHsg
fSwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiwgZ3BvaW50ZXIgdXNl
ckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJ
bnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBjbGllbnQuY29ubmVjdGlv
bkRpZENsb3NlKCk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJEaWRTZXR1cEluc3BlY3Rv
ckNsaWVudCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2Fs
bGJhY2s+IHsgIihheSkiLAorICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQq
IHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBjbGll
bnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOworICAg
ICAgICAgICAgR1JlZlB0cjxHVmFyaWFudD4gYmFja2VuZENvbW1hbmRzVmFyaWFudDsKKyAgICAg
ICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIihAYXkpIiwgJmJhY2tlbmRDb21tYW5k
c1ZhcmlhbnQub3V0UHRyKCkpOworICAgICAgICAgICAgY2xpZW50LnNldEJhY2tlbmRDb21tYW5k
cyhnX3ZhcmlhbnRfZ2V0X2J5dGVzdHJpbmcoYmFja2VuZENvbW1hbmRzVmFyaWFudC5nZXQoKSkp
OworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiU2V0VGFyZ2V0TGlzdCIsIHN0ZDo6cGFpcjxD
U3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0YSh0c3NzYikp
IiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19j
YXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGd1aW50
NjQgY29ubmVjdGlvbklEOworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHVmFyaWFudEl0ZXI+
IGl0ZXI7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodGEodHNzc2Ip
KSIsICZjb25uZWN0aW9uSUQsICZpdGVyLm91dFB0cigpKTsKKyAgICAgICAgICAgIHNpemVfdCB0
YXJnZXRDb3VudCA9IGdfdmFyaWFudF9pdGVyX25fY2hpbGRyZW4oaXRlci5nZXQoKSk7CisgICAg
ICAgICAgICBWZWN0b3I8UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpUYXJnZXQ+IHRhcmdldExpc3Q7
CisgICAgICAgICAgICB0YXJnZXRMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGFyZ2V0Q291
bnQpOworICAgICAgICAgICAgZ3VpbnQ2NCB0YXJnZXRJRDsKKyAgICAgICAgICAgIGNvbnN0IGNo
YXIqIHR5cGU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgY29u
c3QgY2hhciogdXJsOworICAgICAgICAgICAgZ2Jvb2xlYW4gaGFzTG9jYWxEZWJ1Z2dlcjsKKyAg
ICAgICAgICAgIHdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wKGl0ZXIuZ2V0KCksICIodCZzJnMm
c2IpIiwgJnRhcmdldElELCAmdHlwZSwgJm5hbWUsICZ1cmwsICZoYXNMb2NhbERlYnVnZ2VyKSkg
eworICAgICAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHR5cGUsICJXZWIiKSB8fCAhZ19zdHJj
bXAwKHR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICAgICAgICAgIHRhcmdldExpc3Qu
dW5jaGVja2VkQXBwZW5kKHsgdGFyZ2V0SUQsIHR5cGUsIG5hbWUsIHVybCB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNsaWVudC5zZXRUYXJnZXRMaXN0KGNvbm5lY3Rpb25JRCwgV1RG
TW92ZSh0YXJnZXRMaXN0KSk7CisgICAgICAgIH19CisgICAgfSwKKyAgICB7ICJTZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2Fn
ZUNhbGxiYWNrPiB7ICIodHRzKSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFy
aWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8m
IGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7
CisgICAgICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQ7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBtZXNzYWdlOworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0
ZXJzLCAiKHR0JnMpIiwgJmNvbm5lY3Rpb25JRCwgJnRhcmdldElELCAmbWVzc2FnZSk7CisgICAg
ICAgICAgICBjbGllbnQuc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQsIG1lc3NhZ2UpOworICAgICAgICB9fQorICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gbWVz
c2FnZUhhbmRsZXJzOworfQorCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3Rv
ckNsaWVudChjb25zdCBjaGFyKiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0
b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisgICAgOiBtX2hvc3RBbmRQb3J0KFN0cmluZzo6ZnJvbVVU
RjgoYWRkcmVzcykgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0KSkKKyAgICAsIG1fb2JzZXJ2
ZXIob2JzZXJ2ZXIpCisgICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxl
X25ldygpKSkKK3sKKyAgICBHUmVmUHRyPEdTb2NrZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFk
b3B0R1JlZihnX3NvY2tldF9jbGllbnRfbmV3KCkpOworICAgIGdfc29ja2V0X2NsaWVudF9jb25u
ZWN0X3RvX2hvc3RfYXN5bmMoc29ja2V0Q2xpZW50LmdldCgpLCBtX2hvc3RBbmRQb3J0LnV0Zjgo
KS5kYXRhKCksIDAsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIFtdKEdPYmplY3QqIG9i
amVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBHUmVmUHRyPEdT
b2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9j
b25uZWN0X3RvX2hvc3RfZmluaXNoKEdfU09DS0VUX0NMSUVOVChvYmplY3QpLCByZXN1bHQsICZl
cnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5n
ZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGF1dG8qIGNsaWVudCA9IHN0YXRpY19jYXN0PFJlbW90ZUlu
c3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKQor
ICAgICAgICAgICAgICAgIGNsaWVudC0+c2V0dXBDb25uZWN0aW9uKFNvY2tldENvbm5lY3Rpb246
OmNyZWF0ZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBtZXNzYWdlSGFuZGxlcnMoKSwgY2xpZW50KSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlJlbW90
ZUluc3BlY3RvckNsaWVudCBmYWlsZWQgdG8gY29ubmVjdCB0byBpbnNwZWN0b3Igc2VydmVyOiAl
cyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBjbGllbnQtPm1fb2JzZXJ2ZXIu
Y29ubmVjdGlvbkNsb3NlZCgqY2xpZW50KTsKKyAgICAgICAgICAgIH0KKyAgICB9LCB0aGlzKTsK
K30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkKK3sK
KyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldHVwQ29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVj
dGlvbj4mJiBjb25uZWN0aW9uKQoreworICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUo
Y29ubmVjdGlvbik7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXBJ
bnNwZWN0b3JDbGllbnQiLCBnX3ZhcmlhbnRfbmV3KCIoQGF5KSIsIGdfdmFyaWFudF9uZXdfYnl0
ZXN0cmluZyhJbnNwZWN0b3I6OmJhY2tlbmRDb21tYW5kc0hhc2goKS5kYXRhKCkpKSk7Cit9CisK
K3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hh
ciogYmFja2VuZENvbW1hbmRzKQoreworICAgIGlmICghYmFja2VuZENvbW1hbmRzIHx8ICFiYWNr
ZW5kQ29tbWFuZHNbMF0pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRh
OworICAgIGJhc2U2NEVuY29kZShiYWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFu
ZHMpLCBiYXNlNjREYXRhKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQv
amF2YXNjcmlwdDtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlkQ2xvc2UoKQoreworICAgIG1fdGFyZ2V0cy5jbGVhcigp
OworICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKKyAgICBtX3NvY2tldENvbm5lY3Rp
b24gPSBudWxscHRyOworICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Cit9
CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rp
b25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2luc3Bl
Y3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElE
KSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SURdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElE
KTsKKyAgICB9KTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3coKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwIiwgZ192YXJpYW50
X25ldygiKHR0KSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKyAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdl
dElELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5z
ZW5kTWVzc2FnZSgiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiLCBnX3ZhcmlhbnRfbmV3KCIodHRzKSIs
IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOworfQorCit2
b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQodWludDY0X3QgY29u
bmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQ
cm94eU1hcC5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSkp
OworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIkZyb250ZW5kRGlkQ2xvc2Ui
LCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworICAgIG1f
aW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFy
Z2V0SUQpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3Qo
dWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmIHRhcmdldExpc3QpCit7Cisg
ICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0cyB0byByZW1vdmUgdGhlbS4KKyAgICBWZWN0b3I8dWlu
dDY0X3QsIDQ+IHRhcmdldHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb25UYXJn
ZXRQYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKKyAgICAgICAgaWYgKGNvbm5l
Y3Rpb25UYXJnZXRQYWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgYXV0
byYgdGFyZ2V0IDogdGFyZ2V0TGlzdCkgeworICAgICAgICAgICAgaWYgKHRhcmdldC5pZCA9PSBj
b25uZWN0aW9uVGFyZ2V0UGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBtX2luc3BlY3Rv
clByb3h5TWFwLmdldChjb25uZWN0aW9uVGFyZ2V0UGFpciktPnNldFRhcmdldE5hbWUodGFyZ2V0
Lm5hbWUpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kKQorICAg
ICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNv
bmQpOworICAgIH0KKyAgICBmb3IgKGF1dG8gdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCisg
ICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rp
b25JRCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZN
b3ZlKHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlz
KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKiBt
ZXNzYWdlKQoreworICAgIGF1dG8gcHJveHkgPSBtX2luc3BlY3RvclByb3h5TWFwLmdldChzdGQ6
Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisgICAgQVNTRVJUKHByb3h5KTsK
KyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm47CisgICAgcHJveHktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmFkZWUwMmNlNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCArMSw5MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxhYmxlIEdDYW5j
ZWxsYWJsZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNs
aWVudDsKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OworY2xhc3MgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk7CisKK2NsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOwor
fTsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFy
KiBhZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYpOworICAg
IH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKKworICAgIHN0cnVjdCBUYXJnZXQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdWludDY0X3QgaWQ7CisgICAgICAgIENTdHJpbmcgdHlwZTsKKyAgICAg
ICAgQ1N0cmluZyBuYW1lOworICAgICAgICBDU3RyaW5nIHVybDsKKyAgICB9OworCisgICAgY29u
c3QgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXRzOyB9CisgICAgY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCgpIGNvbnN0
IHsgcmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21t
YW5kc1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9CisKKyAgICB2
b2lkIGluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCk7Cisg
ICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2
NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5k
KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOworCitwcml2YXRlOgor
ICAgIHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMmIG1lc3Nh
Z2VIYW5kbGVycygpOworICAgIHZvaWQgc2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0
aW9uPiYmKTsKKyAgICB2b2lkIGNvbm5lY3Rpb25EaWRDbG9zZSgpOworCisgICAgdm9pZCBzZXRC
YWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOworICAgIHZvaWQgc2V0VGFyZ2V0TGlzdCh1aW50
NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYpOworICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNv
bnN0IGNoYXIqKTsKKworICAgIFN0cmluZyBtX2hvc3RBbmRQb3J0OworICAgIFN0cmluZyBtX2Jh
Y2tlbmRDb21tYW5kc1VSTDsKKyAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgbV9vYnNlcnZl
cjsKKyAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOworICAg
IEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIEhhc2hNYXA8dWludDY0
X3QsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dWlu
dDY0X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5Pj4g
bV9pbnNwZWN0b3JQcm94eU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMTA4
OGRkMDhiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCkBAIC0wLDAgKzEsMTc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisj
aWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0
b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nl
cnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5Ojp1cGRhdGVXaW5kb3dUaXRsZShjb25zdCBDU3RyaW5nJiB0YXJnZXROYW1l
KQoreworICAgIGlmICghbV93aW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWJraXRJbnNw
ZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhtX3dpbmRvdyks
ICF0YXJnZXROYW1lLmlzTnVsbCgpID8gdGFyZ2V0TmFtZS5kYXRhKCkgOiBudWxscHRyKTsKK30K
Kworc3RhdGljIHZvaWQgcmVtb3RlSW5zcGVjdG9yVmlld0Rlc3Ryb3llZChSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eSogaW5zcGVjdG9yUHJveHkpCit7CisgICAgaW5zcGVjdG9yUHJveHktPmNsb3Nl
RnJvbUNyYXNoKCk7Cit9CisKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBBU1NFUlQoIW1f
d2ViVmlldyk7CisKKyAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0
ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVMT1BF
Ul9NT0RFKQorICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3Bl
Y3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVm
ZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNl
cy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5k
aWYKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBh
Z2VHcm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKKworICAgIGF1dG8gcGFnZUNvbmZp
Z3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rv
ckxldmVsRm9yUGFnZShudWxscHRyKSkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVm
ZXJlbmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBh
Z2VHcm91cChwYWdlR3JvdXAucHRyKCkpOworICAgIG1fd2ViVmlldyA9IEdUS19XSURHRVQod2Vi
a2l0V2ViVmlld0Jhc2VDcmVhdGUoKnBhZ2VDb25maWd1cmF0aW9uLnB0cigpKSk7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2ViVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKHJl
bW90ZUluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKyAgICBnX29iamVjdF9hZGRfd2Vh
a19wb2ludGVyKEdfT0JKRUNUKG1fd2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
bV93ZWJWaWV3KSk7CisKKyAgICBtX3dpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhu
dWxscHRyKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fd2luZG93KSwg
bV93ZWJWaWV3KTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV93ZWJWaWV3KTsKKworICAgIGdfb2Jq
ZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV93aW5kb3cpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJm1fd2luZG93KSk7CisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1co
bV93aW5kb3cpKTsKKworICAgIHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICht
X3dlYlZpZXcpIHsKKyAgICAgICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFz
ZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSkpCisgICAgICAgICAgICB3
ZWJQYWdlLT5jbG9zZSgpOworICAgIH0KKyAgICBpZiAobV93aW5kb3cpCisgICAgICAgIGd0a193
aWRnZXRfZGVzdHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisgICAg
ICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1fd2luZG93KSk7Cit9CisKK3N0YXRp
YyB2b2lkIHJlbW90ZUZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VP
YmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBH
RmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOworICAgIGlmICghZ19maWxlX3JlcGxh
Y2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkq
Pih1c2VyRGF0YSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChm
aWxlKSk7CisgICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cp
OworCisgICAgR1JlZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVm
KGd0a19maWxlX2Nob29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxlIiwKKyAgICAgICAgR1RLX1dJ
TkRPVyhtX3dpbmRvdyksIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUsICJTYXZlIiwgIkNh
bmNlbCIpKTsKKworICAgIEd0a0ZpbGVDaG9vc2VyKiBjaG9vc2VyID0gR1RLX0ZJTEVfQ0hPT1NF
UihkaWFsb2cuZ2V0KCkpOworICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9j
b25maXJtYXRpb24oY2hvb3NlciwgVFJVRSk7CisKKyAgICAvLyBTb21lIGluc3BlY3RvciB2aWV3
cyAoQXVkaXRzIGZvciBpbnN0YW5jZSkgdXNlIGEgY3VzdG9tIFVSSSBzY2hlbWUsIHN1Y2gKKyAg
ICAvLyBhcyB3ZWItaW5zcGVjdG9yLiBTbyB3ZSBjYW4ndCByZWx5IG9uIHRoZSBVUkwgYmVpbmcg
YSB2YWxpZCBmaWxlOi8vLyBVUkwKKyAgICAvLyB1bmZvcnR1bmF0ZWx5LgorICAgIFVSTCB1cmwo
VVJMKCksIHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gU3RyaXAgbGVhZGluZyAvIGNoYXJhY3Rlci4K
KyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9jdXJyZW50X25hbWUoY2hvb3NlciwgdXJsLnBhdGgo
KS5zdWJzdHJpbmcoMSkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAoZ3RrX25hdGl2ZV9kaWFs
b2dfcnVuKEdUS19OQVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9B
Q0NFUFQpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOwor
ICAgIENTdHJpbmcgZGF0YVN0cmluZzsKKyAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBh
ZGRpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhVmVjdG9yLnNocmlua1Rv
Rml0KCk7CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsK
KworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJp
bmcuZGF0YSgpIDogZGF0YVZlY3Rvci5kYXRhKCk7CisgICAgc2l6ZV90IGRhdGFMZW5ndGggPSAh
ZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNp
emUoKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29z
ZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVf
Z2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIGdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2FzeW5j
KGZpbGUuZ2V0KCksIGRhdGEsIGRhdGFMZW5ndGgsIG51bGxwdHIsIGZhbHNlLAorICAgICAgICBH
X0ZJTEVfQ1JFQVRFX1JFUExBQ0VfREVTVElOQVRJT04sIG51bGxwdHIsIHJlbW90ZUZpbGVSZXBs
YWNlQ29udGVudHNDYWxsYmFjaywgbV9pbnNwZWN0b3JQYWdlKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKQorewor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0
ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94
eUNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41OTljNDQ2
NTc2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgPSBk
ZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5Jikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclByb3h5JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5Jiwg
Y29uc3QgU3RyaW5nJiB1cmwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3Bl
Y3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yUHJv
eHkmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYklu
c3BlY3RvclByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCB3aWR0aCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5z
cGVjdG9yUHJveHkmLCBib29sIGF2YWlsYWJsZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5jZmRlMzQ5YmI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCkBA
IC0wLDAgKzEsNTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9s
YSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSA8Z25zQGdub21lLm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5o
IgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKKyNpbmNsdWRlICJXS0FycmF5Lmgi
CisjaW5jbHVkZSAiV0tDb250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJXS011dGFibGVBcnJh
eS5oIgorI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgorI2luY2x1ZGUgIldl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0
a1V0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkIGluc3BlY3RvclZpZXdEZXN0
cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgV2ViSW5zcGVjdG9y
UHJveHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPih1
c2VyRGF0YSk7CisKKyAgICAvLyBJbmZvcm0gV2ViUHJvY2VzcyBhYm91dCB3ZWJpbnNwZWN0b3Ig
Y2xvc3VyZS4gTm90IGRvaW5nIHNvLAorICAgIC8vIHJlc3VsdHMgaW4gZmFpbHVyZSBvZiBzdWJz
ZXF1ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9yLgorICAgIGluc3BlY3RvclByb3h5LT5j
bG9zZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRDbGllbnQoc3RkOjp1bmlx
dWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiYmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVu
dCA9IFdURk1vdmUoY2xpZW50KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRl
SW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3Rvcldp
bmRvdyk7CisgICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BF
Q1RPUl9XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCAhbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNF
bXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxTdHJpbmcudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIpOwor
fQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXS1Bh
Z2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdLU3RyaW5nUmVmLCBXS1N0
cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVk
IGxvbmcgbG9uZyBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVj
dGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZCBs
b25nIGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnREYXRhYmFzZVVzYWdlICogMS4yNSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5
ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGll
bnRJbmZvKSk7CisgICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKKyAgICB3ZWJJbnNwZWN0
b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25S
ZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVy
UmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgLy8gQWxsb3cg
bm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIEFQSTo6RnJhbWVJbmZv
KiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUo
KTsKKyAgICBpZiAoc291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7
CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKKyAg
ICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKKwor
ICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYg
KFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJs
KCkpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2Fk
aW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdlLgorICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmln
bm9yZSgpOworCisgICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBh
Z2UuCisgICAgd2ViSW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3Qo
V1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldENvbnRleHRNZW51RnJvbVBy
b3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tBcnJheVJlZiBwcm9wb3NlZE1lbnVSZWYs
IFdLQXJyYXlSZWYqIG5ld01lbnVSZWYsIFdLSGl0VGVzdFJlc3VsdFJlZiwgV0tUeXBlUmVmLCBj
b25zdCB2b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJheVJlZiBtZW51SXRlbXMgPSBXS011dGFi
bGVBcnJheUNyZWF0ZSgpOworCisgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUocHJv
cG9zZWRNZW51UmVmKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgV0tDb250ZXh0TWVudUl0ZW1SZWYgY29udGV4dE1lbnVJdGVtID0gc3RhdGljX2Nh
c3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChwcm9wb3NlZE1l
bnVSZWYsIGkpKTsKKyAgICAgICAgc3dpdGNoIChXS0NvbnRleHRNZW51SXRlbUdldFRhZyhjb250
ZXh0TWVudUl0ZW0pKSB7CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bmtJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1h
Z2VJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJh
bWVJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVk
aWFJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9h
ZExpbmtUb0Rpc2s6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJ
bWFnZVRvRGlzazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgV0tBcnJheUFwcGVuZEl0ZW0obWVudUl0ZW1zLCBjb250ZXh0TWVudUl0ZW0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbmV3TWVudVJlZiA9IG1l
bnVJdGVtczsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOworICAg
IEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3KTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQ
cmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNp
ZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNw
ZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNl
dHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUp
OworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5h
YmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGlt
ZUZsYWdzKHsKKyAgICB9KTsKKyAgICBhdXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3Jl
YXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkp
OworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246
OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVj
dG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlv
bi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKKyAgICBtX2luc3BlY3RvclZpZXcg
PSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5w
dHIoKSkpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0
b3JWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcpKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNL
KGluc3BlY3RvclZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKKworICAgIFdLUGFnZVVJQ2xpZW50VjIg
dWlDbGllbnQgPSB7CisgICAgICAgIHsgMiwgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBj
cmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8g
c2hvd1BhZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2xvc2VQYWdlCisgICAgICAgIG51bGxwdHIs
IC8vIHRha2VGb2N1cworICAgICAgICBudWxscHRyLCAvLyBmb2N1cworICAgICAgICBudWxscHRy
LCAvLyB1bmZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAorICAg
ICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQorICAgICAgICBudWxscHRyLCAv
LyBydW5KYXZhU2NyaXB0UHJvbXB0CisgICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQK
KyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZv
clVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tl
ZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRs
ZUtleUV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAg
ICAgICAgbnVsbHB0ciwgLy8gYXJlVG9vbGJhcnNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8v
IHNldFRvb2xiYXJzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJWaXNpYmxl
CisgICAgICAgIG51bGxwdHIsIC8vIHNldE1lbnVCYXJWaXNpYmxlCisgICAgICAgIG51bGxwdHIs
IC8vIGlzU3RhdHVzQmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNCYXJW
aXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCisgICAgICAgIG51bGxwdHIs
IC8vIHNldFJlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZSwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUsCisgICAgICAgIG51bGxwdHIsIC8vIHJ1
bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAorICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3Cisg
ICAgICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwKKyAgICAgICAgZXhjZWVkZWREYXRhYmFz
ZVF1b3RhLAorICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwsCisgICAgICAgIG51bGxw
dHIsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAg
ICAgbnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0CisgICAgICAgIG51bGxwdHIsIC8vIGZvb3Rlckhl
aWdodAorICAgICAgICBudWxscHRyLCAvLyBkcmF3SGVhZGVyCisgICAgICAgIG51bGxwdHIsIC8v
IGRyYXdGb290ZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gcHJpbnRGcmFtZQorICAgICAgICBudWxs
cHRyLCAvLyBydW5Nb2RhbAorICAgICAgICBudWxscHRyLCAvLyB1bnVzZWQKKyAgICAgICAgbnVs
bHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgorICAgICAgICBudWxscHRy
LCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0CisgICAgICAgIG51bGxwdHIsIC8vIGNyZWF0
ZVBhZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKKyAgICAg
ICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2Rl
cHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9yUGlja2Vy
CisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgorICAgICAgICBudWxscHRyLCAv
LyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICB9OworCisgICAgV0tQYWdlTmF2
aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQgPSB7CisgICAgICAgIHsgMCwgdGhpcyB9
LAorICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAorICAgICAgICBudWxs
cHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAorICAgICAgICBudWxscHRyLCAvLyBkaWRT
dGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRD
b21taXROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24K
KyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkRmluaXNoRG9jdW1lbnRMb2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFu
Z2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UKKyAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAorICAgICAgICBudWxscHRyLCAvLyBjb3B5
V2ViQ3J5cHRvTWFzdGVyS2V5CisKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0
aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUK
KyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAorICAgIH07CisKKyAg
ICBXS1BhZ2VDb250ZXh0TWVudUNsaWVudFYzIGNvbnRleHRNZW51Q2xpZW50ID0geworICAgICAg
ICB7IDMsIHRoaXMgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVGcm9tUHJv
cG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gY3Vz
dG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQKKyAgICAgICAgbnVsbHB0ciwgLy8gY29udGV4dE1l
bnVEaXNtaXNzZWQKKyAgICAgICAgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51LAorICAg
ICAgICBudWxscHRyLCAvLyBzaG93Q29udGV4dE1lbnUKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlk
ZUNvbnRleHRNZW51CisgICAgfTsKKworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9
IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2luc3BlY3Rv
clZpZXcpKTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7CisKKyAgICBXS1BhZ2VTZXRQYWdl
VUlDbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZ1aUNsaWVudC5iYXNlKTsKKyAgICBXS1Bh
Z2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRp
b25DbGllbnQuYmFzZSk7CisgICAgV0tQYWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJ
KGluc3BlY3RvclBhZ2UpLCAmY29udGV4dE1lbnVDbGllbnQuYmFzZSk7CisKKyAgICByZXR1cm4g
aW5zcGVjdG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVh
dGVGcm9udGVuZFdpbmRvdygpCit7CisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5vcGVu
V2luZG93KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0
ZWRWaWV3UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoaW5zcGVjdGVkUGFnZSgpLT52
aWV3V2lkZ2V0KCkpOworICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVs
V2luZG93KGluc3BlY3RlZFZpZXdQYXJlbnQpKQorICAgICAgICBpbnNwZWN0ZWRWaWV3UGFyZW50
ID0gbnVsbHB0cjsKKworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOworICAgIG1faW5z
cGVjdG9yV2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KGluc3BlY3RlZFZpZXdQYXJl
bnQgPyBHVEtfV0lORE9XKGluc3BlY3RlZFZpZXdQYXJlbnQpIDogbnVsbHB0cik7CisgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVj
dG9yVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7CisKKyAgICBp
ZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgdXBkYXRlSW5zcGVj
dG9yV2luZG93VGl0bGUoKTsKKworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV9pbnNwZWN0b3JXaW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVj
dG9yV2luZG93KSk7CisgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV9pbnNwZWN0
b3JXaW5kb3cpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yVmlldykgeworICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7
CisgICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2xvc2UoKnRoaXMpOworCisgICAgaWYgKG1f
aW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3Rv
cldpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbnVsbHB0cjsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0
YXRlKCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJv
bnQoKQoreworICAgIGlmIChtX2lzT3BlbmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fY2xpZW50ICYmIG1fY2xpZW50LT5icmluZ1RvRnJvbnQoKnRoaXMpKQorICAgICAgICByZXR1
cm47CisKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1f
aW5zcGVjdG9yVmlldyk7CisgICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZl
bFdpbmRvdyhwYXJlbnQpKQorICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhw
YXJlbnQpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQoreworICAgIEd0a1dpZGdldCogcGFy
ZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKKyAgICBpZiAo
V2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCisgICAgICAg
IHJldHVybiBtX2lzVmlzaWJsZSAmJiBndGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBh
cmVudCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1f
aW5zcGVjdGVkVVJMU3RyaW5nID0gdXJsOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoKnRoaXMsIHVybCk7CisKKyAgICBpZiAobV9pbnNw
ZWN0b3JXaW5kb3cpCisgICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbCIpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRl
c3RQYWdlVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0
L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbCIpOworfQorCitTdHJpbmcgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQoreworICAgIHJldHVybiBTdHJpbmcoInJl
c291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL1VzZXJJbnRlcmZhY2UvIik7Cit9CisKK0Rl
YnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJs
ZSgpCit7CisgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMg
c2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KKyAg
ICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpOworfQorCit1bnNpZ25lZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIHJl
dHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2UoKS0+dmll
d1dpZGdldCgpKTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5z
cGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0
ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+
IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7CisgICAgaWYgKG1faW5zcGVjdG9yV2lu
ZG93KSB7CisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNw
ZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Cisg
ICAgfQorCisgICAgLy8gU2V0IGEgZGVmYXVsdCBzaXplcyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNo
ZWRTaXplID0gMzAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRX
aWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVp
Z2h0ID0gMjUwOworCisgICAgaWYgKG1fYXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6
OkJvdHRvbSkgeworICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6
Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRh
Y2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihk
ZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAgICB9CisKKyAg
ICBpZiAobV9jbGllbnQgJiYgbV9jbGllbnQtPmF0dGFjaCgqdGhpcykpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklF
V19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBt
X2F0dGFjaG1lbnRTaWRlKTsKKyAgICBndGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAgIGlm
ICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmll
dzsKKyAgICBpZiAoIW1fY2xpZW50IHx8ICFtX2NsaWVudC0+ZGV0YWNoKCp0aGlzKSkgeworICAg
ICAgICAvLyBEZXRhY2ggaXMgY2FsbGVkIHdoZW4gbV9pc0F0dGFjaGVkIGlzIHRydWUsIGJ1dCBp
dCBjb3VsZCBjYWxsZWQgYmVmb3JlCisgICAgICAgIC8vIHRoZSBpbnNwZWN0b3IgaXMgb3BlbmVk
IGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hvd24vY2xvc2VkIHF1aWNrbHkuIFNvLAorICAgICAgICAv
LyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBhcmVudCB5ZXQuCisgICAgICAgIGlmIChHdGtXaWRnZXQq
IHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3BhcmVudChtX2luc3BlY3RvclZpZXcpKQorICAgICAg
ICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBtX2luc3Bl
Y3RvclZpZXcpOworICAgIH0KKworICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZp
c2libGUuIFRoaXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVk
CisgICAgLy8gYW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Ig
d2luZG93LgorICAgIGlmICghbV9pc1Zpc2libGUpIHsKKyAgICAgICAgLy8gVGhlIGluc3BlY3Rv
ciB2aWV3IHdpbGwgYmUgZGVzdHJveWVkLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhl
IHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRoZQorICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBj
YXNlLCBzaW5jZSBpdCdzIGFscmVhZHkgY2xvc2VkLgorICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisgICAgICAgIG1faW5zcGVjdG9y
VmlldyA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvcGVuKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VB
dHRhY2hlZEhlaWdodCgqdGhpcywgaGVpZ2h0KTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVNldElu
c3BlY3RvclZpZXdTaXplKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmll
d1dpZGdldCgpKSwgaGVpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAgIGlmICghbV9p
c0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKCp0aGlzLCB3aWR0aCk7CisgICAgd2Vi
a2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShp
bnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kworc3RhdGljIHZvaWQgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJj
ZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAg
IEdGaWxlKiBmaWxlID0gR19GSUxFKHNvdXJjZU9iamVjdCk7CisgICAgaWYgKCFnX2ZpbGVfcmVw
bGFjZV9jb250ZW50c19maW5pc2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94
eSo+KHVzZXJEYXRhKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRo
KGZpbGUpKTsKKyAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OkRpZFNhdmUocGF0aC5nZXQoKSksIHBhZ2UtPndlYlBhZ2VJRCgpKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVEaWFsb2cpCit7CisgICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7CisKKyAgICBH
dGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmll
dyk7CisgICAgaWYgKCFXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFy
ZW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2
ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfbmF0aXZlX25ldygiU2F2ZSBG
aWxlIiwKKyAgICAgICAgR1RLX1dJTkRPVyhwYXJlbnQpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElP
Tl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7CisKKyAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3Nl
ciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKKyAgICBndGtfZmlsZV9jaG9vc2Vy
X3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOworCisgICAgLy8g
U29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBV
Ukkgc2NoZW1lLCBzdWNoCisgICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVs
eSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCisgICAgLy8gdW5mb3J0dW5h
dGVseS4KKyAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOworICAgIC8vIFN0cmlwIGxl
YWRpbmcgLyBjaGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1l
KGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
aWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkp
KSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
Y2hhcj4gZGF0YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CisgICAgaWYgKGJhc2U2
NEVuY29kZWQpIHsKKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3Rv
ciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIH0gZWxzZQorICAgICAgICBkYXRhU3RyaW5n
ID0gY29udGVudC51dGY4KCk7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcu
aXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIHNp
emVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0
aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0
R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKKyAgICBHVW5pcXVlUHRy
PGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVw
bGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRy
LCBmYWxzZSwKKyAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxs
cHRyLCBmaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxh
YmxlKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUF0
dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywgYXZhaWxhYmxlKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3Rr
L1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjE0OTBmMGU2ZjMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3Bw
CkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JX
aW5kb3cuaCIKKworI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSA8Z2xp
Yi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IHsKKyAg
ICBHdGtXaW5kb3cgcGFyZW50OworCisgICAgR3RrV2lkZ2V0KiBoZWFkZXJCYXI7Cit9OworCitz
dHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzIHsKKyAgICBHdGtXaW5kb3dDbGFzcyBw
YXJlbnQ7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdEluc3BlY3RvcldpbmRvdywgd2Via2l0
X2luc3BlY3Rvcl93aW5kb3csIEdUS19UWVBFX1dJTkRPVykKKworc3RhdGljIHZvaWQgd2Via2l0
X2luc3BlY3Rvcl93aW5kb3dfY2xhc3NfaW5pdChXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyop
Cit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2luaXQoV2ViS2l0
SW5zcGVjdG9yV2luZG93KiB3aW5kb3cpCit7CisgICAgd2luZG93LT5oZWFkZXJCYXIgPSBndGtf
aGVhZGVyX2Jhcl9uZXcoKTsKKyAgICBndGtfaGVhZGVyX2Jhcl9zZXRfdGl0bGUoR1RLX0hFQURF
Ul9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBfKCJXZWIgSW5zcGVjdG9yIikpOworICAgIGd0a19o
ZWFkZXJfYmFyX3NldF9zaG93X2Nsb3NlX2J1dHRvbihHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhl
YWRlckJhciksIFRSVUUpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlYmFyKEdUS19XSU5ET1co
d2luZG93KSwgd2luZG93LT5oZWFkZXJCYXIpOworICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3ct
PmhlYWRlckJhcik7Cit9CisKK0d0a1dpZGdldCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0
a1dpbmRvdyogcGFyZW50KQoreworICAgIHJldHVybiBHVEtfV0lER0VUKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCAidHlwZSIsIEdUS19XSU5ET1dfVE9QTEVWRUws
ICJ0cmFuc2llbnQtZm9yIiwgcGFyZW50LAorICAgICAgICAiZGVmYXVsdC13aWR0aCIsIFdlYklu
c3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgsICJkZWZhdWx0LWhlaWdodCIsIFdlYklu
c3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0LCBudWxscHRyKSk7Cit9CisKK3ZvaWQg
d2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3
aW5kb3csIGNvbnN0IGNoYXIqIHN1YnRpdGxlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1cod2luZG93KSk7CisKKyAgICBndGtfaGVhZGVyX2Jhcl9z
ZXRfc3VidGl0bGUoR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBzdWJ0aXRsZSk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dl
YktpdEluc3BlY3RvcldpbmRvdy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZWJkYzI4ZDEwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVyAgICAgICAgICAgICh3ZWJraXRf
aW5zcGVjdG9yX3dpbmRvd19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJ
TkRPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3cpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKKyNk
ZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2Vi
S2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJ
TkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5E
T1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IFdlYktpdEluc3BlY3Rvcldp
bmRvdzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJ
bnNwZWN0b3JXaW5kb3dDbGFzczsKKworR1R5cGUgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0
X3R5cGUodm9pZCk7CisKK0d0a1dpZGdldCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dp
bmRvdyogcGFyZW50KTsKK3ZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2Vi
S2l0SW5zcGVjdG9yV2luZG93KiwgY29uc3QgY2hhciogc3VidGl0bGUpOworCitHX0VORF9ERUNM
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmE5ODM5MWM0MjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisK
KyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBI
aWdobGlnaHQ7Cit9CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IDogVUlW
aWV3IHsKKyAgICBOU011dGFibGVBcnJheSAqX2xheWVyczsgLy8gQ0FTaGFwZUxheWVycy4KK30K
Ky0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodDsKK0Bl
bmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNjVmMGMwM2UzMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdo
bGlnaHRWaWV3Lm1tCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCIKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rv
ck92ZXJsYXkuaD4KKworQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgX2xheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc2VsZiBfcmVtb3ZlQWxs
TGF5ZXJzXTsKKyAgICBbX2xheWVycyByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9
CisKKy0gKHZvaWQpX3JlbW92ZUFsbExheWVycworeworICAgIGZvciAoQ0FTaGFwZUxheWVyICps
YXllciBpbiBfbGF5ZXJzKQorICAgICAgICBbbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwor
ICAgIFtfbGF5ZXJzIHJlbW92ZUFsbE9iamVjdHNdOworfQorCistICh2b2lkKV9jcmVhdGVMYXll
cnM6KE5TVUludGVnZXIpbnVtTGF5ZXJzCit7CisgICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBu
dW1MYXllcnMpCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNd
OworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKKyAg
ICAgICAgQ0FTaGFwZUxheWVyICpsYXllciA9IFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XTsK
KyAgICAgICAgW19sYXllcnMgYWRkT2JqZWN0OmxheWVyXTsKKyAgICAgICAgW3NlbGYubGF5ZXIg
YWRkU3VibGF5ZXI6bGF5ZXJdOworICAgICAgICBbbGF5ZXIgcmVsZWFzZV07CisgICAgfQorfQor
CitzdGF0aWMgYm9vbCBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBwMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDIsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBk
MiwgV2ViQ29yZTo6RmxvYXRQb2ludCYgaW50ZXJzZWN0aW9uKSAKK3sKKyAgICAvLyBEbyB0aGUg
bGluZXMgaW50ZXJzZWN0PworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVtcG9yYXJ5SW50ZXJz
ZWN0aW9uUG9pbnQ7CisgICAgaWYgKCFmaW5kSW50ZXJzZWN0aW9uKHAxLCBwMiwgZDEsIGQyLCB0
ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIElzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvbiB0aGUgbGlu
ZT8KKyAgICBpZiAocDEueCgpID49IHAyLngoKSkgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50
ZXJzZWN0aW9uUG9pbnQueCgpID4gcDEueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50
LngoKSA8IHAyLngoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDIueCgpIHx8IHRl
bXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAxLngoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKHAxLnkoKSA+PSBwMi55KCkpIHsKKyAgICAgICAgaWYg
KHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAxLnkoKSB8fCB0ZW1wb3JhcnlJbnRl
cnNlY3Rpb25Qb2ludC55KCkgPCBwMi55KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+
IHAyLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMS55KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50ZXJzZWN0aW9uID0gdGVtcG9y
YXJ5SW50ZXJzZWN0aW9uUG9pbnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFRoaXMgcXVh
ZCBpbnRlcnNlY3Rpb24gd29ya3MgYmVjYXVzZSB0aGUgdHdvIHF1YWRzIGFyZSBrbm93biB0byBi
ZSBhdCB0aGUgc2FtZQorLy8gcm90YXRpb24gYW5kIGNsb2Nrd2lzZS1uZXNzLgorc3RhdGljIFdl
YkNvcmU6OkZsb2F0UXVhZCBxdWFkSW50ZXJzZWN0aW9uKFdlYkNvcmU6OkZsb2F0UXVhZCBib3Vu
ZHMsIFdlYkNvcmU6OkZsb2F0UXVhZCB0b0NsYW1wKQoreworICAgIC8vIFJlc3VsdGluZyBwb2lu
dHMuCisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwMSwgcDIsIHAzLCBwNDsKKyAgICBib29sIGNv
bnRhaW5zUG9pbnQxID0gZmFsc2U7CisgICAgYm9vbCBjb250YWluc1BvaW50MiA9IGZhbHNlOwor
ICAgIGJvb2wgY29udGFpbnNQb2ludDMgPSBmYWxzZTsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQ0
ID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDEgPSBmYWxzZTsKKyAgICBib29s
IGludGVyc2VjdEZvclBvaW50MiA9IGZhbHNlOworICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQz
ID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDQgPSBmYWxzZTsKKworICAgIC8v
IFRvcCAvIGJvdHRvbSB2ZXJ0aWNhbCBjbGFtcGluZy4KKyAgICBpZiAoYm91bmRzLmNvbnRhaW5z
UG9pbnQodG9DbGFtcC5wMSgpKSkgeworICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7Cisg
ICAgICAgIHAxID0gdG9DbGFtcC5wMSgpOworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQ
b2ludDEgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwg
Ym91bmRzLnAyKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwMSkpKQorICAgICAgICBw
MSA9IHRvQ2xhbXAucDEoKTsKKworICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1w
LnAyKCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKKyAgICAgICAgcDIgPSB0
b0NsYW1wLnAyKCk7CisgICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MiA9IGZpbmRJ
bnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDIoKSwg
dG9DbGFtcC5wMigpLCB0b0NsYW1wLnAzKCksIHAyKSkpCisgICAgICAgIHAyID0gdG9DbGFtcC5w
MigpOworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDMoKSkpIHsKKyAg
ICAgICAgY29udGFpbnNQb2ludDMgPSB0cnVlOworICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsK
KyAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmluZEludGVyc2VjdGlvbk9u
TGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAyKCks
IHRvQ2xhbXAucDMoKSwgcDMpKSkKKyAgICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7CisKKyAgICBp
ZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wNCgpKSkgeworICAgICAgICBjb250YWlu
c1BvaW50NCA9IHRydWU7CisgICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOworICAgIH0gZWxzZSBp
ZiAoIShpbnRlcnNlY3RGb3JQb2ludDQgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBv
aW50cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgp
LCBwNCkpKQorICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsKKworICAgIC8vIElmIG9ubHkgb25l
IG9mIHRoZSBwb2ludHMgaW50ZXJzZWN0ZWQgb24gZWl0aGVyIHRoZSB0b3Agb3IgYm90dG9tIGxp
bmUgdGhlbiB3ZQorICAgIC8vIGNhbiBjbGFtcCB0aGUgb3RoZXIgcG9pbnQgb24gdGhhdCBsaW5l
IHRvIHRoZSBjb3JuZXIgb2YgdGhlIGJvdW5kcy4KKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYm
IGludGVyc2VjdEZvclBvaW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKSB7CisgICAgICAgIGNv
bnRhaW5zUG9pbnQxID0gdHJ1ZTsKKyAgICAgICAgcDEgPSBib3VuZHMucDEoKTsKKyAgICB9IGVs
c2UgaWYgKCFjb250YWluc1BvaW50MiAmJiBpbnRlcnNlY3RGb3JQb2ludDEgJiYgIWludGVyc2Vj
dEZvclBvaW50MikgeworICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7CisgICAgICAgIHAy
ID0gYm91bmRzLnAyKCk7CisgICAgfQorICAgIGlmICghY29udGFpbnNQb2ludDQgJiYgaW50ZXJz
ZWN0Rm9yUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQb2ludDQpIHsKKyAgICAgICAgY29udGFpbnNQ
b2ludDQgPSB0cnVlOworICAgICAgICBwNCA9IGJvdW5kcy5wNCgpOworICAgIH0gZWxzZSBpZiAo
IWNvbnRhaW5zUG9pbnQzICYmIGludGVyc2VjdEZvclBvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9p
bnQzKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKKyAgICAgICAgcDMgPSBib3Vu
ZHMucDMoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gaG9y
aXpvbnRhbCBjbGFtcGluZyBmb3IgdW5hZGp1c3RlZCBwb2ludHMuCisgICAgaWYgKCFjb250YWlu
c1BvaW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQyKQorICAgICAgICBmaW5kSW50ZXJzZWN0aW9u
T25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCksIHAxLCBwMiwgcDIp
OworICAgIGlmICghY29udGFpbnNQb2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50MykKKyAgICAg
ICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5k
cy5wMygpLCBwNCwgcDMsIHAzKTsKKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmICFpbnRlcnNl
Y3RGb3JQb2ludDEpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRz
KGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwgcDEsIHAyLCBwMSk7CisgICAgaWYgKCFjb250YWlu
c1BvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KQorICAgICAgICBmaW5kSW50ZXJzZWN0aW9u
T25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHA0LCBwMywgcDQp
OworCisgICAgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UXVhZChwMSwgcDIsIHAzLCBwNCk7Cit9CisK
K3N0YXRpYyB2b2lkIGxheWVyUGF0aFdpdGhIb2xlKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQm
IGhvbGVRdWFkKQoreworICAgIC8vIE5vdGhpbmcgdG8gc2hvdy4KKyAgICBpZiAob3V0ZXJRdWFk
ID09IGhvbGVRdWFkIHx8IGhvbGVRdWFkLmNvbnRhaW5zUXVhZChvdXRlclF1YWQpKSB7CisgICAg
ICAgIGxheWVyLnBhdGggPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
SWYgdGhlcmUgaXMgYSBuZWdhdGl2ZSBtYXJnaW4gLyBwYWRkaW5nIHRoZW4gdGhlIG91dGVyIGJv
eCBtaWdodCBub3QKKyAgICAvLyBmdWxseSBjb250YWluIHRoZSBob2xlIGJveC4gSW4gc3VjaCBj
YXNlcyB3ZSByZWNhbGN1bGF0ZSB0aGUgaG9sZSB0bworICAgIC8vIGJlIHRoZSBpbnRlcnNlY3Rp
b24gb2YgdGhlIHR3byBxdWFkcy4KKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgaW5uZXJIb2xlOwor
ICAgIGlmIChvdXRlclF1YWQuY29udGFpbnNRdWFkKGhvbGVRdWFkKSkKKyAgICAgICAgaW5uZXJI
b2xlID0gaG9sZVF1YWQ7CisgICAgZWxzZQorICAgICAgICBpbm5lckhvbGUgPSBxdWFkSW50ZXJz
ZWN0aW9uKG91dGVyUXVhZCwgaG9sZVF1YWQpOworCisgICAgLy8gQ2xvY2t3aXNlIGluc2lkZSBy
ZWN0IChob2xlKSwgQ291bnRlci1DbG9ja3dpc2Ugb3V0c2lkZSByZWN0IChmaWxsKS4KKyAgICBD
R011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAgQ0dQYXRo
TW92ZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAxKCkueCgpLCBpbm5lckhvbGUucDEoKS55
KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMigpLngo
KSwgaW5uZXJIb2xlLnAyKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAw
LCBpbm5lckhvbGUucDMoKS54KCksIGlubmVySG9sZS5wMygpLnkoKSk7CisgICAgQ0dQYXRoQWRk
TGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnA0KCkueCgpLCBpbm5lckhvbGUucDQoKS55
KCkpOworICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwg
b3V0ZXJRdWFkLnAxKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBv
dXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGlu
ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkp
OworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwg
b3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAgICBsYXllci5wYXRoID0gcGF0aDsKKyAgICBDR1BhdGhS
ZWxlYXNlKHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBsYXllclBhdGgoQ0FTaGFwZUxheWVyICps
YXllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQpCit7CisgICAgQ0dNdXRh
YmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAgIENHUGF0aE1vdmVU
b1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsK
KyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91
dGVyUXVhZC5wNCgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0
ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVU
b1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsK
KyAgICBsYXllci5wYXRoID0gcGF0aDsKKyAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOworfQorCist
ICh2b2lkKV9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQm
KWhpZ2hsaWdodCBvZmZzZXQ6KHVuc2lnbmVkKW9mZnNldAoreworICAgIEFTU0VSVChbX2xheWVy
cyBjb3VudF0gPj0gb2Zmc2V0ICsgNCk7CisgICAgQVNTRVJUKGhpZ2hsaWdodC5xdWFkcy5zaXpl
KCkgPj0gb2Zmc2V0ICsgNCk7CisgICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA8IG9mZnNldCArIDQg
fHwgaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSA8IG9mZnNldCArIDQpCisgICAgICAgIHJldHVybjsK
KworICAgIENBU2hhcGVMYXllciAqbWFyZ2luTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4
Om9mZnNldF07CisgICAgQ0FTaGFwZUxheWVyICpib3JkZXJMYXllciA9IFtfbGF5ZXJzIG9iamVj
dEF0SW5kZXg6b2Zmc2V0ICsgMV07CisgICAgQ0FTaGFwZUxheWVyICpwYWRkaW5nTGF5ZXIgPSBb
X2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDJdOworICAgIENBU2hhcGVMYXllciAqY29u
dGVudExheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAzXTsKKworICAgIFdl
YkNvcmU6OkZsb2F0UXVhZCBtYXJnaW5RdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldF07Cisg
ICAgV2ViQ29yZTo6RmxvYXRRdWFkIGJvcmRlclF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0
ICsgMV07CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIHBhZGRpbmdRdWFkID0gaGlnaGxpZ2h0LnF1
YWRzW29mZnNldCArIDJdOworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBjb250ZW50UXVhZCA9IGhp
Z2hsaWdodC5xdWFkc1tvZmZzZXQgKyAzXTsKKworICAgIG1hcmdpbkxheWVyLmZpbGxDb2xvciA9
IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0Lm1hcmdpbkNvbG9yKTsKKyAgICBib3JkZXJMYXllci5m
aWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5ib3JkZXJDb2xvcik7CisgICAgcGFk
ZGluZ0xheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LnBhZGRpbmdDb2xv
cik7CisgICAgY29udGVudExheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0
LmNvbnRlbnRDb2xvcik7CisKKyAgICBsYXllclBhdGhXaXRoSG9sZShtYXJnaW5MYXllciwgbWFy
Z2luUXVhZCwgYm9yZGVyUXVhZCk7CisgICAgbGF5ZXJQYXRoV2l0aEhvbGUoYm9yZGVyTGF5ZXIs
IGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkKTsKKyAgICBsYXllclBhdGhXaXRoSG9sZShwYWRkaW5n
TGF5ZXIsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCk7CisgICAgbGF5ZXJQYXRoKGNvbnRlbnRM
YXllciwgY29udGVudFF1YWQpOworfQorCistICh2b2lkKV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hs
aWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKK3sKKyAgICBpZiAoIWhp
Z2hsaWdodC5xdWFkcy5zaXplKCkpIHsKKyAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBub2RlQ291bnQgPSBoaWdo
bGlnaHQucXVhZHMuc2l6ZSgpIC8gNDsKKyAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3Vu
dCAqIDRdOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKQor
ICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDpoaWdobGlnaHQgb2Zmc2V0Omkg
KiA0XTsKK30KKworLSAodm9pZClfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNv
cmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Cit7CisgICAgTlNVSW50ZWdlciBudW1MYXllcnMgPSBo
aWdobGlnaHQucXVhZHMuc2l6ZSgpOworICAgIGlmICghbnVtTGF5ZXJzKSB7CisgICAgICAgIFtz
ZWxmIF9yZW1vdmVBbGxMYXllcnNdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW3Nl
bGYgX2NyZWF0ZUxheWVyczpudW1MYXllcnNdOworCisgICAgQ0dDb2xvclJlZiBjb250ZW50Q29s
b3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOworICAgIGZvciAoTlNV
SW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7CisgICAgICAgIENBU2hhcGVMYXll
ciAqbGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBsYXllci5maWxs
Q29sb3IgPSBjb250ZW50Q29sb3I7CisgICAgICAgIGxheWVyUGF0aChsYXllciwgaGlnaGxpZ2h0
LnF1YWRzW2ldKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpI
aWdobGlnaHQmKWhpZ2hsaWdodAoreworICAgIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3Jl
OjpIaWdobGlnaHRUeXBlOjpOb2RlIHx8IGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hs
aWdodFR5cGU6Ok5vZGVMaXN0KQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdo
bGlnaHQ6aGlnaGxpZ2h0XTsKKyAgICBlbHNlIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3Jl
OjpIaWdobGlnaHRUeXBlOjpSZWN0cykKKyAgICAgICAgW3NlbGYgX2xheW91dEZvclJlY3RzSGln
aGxpZ2h0OmhpZ2hsaWdodF07Cit9CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdl
c3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9z
L1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNmYmE2OTVlNmJhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFy
Y2hHZXN0dXJlUmVjb2duaXplci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXpl
ci5oPgorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
IDogVUlHZXN0dXJlUmVjb2duaXplcgorLSAoQ0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3
ICopdmlldzsKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5v
ZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMDY3ZmU3YmNjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLm1tCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgiCisK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNv
Z25pemVyU3ViY2xhc3MuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVu
dGF0aW9uIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIHsKKyAgICBSZXRh
aW5QdHI8VUlUb3VjaD4gX3RvdWNoOworfQorCistIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihV
SVZpZXcgKil2aWV3Cit7CisgICAgcmV0dXJuIFtfdG91Y2ggbG9jYXRpb25JblZpZXc6dmlld107
Cit9CisKKy0gKHZvaWQpX3Byb2Nlc3NUb3VjaGVzOihOU1NldCAqKXRvdWNoZXMgc3RhdGU6KFVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZSluZXdTdGF0ZQoreworICAgIEFTU0VSVChfdG91Y2gpOwor
ICAgIGlmIChbdG91Y2hlcyBjb250YWluc09iamVjdDpfdG91Y2guZ2V0KCldKQorICAgICAgICBz
ZWxmLnN0YXRlID0gbmV3U3RhdGU7Cit9CisKKy0gKHZvaWQpdG91Y2hlc0JlZ2FuOihOU1NldCAq
KXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoc2VsZi5zdGF0
ZSAhPSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCFfdG91Y2gpOworICAgIF90b3VjaCA9IFt0b3VjaGVzIGFueU9iamVjdF07
CisKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVCZWdhbl07Cit9CisKKy0gKHZvaWQpdG91Y2hlc01vdmVkOihOU1NldCAqKXRv
dWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfcHJvY2Vzc1Rv
dWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkXTsKK30K
KworLSAodm9pZCl0b3VjaGVzRW5kZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZl
bnQgKilldmVudAoreworICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJ
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkXTsKK30KKworLSAodm9pZCl0b3VjaGVzQ2FuY2Vs
bGVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBb
c2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVDYW5jZWxsZWRdOworfQorCistICh2b2lkKXJlc2V0Cit7CisgICAgX3RvdWNoID0gbmlsOwor
fQorCitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRhYmRlYjVmNmQwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oIgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKwor
I2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiUmVt
b3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKKyNp
bXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlv
bkFjdGlvbi5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2ltcG9y
dCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPFNl
Y3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgorI2ltcG9ydCA8U2VjdXJpdHlJ
bnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNh
dGVJbmZvLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKworQGludGVyZmFjZSBXS1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dEZWxl
Z2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7CisgICAgV2ViS2l0OjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyCisKKy0gKE5TUmVjdCl3aW5kb3c6KE5T
V2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5n
UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBy
ZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgp
LCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOworICAgIHJldHVybiBy
ZWN0OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAg
X2luc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOworfQorCistIChCT09MKWluc3BlY3Rv
clZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiBfaW5zcGVjdG9y
UHJveHktPmlzVW5kZXJUZXN0KCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6d2ViVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5nZXQo
KS53ZWJWaWV3OworfQorCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgbV9vYmpDQWRhcHRl
ciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxsb2Nd
IGluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOworCisgICAgbV9pbnNwZWN0
b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRX
aXRoSW5zcGVjdGVkUGFnZTpudWxscHRyXSk7CisgICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBz
ZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIG1fd2luZG93ID0gV2ViSW5z
cGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdlYkluc3BlY3Rv
clByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlKTsKKyAgICBbbV93aW5kb3cgc2V0
RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07CisgICAgW21fd2luZG93IHNldEZyYW1lQXV0
b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JXaW5kb3dGcmFtZSJdOworCisgICAgTlNW
aWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgpLmNvbnRlbnRWaWV3OworICAgIFt3ZWJW
aWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRzXTsKKyAgICBbY29udGVudFZpZXcgYWRk
U3Vidmlldzp3ZWJWaWV3KCldOworCisgICAgcmV0dXJuIHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7
Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICBbbV93aW5k
b3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21fd2luZG93IGNsb3NlXTsKKyAgICAgICAg
bV93aW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgaWYgKG1faW5zcGVjdG9yVmlldykgeworICAg
ICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIG1f
aW5zcGVjdG9yVmlldyA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAobV9vYmpDQWRhcHRlcikKKyAg
ICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVV
c2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3NhdmVOYW1lXV07Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBbbV93aW5k
b3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKKyAgICBbbV93aW5kb3cgbWFrZUZpcnN0UmVz
cG9uZGVyOndlYlZpZXcoKV07Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIC8v
IEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFjLgorCisgICAgQVNTRVJUKCFz
dWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBt
X3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOworICAgIGlm
ICghcGxhdGZvcm1VUkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpzdWdnZXN0ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3
IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAgICAgZm9yY2VTYXZl
RGlhbG9nID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAg
ICBpZiAoIXBsYXRmb3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOZWNlc3Nhcnkg
Zm9yIHRoZSBibG9jayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dl
c3RlZFVSTDsKKyAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OworCisgICAgYXV0byBz
YXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNTRVJUKGFjdHVhbFVS
TCk7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJM
Q29weSwgYWN0dWFsVVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5z
aXplKCldKTsKKyAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBh
dG9taWNhbGx5OllFU107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW2NvbnRlbnRDb3B5
IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nIGVycm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxV
UkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAg
fTsKKworICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VSTChwbGF0
Zm9ybVVSTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5lbCAqcGFu
ZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdW
YWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OworCisgICAgLy8gSWYgd2UgaGF2
ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQK
KyAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwg
dXNlIHRoZSBzeXN0ZW0ncworICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFs
IGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3JtVVJMLmlz
RmlsZVVSTCkKKyAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5
RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVy
ID0gXihOU0ludGVnZXIgcmVzdWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJl
c3BvbnNlQ2FuY2VsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQocmVzdWx0
ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Cisg
ICAgfTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2luZG93LmdldCgp
IDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgW3BhbmVsIGJl
Z2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1
bk1vZGFsXSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBw
ZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7
CisgICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCisKKyAgICBB
U1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOworICAgIAorICAgIFJldGFpblB0cjxOU1VS
TD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJM
KTsKKyAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25m
aXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCisgICAgaWYgKCFhY3R1YWxVUkwpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBm
aWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKKyAg
ICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07CisgICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRl
bnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKKyAgICBbaGFuZGxl
IGNsb3NlRmlsZV07CisKKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJWaWV3
KCktPl9wYWdlLmdldCgpOworICAgIGluc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVT
dHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgbV9zaGVldFJlY3QgPSByZWN0OworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCit7CisgICAgd2ViVmlldygpLT5f
cGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFtbTlNX
b3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnVy
bF1dOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0
aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBB
U1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOworCisgICAgUmV0YWluUHRyPFNGQ2Vy
dGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRl
UGFuZWwgYWxsb2NdIGluaXRdKTsKKworICAgIEFTU0VSVChtX3dpbmRvdyk7CisjaWYgSEFWRShT
RUNfVFJVU1RfU0VSSUFMSVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0
Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9y
Ok5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBz
aG93R3JvdXA6WUVTXTsKKyNlbHNlCisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZv
cldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpO
VUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNh
dGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKKyNlbmRpZgorCisgICAg
Ly8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlz
cGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVo
YW5kLgorICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNh
dGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxh
eVRydXN0OllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsK
KyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107CisgICAgW2NlcnRp
ZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA4YmQwOGZmOWQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmFr
ZWRQdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKworT0JKQ19DTEFTUyBXS1dlYlZpZXc7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAcHJvdG9jb2wg
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlOworCitOU19BU1NVTUVfTk9OTlVMTF9C
RUdJTgorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgOiBOU09iamVjdAor
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRl
bGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFn
ZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBhZ2U7CisKKysgKEJP
T0wpdmlld0lzSW5zcGVjdG9yV2ViVmlldzooTlNWaWV3ICopdmlldzsKKworQGVuZAorCitAcHJv
dG9jb2wgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRp
b25hbAorLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CistIChC
T09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKKy0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdzsK
Ky0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKK0BlbmQKKworTlNf
QVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmQ5MjYzZTBmZDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCkBAIC0wLDAg
KzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQg
IkFQSU5hdmlnYXRpb24uaCIKKyNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKKyNpbXBvcnQgIldL
RnJhbWVJbmZvLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmlldy5oIgorI2ltcG9ydCAi
V0tOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgor
I2ltcG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJXS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tQcm9jZXNzUG9vbEludGVybmFsLmgiCisjaW1wb3J0ICJX
S1VJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJp
dmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSW5zcGVj
dG9yUHJveHkuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorI2ltcG9ydCAi
V2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKworQGludGVyZmFj
ZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICgpIDxXS1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlv
bkRlbGVnYXRlLCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPgorQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB7CisgICAgTmFrZWRQdHI8V2ViS2l0
OjpXZWJQYWdlUHJveHk+IF9pbnNwZWN0ZWRQYWdlOworICAgIFJldGFpblB0cjxXS0luc3BlY3Rv
cldLV2ViVmlldz4gX3dlYlZpZXc7CisgICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3Bl
Y3RlZFBhZ2UKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIC8vIFRoZSAobG9jYWwpIGluc3BlY3RlZCBwYWdlIGlzIG5pbCBpZiB0
aGUgY29udHJvbGxlciBpcyBob3N0aW5nIGEgUmVtb3RlIFdlYiBJbnNwZWN0b3Igdmlldy4KKyAg
ICBfaW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKF93ZWJWaWV3KSB7CisgICAgICAgIFtfd2Vi
VmlldyBzZXRVSURlbGVnYXRlOm5pbF07CisgICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9u
RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0Rl
bGVnYXRlOm5pbF07CisgICAgICAgIF93ZWJWaWV3ID0gbmlsOworICAgIH0KKworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworLSAoaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZT4pZGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwor
fQorCistIChXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgLy8gQ29uc3RydWN0IGxhemlseSBz
byB0aGUgY2xpZW50IGNhbiBzZXQgdGhlIGRlbGVnYXRlIGJlZm9yZSB0aGUgV2ViVmlldyBpcyBj
cmVhdGVkLgorICAgIGlmICghX3dlYlZpZXcpIHsKKyAgICAgICAgTlNSZWN0IGluaXRpYWxGcmFt
ZSA9IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdp
bmRvd1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0
KTsKKyAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1lIGNvbmZpZ3VyYXRpb246W3NlbGYgY29uZmln
dXJhdGlvbl1dKTsKKyAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07CisgICAg
ICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfd2Vi
VmlldyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW193ZWJW
aWV3IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6Tk9dOworICAgICAgICBb
X3dlYlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6WUVTXTsKKyAgICAgICAgW193ZWJWaWV3
IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6
YWJsZV07CisgICAgfQorCisgICAgcmV0dXJuIF93ZWJWaWV3LmdldCgpOworfQorCistICh2b2lk
KXNldERlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPilkZWxl
Z2F0ZQoreworICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCistIChXS1dlYlZpZXdDb25m
aWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisKKyAgICBXS1By
ZWZlcmVuY2VzICpwcmVmZXJlbmNlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXM7
CisgICAgcHJlZmVyZW5jZXMuX2FsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IFlFUzsKKyAg
ICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVT
XTsKKyAgICBwcmVmZXJlbmNlcy5fc3RvcmFnZUJsb2NraW5nUG9saWN5ID0gX1dLU3RvcmFnZUJs
b2NraW5nUG9saWN5QWxsb3dBbGw7CisgICAgcHJlZmVyZW5jZXMuX2phdmFTY3JpcHRSdW50aW1l
RmxhZ3MgPSAwOworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8g
aW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2lu
ZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJlbmNlcy5fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IFlF
UzsKKyAgICBwcmVmZXJlbmNlcy5fbG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJs
ZWQgPSBZRVM7CisjZW5kaWYKKworICAgIHByZWZlcmVuY2VzLl9kaWFnbm9zdGljTG9nZ2luZ0Vu
YWJsZWQgPSBZRVM7CisKKyAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNV
bmRlclRlc3Q6KV0pIHsKKyAgICAgICAgaWYgKFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpzZWxmXSkgeworICAgICAgICAgICAgcHJlZmVyZW5j
ZXMuX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID0gTk87CisgICAgICAgICAg
ICBwcmVmZXJlbmNlcy5fcGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQgPSBOTzsKKyAgICAgICAgfQorICAgIH0KKworICAgIFtjb25maWd1cmF0aW9uIHNldFByb2Nl
c3NQb29sOndyYXBwZXIoV2ViS2l0OjppbnNwZWN0b3JQcm9jZXNzUG9vbChXZWJLaXQ6Omluc3Bl
Y3RvckxldmVsRm9yUGFnZShfaW5zcGVjdGVkUGFnZSkpKV07CisgICAgW2NvbmZpZ3VyYXRpb24g
X3NldEdyb3VwSWRlbnRpZmllcjpXZWJLaXQ6Omluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJG
b3JQYWdlKF9pbnNwZWN0ZWRQYWdlKV07CisKKyAgICByZXR1cm4gY29uZmlndXJhdGlvbi5hdXRv
cmVsZWFzZSgpOworfQorCisrIChCT09MKXZpZXdJc0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAq
KXZpZXcKK3sKKyAgICByZXR1cm4gW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV0tJbnNwZWN0b3JXS1dl
YlZpZXcgY2xhc3NdXTsKK30KKworLy8gTUFSSzogV0tVSURlbGVnYXRlIG1ldGhvZHMKKworLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZXRXaW5kb3dGcmFtZVdpdGhDb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQ0dSZWN0KSljb21wbGV0aW9uSGFuZGxlcgoreworICAg
IGlmICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
R1JlY3RaZXJvKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TUmVjdFRv
Q0dSZWN0KFt3ZWJWaWV3IGZyYW1lXSkpOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBpZiAoIV93
ZWJWaWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgW193ZWJWaWV3Lmdl
dCgpLndpbmRvdyBzZXRGcmFtZTpOU1JlY3RGcm9tQ0dSZWN0KGZyYW1lKSBkaXNwbGF5OllFU107
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5PcGVuUGFuZWxX
aXRoUGFyYW1ldGVyczooV0tPcGVuUGFuZWxQYXJhbWV0ZXJzICopcGFyYW1ldGVycyBpbml0aWF0
ZWRCeUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShOU0FycmF5PE5TVVJMICo+ICpVUkxzKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIE5TT3Bl
blBhbmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFuZWwgb3BlblBhbmVsXTsKKyAgICBvcGVuUGFu
ZWwuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBwYXJhbWV0ZXJzLmFsbG93c011bHRpcGxlU2Vs
ZWN0aW9uOworCisgICAgYXV0byByZXBvcnRTZWxlY3RlZEZpbGVzID0gXihOU0ludGVnZXIgcmVz
dWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spCisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihvcGVuUGFuZWwuVVJMcyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7CisgICAgfTsKKworICAgIGlmIChfd2Vi
Vmlldy5nZXQoKS53aW5kb3cpCisgICAgICAgIFtvcGVuUGFuZWwgYmVnaW5TaGVldE1vZGFsRm9y
V2luZG93Ol93ZWJWaWV3LmdldCgpLndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpyZXBvcnRTZWxl
Y3RlZEZpbGVzXTsKKyAgICBlbHNlCisgICAgICAgIHJlcG9ydFNlbGVjdGVkRmlsZXMoW29wZW5Q
YW5lbCBydW5Nb2RhbF0pOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjooV0tTZWN1cml0eU9yaWdp
biAqKXNlY3VyaXR5T3JpZ2luIGN1cnJlbnRRdW90YToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJl
bnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50T3Jp
Z2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50
VXNhZ2UgZXhwZWN0ZWRVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkVXNhZ2UgZGVj
aXNpb25IYW5kbGVyOih2b2lkICheKSh1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEpKWRlY2lz
aW9uSGFuZGxlcgoreworICAgIGRlY2lzaW9uSGFuZGxlcihzdGQ6Om1heDx1bnNpZ25lZCBsb25n
IGxvbmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2FnZSAqIDEuMjUpKTsKK30KKworLSAoTlNN
ZW51ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY29udGV4dE1lbnU6KE5TTWVudSAq
KW1lbnUgZm9yRWxlbWVudDooX1dLQ29udGV4dE1lbnVFbGVtZW50SW5mbyAqKWVsZW1lbnQKK3sK
KyAgICBmb3IgKE5TSW50ZWdlciBpID0gbWVudS5udW1iZXJPZkl0ZW1zIC0gMTsgaSA+PSAwOyAt
LWkpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqaXRlbSA9IFttZW51IGl0ZW1BdEluZGV4OmldOwor
ICAgICAgICBzd2l0Y2ggKGl0ZW0udGFnKSB7CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVu
dUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgICAgIFttZW51IHJlbW92ZUl0ZW1B
dEluZGV4OmldOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gbWVudTsKK30KKworLy8gTUFSSzogV0tOYXZpZ2F0aW9uRGVsZWdhdGUgbWV0aG9kcwor
CistICh2b2lkKXdlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZTooV0tXZWJWaWV3
ICopd2ViVmlldworeworICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRD
cmFzaDopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3Bl
Y3RvckRpZENyYXNoOnNlbGZdOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9u
ICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlv
bkFjdGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4g
ZnJhbWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIGlmICghbmF2aWdhdGlvbkFjdGlvbi50
YXJnZXRGcmFtZS5pc01haW5GcmFtZSkgeworICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBpZiAoV2Vi
S2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShuYXZpZ2F0
aW9uQWN0aW9uLnJlcXVlc3QuVVJMKSkgeworICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5QWxsb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UuCisgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdh
dGlvbkFjdGlvblBvbGljeUNhbmNlbCk7CisgICAgCisgICAgLy8gQW5kIGluc3RlYWQgbG9hZCBp
dCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgaWYgKF9pbnNwZWN0ZWRQYWdlKQorICAgICAg
ICBfaW5zcGVjdGVkUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0KTsK
K30KKworLy8gTUFSSzogV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBtZXRob2RzCisKKy0g
KHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdl
YlZpZXcKK3sKKyAgICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBPcHRpb25TZXQ8V2ViQ29yZTo6UmVsb2FkT3B0aW9uPiByZWxvYWRPcHRpb25zOworICAgIGlm
IChXZWJLaXQ6OmxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aEV4
cGlyZWRPbmx5UmVsb2FkQmVoYXZpb3IpKQorICAgICAgICByZWxvYWRPcHRpb25zLmFkZChXZWJD
b3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KTsKKworICAgIF9pbnNwZWN0ZWRQYWdlLT5y
ZWxvYWQocmVsb2FkT3B0aW9ucyk7Cit9CisKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVs
b2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYg
KCFfaW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX2luc3BlY3RlZFBhZ2Ut
PnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOworfQorCistICh2b2lk
KWluc3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxN
b3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Cit7CisgICAgaWYgKCEhX2RlbGVnYXRl
ICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3
Q29udHJvbGxlcjp3aWxsTW92ZVRvV2luZG93OildKQorICAgICAgICBbX2RlbGVnYXRlIGluc3Bl
Y3RvclZpZXdDb250cm9sbGVyOnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOworfQor
CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JX
S1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1v
dmVUb1dpbmRvdzopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckRpZE1vdmVUb1dpbmRvdzpzZWxmXTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5jNTdlNzdjZmU3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKworQHByb3RvY29sIFdLSW5zcGVjdG9yV0tX
ZWJWaWV3RGVsZWdhdGU7CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JXS1dlYlZpZXcgOiBXS1dl
YlZpZXcKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZT4gaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7CitAZW5kCisKK0Bwcm90b2Nv
bCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlCitAcmVxdWlyZWQKKy0gKHZvaWQpaW5zcGVj
dG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7CistICh2
b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJW
aWV3ICopd2ViVmlldzsKKy0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldL
V2ViVmlldyAqKXdlYlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7
CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JX
S1dlYlZpZXcgKil3ZWJWaWV3OworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
cldLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJ
bnNwZWN0b3JXS1dlYlZpZXcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjRiZmVmNGEwMWJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpAQCAtMCwwICsxLDg0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvcldL
V2ViVmlldy5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJXS0luc3BlY3RvclBy
aXZhdGVNYWMuaCIKKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCitAaW1wbGVtZW50YXRp
b24gV0tJbnNwZWN0b3JXS1dlYlZpZXcgeworICAgIFdlYWtPYmpDUHRyPGlkIDxXS0luc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlPj4gX2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOworfQorCist
IChOU1JlY3QpX29wYXF1ZVJlY3RGb3JXaW5kb3dNb3ZlV2hlbkluVGl0bGViYXIKK3sKKyAgICAv
LyBUaGlzIGNvbnZpbmNlcyBBcHBLaXQgdG8gYWxsb3cgd2luZG93IG1vdmVzIHdoZW4gY2xpY2tp
bmcgYW55d2hlcmUgaW4gdGhlIHRpdGxlYmFyICh0b3AgMjJwdCkKKyAgICAvLyB3aGVuIHRoaXMg
dmlldydzIGNvbnRlbnRzIGNvdmVyIHRoZSBlbnRpcmUgd2luZG93J3MgY29udGVudHMsIGluY2x1
ZGluZyB0aGUgdGl0bGViYXIuCisgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Cit9CisKKy0gKE5TSW50
ZWdlcil0YWcKK3sKKyAgICByZXR1cm4gV0tJbnNwZWN0b3JWaWV3VGFnOworfQorCistIChpZCA8
V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4paW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUK
K3sKKyAgICByZXR1cm4gX2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlLmdldEF1dG9yZWxlYXNl
ZCgpOworfQorCistICh2b2lkKXNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOihpZCA8V0tJ
bnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfaW5zcGVjdG9yV0tX
ZWJWaWV3RGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAoSUJBY3Rpb24pcmVsb2FkOihpZClz
ZW5kZXIKK3sKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JX
S1dlYlZpZXdSZWxvYWQ6c2VsZl07Cit9CisKKy0gKElCQWN0aW9uKXJlbG9hZEZyb21PcmlnaW46
KGlkKXNlbmRlcgoreworICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3Bl
Y3RvcldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46c2VsZl07Cit9CisKKy0gKHZvaWQpdmlld1dp
bGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Cit7CisgICAgW3N1cGVyIHZpZXdX
aWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3
RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3OnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5k
b3ddOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBbc3VwZXIgdmll
d0RpZE1vdmVUb1dpbmRvd107CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUg
aW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OnNlbGZdOworfQorCitAZW5kCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
ZWJJbnNwZWN0b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmJiZTcyOGQ0MzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpAQCAtMCww
ICsxLDgwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJX
S0luc3BlY3RvclByaXZhdGVNYWMuaCIKKyNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRl
cm5hbC5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2Vi
UGFnZUdyb3VwLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIl9XS0luc3Bl
Y3RvckludGVybmFsLmgiCisjaW1wb3J0ICJfV0tJbnNwZWN0b3JXaW5kb3cuaCIKKyNpbXBvcnQg
PFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgorI2ltcG9ydCA8U2VjdXJp
dHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvQmFzZTY0Lmg+CisKK3N0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0eWxlTWFz
ayA9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkIHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9zYWJsZSB8
IE5TV2luZG93U3R5bGVNYXNrTWluaWF0dXJpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFza1Jlc2l6
YWJsZSB8IE5TV2luZG93U3R5bGVNYXNrRnVsbFNpemVDb250ZW50VmlldzsKKworLy8gVGhlIHRp
bWUgd2Uga2VlcCBvdXIgV2ViVmlldyBhbGl2ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQgaXRzIHBy
b2Nlc3MuCisvLyBSZXVzaW5nIHRoZSBXZWJWaWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRpbWUgZm9y
IHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5kIG91dCBvZiB0aGUgSW5zcGVjdG9yLgorc3RhdGljIGNv
bnN0IFNlY29uZHMgd2ViVmlld0Nsb3NlVGltZW91dCB7IDFfbWluIH07CisKK3N0YXRpYyB2b2lk
KiBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCA9ICZrV2luZG93Q29udGVudExh
eW91dE9ic2VydmVyQ29udGV4dDsKKworQGludGVyZmFjZSBXS1dlYkluc3BlY3RvclByb3h5T2Jq
Q0FkYXB0ZXIgKCkgPE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZT4KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdl
YktpdDo6V2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OworLSAodm9pZClpbnZhbGlk
YXRlOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0Fk
YXB0ZXIgeworICAgIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsK
K30KKworLSAoV0tJbnNwZWN0b3JSZWYpaW5zcGVjdG9yUmVmCit7CisgICAgcmV0dXJuIHRvQVBJ
KF9pbnNwZWN0b3JQcm94eSk7Cit9CisKKy0gKF9XS0luc3BlY3RvciAqKWluc3BlY3Rvcgorewor
ICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKCpfaW5zcGVj
dG9yUHJveHkpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQ
cm94eQoreworICAgIEFTU0VSVF9BUkcoaW5zcGVjdG9yUHJveHksIGluc3BlY3RvclByb3h5KTsK
KworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgLy8gVW5yZXRhaW5lZCB0byBhdm9pZCBhIHJlZmVyZW5jZSBjeWNsZS4KKyAgICBfaW5z
cGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKKworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKWludmFsaWRhdGUKK3sKKyAgICBfaW5zcGVjdG9yUHJveHkgPSBudWxscHRyOworfQor
CistIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDoo
TlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgaWYgKF9pbnNw
ZWN0b3JQcm94eSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5
LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0
aCgpLCAwKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworLSAodm9pZCl3aW5kb3dEaWRNb3ZlOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
CisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKK30KKwor
LSAodm9pZCl3aW5kb3dEaWRSZXNpemU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7
CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5k
b3dGcmFtZURpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAg
ICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkRW50
ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVl
bkRpZENoYW5nZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVuOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisg
ICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOworfQor
CistICh2b2lkKWluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KK3sKKyAgICAvLyBSZXNpemluZyB0aGUgdmlld3Mgd2hpbGUgaW5zaWRlIHRo
aXMgbm90aWZpY2F0aW9uIGNhbiBsZWFkIHRvIGJhZCByZXN1bHRzIHdoZW4gZW50ZXJpbmcKKyAg
ICAvLyBvciBleGl0aW5nIGZ1bGwgc2NyZWVuLiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQgdG8gcGVy
Zm9ybSB0aGUgd29yayBhZnRlciBhIGRlbGF5LiBXZSBvbmx5CisgICAgLy8gZGVwZW5kIG9uIHRo
aXMgZm9yIGVuZm9yY2luZyB0aGUgaGVpZ2h0IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxsIGRlbGF5
IGlzbid0IHRlcnJpYmxlLiBNb3N0CisgICAgLy8gb2YgdGhlIHRpbWUgdGhlIHZpZXdzIHdpbGwg
YWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGZyYW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNpemluZyBt
YXNrcy4KKworICAgIGRpc3BhdGNoX2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAg
ICAgICAgX2luc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAg
ICB9KTsKK30KKworLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtl
eVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZhbHVl
Q2hhbmdlS2V5LCBpZD4gKiljaGFuZ2UgY29udGV4dDoodm9pZCAqKWNvbnRleHQKK3sKKyAgICBp
ZiAoY29udGV4dCAhPSBrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dCkgeworICAg
ICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0Om9iamVj
dCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gb2JqZWN0OworICAgIEFTU0VSVChbd2luZG93IGlz
S2luZE9mQ2xhc3M6W05TV2luZG93IGNsYXNzXV0pOworICAgIGlmICh3aW5kb3cuaW5MaXZlUmVz
aXplKQorICAgICAgICByZXR1cm47CisKKyAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1F
X05PVywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9pbnNwZWN0
b3JQcm94eSkKKyAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1l
RGlkQ2hhbmdlKCk7CisgICAgfSk7Cit9CisKKy8vIE1BUks6IFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJ
bnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZp
ZXdDb250cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3Bl
Y3RvclByb3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKKy0gKEJPT0wpaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAq
KWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIF9pbnNwZWN0b3JQcm94eSA/
IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRlclRlc3QoKSA6IGZhbHNlOworfQorCistICh2b2lkKWlu
c3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cK
K3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0
dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmll
dy53aW5kb3cpOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRv
V2luZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHkt
PmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmll
dy53aW5kb3cpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRWaWV3RGlk
Q2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KQoreworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRl
ci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpvbGRW
aWV3XTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2Jq
ZWN0Om5ld1ZpZXddOworCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAgICAgYXR0YWNoKG1f
YXR0YWNobWVudFNpZGUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50
V2lsbE1vdmVGcm9tV2luZG93KE5TV2luZG93ICpvbGRXaW5kb3cpCit7CisgICAgaWYgKG1faXNP
YnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCkgeworICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVu
dExheW91dFJlY3QgPSBmYWxzZTsKKyAgICAgICAgW29sZFdpbmRvdyByZW1vdmVPYnNlcnZlcjpt
X29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgY29udGV4
dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07CisgICAgfQorfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpu
ZXdXaW5kb3cpCit7CisgICAgaWYgKG1faXNBdHRhY2hlZCAmJiAhIW5ld1dpbmRvdykgeworICAg
ICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSB0cnVlOworICAgICAgICBbbmV3
V2luZG93IGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRl
bnRMYXlvdXRSZWN0IiBvcHRpb25zOjAgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2Vy
dmVyQ29udGV4dF07CisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOworICAg
IH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0
bGUoKSBjb25zdAoreworICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIGxldmVsID0gaW5zcGVjdGlvbkxldmVsKCk7CisgICAgaWYgKGxl
dmVsID4gMSkgeworICAgICAgICBOU1N0cmluZyAqZGVidWdUaXRsZSA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3IgWyVkXSDigJQgJUAiLCAi
V2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUgd2hlbiBpbnNwZWN0aW5nIFdlYiBJbnNwZWN0b3Ii
KSwgbGV2ZWwsIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKKyAgICAgICAgW21faW5zcGVjdG9y
V2luZG93IHNldFRpdGxlOmRlYnVnVGl0bGVdOworICAgIH0gZWxzZSB7CisgICAgICAgIE5TU3Ry
aW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldl
YiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0
cmluZyAqKW1fdXJsU3RyaW5nXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxl
OnRpdGxlXTsKKyAgICB9Cit9CisKK1JldGFpblB0cjxOU1dpbmRvdz4gV2ViSW5zcGVjdG9yUHJv
eHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0
aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQoreworICAgIE5TUmVjdCB3aW5kb3dGcmFtZSA9ICFO
U0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpID8gc2F2ZWRXaW5kb3dGcmFtZSA6IE5TTWFr
ZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0KTsKKyAg
ICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMoW1tfV0tJbnNwZWN0b3JXaW5kb3cgYWxsb2NdIGluaXRX
aXRoQ29udGVudFJlY3Q6d2luZG93RnJhbWUgc3R5bGVNYXNrOndpbmRvd1N0eWxlTWFzayBiYWNr
aW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKKyAgICBbd2luZG93IHNldE1p
blNpemU6TlNNYWtlU2l6ZShtaW5pbXVtV2luZG93V2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQp
XTsKKyAgICBbd2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisgICAgW3dpbmRvdyBz
ZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2lu
ZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlblByaW1hcnkpXTsKKworICAgIGJvb2wgZm9y
UmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlwZSA9PSBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3Rl
OworICAgIFt3aW5kb3cgc2V0Rm9yUmVtb3RlVGFyZ2V0OmZvclJlbW90ZVRhcmdldF07CisKKyAg
ICBDR0Zsb2F0IGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSA9IChbd2luZG93IHNjcmVlbl0u
ZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0gNDsKKyAgICBDR0Zsb2F0IG1pbmltdW1GdWxsU2NyZWVu
V2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0Pig2MzYsIGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6
ZSk7CisgICAgW3dpbmRvdyBzZXRNaW5GdWxsU2NyZWVuQ29udGVudFNpemU6TlNNYWtlU2l6ZSht
aW5pbXVtRnVsbFNjcmVlbldpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07CisgICAgW3dpbmRv
dyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5T
V2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVsbFNjcmVlbkFsbG93c1RpbGluZyldOworCisgICAg
W3dpbmRvdyBzZXRUaXRsZWJhckFwcGVhcnNUcmFuc3BhcmVudDpZRVNdOworCisgICAgLy8gQ2Vu
dGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNhdmVkIGZyYW1lIHdhcyBlbXB0eS4KKyAgICBpZiAoTlNJ
c0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSkKKyAgICAgICAgW3dpbmRvdyBjZW50ZXJdOwor
CisgICAgcmV0dXJuIHdpbmRvdzsKK30KKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VSVChpbnNwZWN0ZWRQ
YWdlKCkpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdlKTsKKworICAgIG1fY2xvc2VGcm9u
dGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAgIGlmIChtX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyKSB7CisgICAgICAgIEFTU0VSVChtX29iakNBZGFwdGVyKTsKKyAgICAgICAg
cmV0dXJuIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsK
KyAgICB9CisKKyAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhbW1dLV2ViSW5zcGVjdG9yUHJv
eHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7Cisg
ICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRh
Y2htZW50VmlldygpOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVj
dGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6aW5zcGVjdGVkVmlld107CisKKyAgICBtX2luc3BlY3RvclZpZXdDb250cm9s
bGVyID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRo
SW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQYWdlKCldKTsKKyAgICBbbV9pbnNwZWN0b3JWaWV3Q29u
dHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIFdl
YlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFnZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdl
YlZpZXddLT5fcGFnZS5nZXQoKTsKKyAgICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7CisKKyAgICBy
ZXR1cm4gaW5zcGVjdG9yUGFnZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRv
dyk7CisKKyAgICBOU1N0cmluZyAqc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3BlY3RlZFBh
Z2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwor
ICAgIE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRv
d0ZyYW1lU3RyaW5nKTsKKworICAgIG1faW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVjdG9yUHJv
eHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJn
ZXRUeXBlOjpMb2NhbCk7CisgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm1fb2Jq
Q0FkYXB0ZXIuZ2V0KCldOworCisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9
IFttX2luc3BlY3RvcldpbmRvdyBjb250ZW50Vmlld107CisgICAgaW5zcGVjdG9yVmlldy5mcmFt
ZSA9IFtjb250ZW50VmlldyBib3VuZHNdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Omlu
c3BlY3RvclZpZXddOworCisgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2UoKQoreworICAgIEFTU0VS
VCghbV9pc0F0dGFjaGVkIHx8ICFtX2luc3BlY3RvcldpbmRvdyk7CisKKyAgICBpZiAobV9pbnNw
ZWN0b3JWaWV3Q29udHJvbGxlcikgeworICAgICAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBtX2luc3BlY3RvclZpZXdDb250cm9s
bGVyID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29iakNBZGFwdGVyKSB7CisgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpD
QWRhcHRlci5nZXQoKV07CisKKyAgICAgICAgW21fb2JqQ0FkYXB0ZXIgaW52YWxpZGF0ZV07Cisg
ICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpCit7CisgICAg
Y2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1faW5zcGVjdG9yV2lu
ZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAg
ICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAgICBtX2luc3BlY3RvcldpbmRv
dyA9IG5pbDsKKyAgICB9CisKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1l
ci5zdGFydE9uZVNob3Qod2ViVmlld0Nsb3NlVGltZW91dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCit7CisgICAgbV9jbG9zZUZyb250
ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2Uo
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sK
KyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBj
bG9zZUZyb250ZW5kUGFnZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUhpZGUoKQoreworICAgIGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgcGxhdGZvcm1EZXRh
Y2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2luc3BlY3RvcldpbmRv
dykgeworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAg
ICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cg
PSBuaWw7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0
U3RhdGUoKQoreworICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMo
KS5kZWxldGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0
b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBzYW1lIHdpbmRvdyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcs
CisgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHJlb3BlbiB0aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBh
dHRhY2hlZCB0byB0aGUgcmlnaHQgd2luZG93LgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVu
IGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhlciB3aW5kb3cgaW4gU2FmYXJpLgorICAgIGlmIChtX2lz
QXR0YWNoZWQgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93ICE9
IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSkgeworICAgICAgICBvcGVuKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5
Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJyaW5nIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRv
IHRoZSBmcm9udCwgb25seSBpdHMgd2luZG93LgorICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XS53aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKKyAgICBbW21f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1ha2VGaXJzdFJlc3BvbmRl
cjpbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XV07Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAg
W2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZvcm1XaW5kb3coKSBtYWtlS2V5QW5kT3JkZXJGcm9udDpu
aWxdOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQorewor
ICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgcmV0
dXJuIGZhbHNlIGZvciBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSwgb25seSBhIGJhY2tncm91
bmQgd2luZG93LgorICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciB3ZWJWaWV3XS53aW5kb3cuaXNNYWluV2luZG93OworfQorCitib29sIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpCit7
CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JB
dHRhY2htZW50VmlldygpOworICAgIGlmIChbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3
SXNJbnNwZWN0b3JXZWJWaWV3Omluc3BlY3RlZFZpZXddKQorICAgICAgICByZXR1cm4gd2ViUHJv
Y2Vzc0NhbkF0dGFjaDsKKworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQgPSAyNTA7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdo
dFJhdGlvID0gMC43NTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lk
dGggPSA1MDA7CisKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVkVmll
dy5mcmFtZTsKKworICAgIGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodCA9IE5TSGVpZ2h0KGlu
c3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKKyAgICByZXR1
cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5p
bXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChi
b29sIGF2YWlsYWJsZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nLgorfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCit7CisgICAgbV91cmxTdHJpbmcgPSB1cmxTdHJpbmc7CisKKyAgICB1cGRhdGVJbnNw
ZWN0b3JXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykK
K3sKKyAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOworCisgICAgUmV0YWlu
UHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNl
cnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKKworICAgIE5TV2luZG93ICp3aW5kb3c7Cisg
ICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICB3aW5kb3cgPSBtX2luc3BlY3Rvcldp
bmRvdy5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIHdpbmRvdyA9IFtbbV9pbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5kb3ddOworCisgICAgaWYgKCF3aW5kb3cpCisgICAgICAg
IHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5kb3ddOworCisjaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFM
SVpBVElPTikKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRv
dyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxw
dHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107CisjZWxzZQor
ICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVs
ZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZp
Y2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dH
cm91cDpZRVNdOworI2VuZGlmCisKKyAgICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRo
ZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRl
VmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCisgICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNl
cnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107CisgICAg
W2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVW
aWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxh
eURldGFpbHM6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6
WUVTXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwu
aXNFbXB0eSgpKTsKKyAgICAKKyAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRv
QWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOworICAgIGlmICghcGxhdGZvcm1V
UkwpIHsKKyAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0
ZWRVUkxdOworICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBi
ZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KKyAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKKyAgICBpZiAoIXBsYXRm
b3JtVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9j
ayBiZWxvdy4KKyAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKKyAg
ICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OworCisgICAgYXV0byBzYXZlVG9VUkwgPSBe
KE5TVVJMICphY3R1YWxVUkwpIHsKKyAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7CisKKyAgICAg
ICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFs
VVJMKTsKKworICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgeworICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBv
dXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRh
IGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKKyAg
ICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllF
U107CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6
YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVy
cm9yOk5VTExdOworCisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmdd
KSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgfTsKKworICAgIGlmICghZm9y
Y2VTYXZlRGlhbG9nKSB7CisgICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwg
c2F2ZVBhbmVsXTsKKyAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJM
Lmxhc3RQYXRoQ29tcG9uZW50OworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3Zl
IGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKKyAgICAvLyBjYW4gcHJvdmlk
ZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwor
ICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93
IGluIHRoZSBkaWFsb2cuCisgICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKKyAgICAgICAg
cGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENv
bXBvbmVudF07CisKKyAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVz
dWx0KSB7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25z
ZU9LKTsKKyAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7CisgICAgfTsKKworICAgIE5TV2lu
ZG93ICp3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdyA/IG1faW5zcGVjdG9yV2luZG93LmdldCgp
IDogW05TQXBwIGtleVdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgW3BhbmVsIGJl
Z2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1
bk1vZGFsXSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAg
QVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8TlNV
Ukw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVS
TCk7CisgICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29u
ZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgorICAgIGlmICghYWN0dWFsVVJMKQorICAg
ICAgICByZXR1cm47CisKKyAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUg
ZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07Cisg
ICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOworICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250
ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgW2hhbmRs
ZSBjbG9zZUZpbGVdOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5n
XSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5Ojp3aW5kb3dGcmFtZURpZENoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0YWNo
ZWQpOworICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yV2lu
ZG93KTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3Bl
Y3RvcldpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5n
ID0gTlNTdHJpbmdGcm9tUmVjdChbbV9pbnNwZWN0b3JXaW5kb3cgZnJhbWVdKTsKKyAgICBpbnNw
ZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yV2luZG93
RnJhbWUoZnJhbWVTdHJpbmcpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dG
dWxsU2NyZWVuRGlkQ2hhbmdlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7CisgICAg
QVNTRVJUKG1faXNWaXNpYmxlKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOworCisg
ICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRm
b3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgpKSk7ICAgIAorfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9u
KQoreworICAgIGlmICghbV9pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9pc0F0dGFjaGVkKSB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhdHRhY2ggYXZhaWxhYmls
aXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8gZG8gdGhpcyBoZXJlIGluIGNhc2UKKyAgICAgICAgLy8g
dGhlIGF0dGFjaG1lbnQgdmlldyBpcyBub3QgdGhlIFdLVmlldy4KKyAgICAgICAgYXR0YWNoQXZh
aWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5z
cGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKworICAgIE5TUmVjdCBpbnNwZWN0
ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOworICAgIE5TUmVjdCBvbGRJbnNwZWN0
b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JWaWV3LmZyYW1lOworICAgIE5TUmVjdCBuZXdJbnNwZWN0
b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0OworICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNw
ZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHM7CisgICAgQ0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9w
ID0gTlNNYXhZKGluc3BlY3RlZFZpZXdGcmFtZSk7CisKKyAgICBzd2l0Y2ggKG1fYXR0YWNobWVu
dFNpZGUpIHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKKyAgICAgICAgaWYg
KCFjdXJyZW50RGltZW5zaW9uKQorICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TSGVp
Z2h0KG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRIZWln
aHQgPSBOU0hlaWdodChwYXJlbnRCb3VuZHMpOworICAgICAgICBDR0Zsb2F0IGluc3BlY3Rvckhl
aWdodCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRX
aW5kb3dIZWlnaHQoY3VycmVudERpbWVuc2lvbiwgcGFyZW50SGVpZ2h0KTsKKworICAgICAgICAv
LyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5u
ZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBO
U01ha2VSZWN0KDAsIGluc3BlY3RvckhlaWdodCwgTlNXaWR0aChwYXJlbnRCb3VuZHMpLCBpbnNw
ZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9ySGVpZ2h0KTsKKyAgICAgICAgbmV3SW5zcGVjdG9yVmll
d0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSksIGlu
c3BlY3RvckhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OlJpZ2h0OiB7CisgICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKKyAgICAg
ICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7
CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsK
KyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBw
YXJlbnRXaWR0aCk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0
aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRv
bid0IHVzZSB0aGF0CisgICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2
aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0
ZWQgdmlldy4KKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBw
YXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKKyAgICAgICAg
bmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdChwYXJlbnRXaWR0aCAtIGluc3BlY3Rv
cldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7CisKKyAg
ICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRv
dykgeworICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZp
ZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVj
dCBmcm9tVmlldzpuaWxdOworICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJ
bnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3Qp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OkxlZnQ6IHsKKyAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQorICAgICAgICAg
ICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKKwor
ICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOworICAg
ICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVu
dFdpZHRoKTsKKworICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBp
bnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3Qg
dXNlIHRoYXQKKyAgICAgICAgLy8gdG9wIHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcg
c2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2
aWV3LgorICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KGluc3BlY3Rvcldp
ZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsK
KyAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0
b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7CisKKyAgICAgICAgaWYgKE5TV2luZG93
ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgeworICAgICAgICAgICAg
TlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZl
cnRSZWN0Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwor
ICAgICAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5l
d0luc3BlY3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBpZiAoTlNFcXVhbFJlY3RzKG9sZEluc3Bl
Y3RvclZpZXdGcmFtZSwgbmV3SW5zcGVjdG9yVmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVjdHMoW2lu
c3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNwZWN0ZWRWaWV3RnJhbWUpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJz
IGZvciBib3RoIHZpZXdzIHJlc2l6ZSBpbiBzeW5jLgorICAgIFtpbnNwZWN0b3JWaWV3LndpbmRv
dyBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOworCisgICAgW2luc3BlY3RvclZpZXcg
c2V0RnJhbWU6bmV3SW5zcGVjdG9yVmlld0ZyYW1lXTsKKyAgICBbaW5zcGVjdGVkVmlldyBzZXRG
cmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVdOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIE5TVmlldyAqaW5zcGVj
dGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAg
ICBOU1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdo
dCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdp
bmRvd1dpZHRoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdl
KCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgTlNSZWN0IGluc3BlY3RlZFZpZXdS
ZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS53aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcg
PSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJW
aWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107
CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2lu
ZG93IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07
CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KKworICAgIFtpbnNwZWN0
b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgQ0dGbG9hdCBjdXJyZW50RGltZW5z
aW9uOworICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OkJvdHRvbToKKyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdNYXhZTWFyZ2luXTsKKyAgICAgICAgY3VycmVu
dERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVk
SGVpZ2h0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0
OgorICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdo
dFNpemFibGUgfCBOU1ZpZXdNaW5YTWFyZ2luXTsKKyAgICAgICAgY3VycmVudERpbWVuc2lvbiA9
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgW2lu
c3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNW
aWV3TWF4WE1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShjdXJyZW50RGltZW5zaW9u
KTsKKworICAgIFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZp
ZXcgcG9zaXRpb25lZDpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86aW5zcGVjdGVkVmlld107Cisg
ICAgW2luc3BlY3RvclZpZXcud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3
XTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQoreworICAg
IE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNo
bWVudFZpZXcoKTsKKyAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JW
aWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21T
dXBlcnZpZXddOworCisgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1Zp
ZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHdlIHNpemUgdGhlIGluc3BlY3RlZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5n
IHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhlIHNwYWNlIHRoYXQgdGhlCisgICAgLy8gYXR0YWNoZWQg
aW5zcGVjdG9yIHVzZWQgdG8uIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3Bl
Y3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCisKKyAgICBpbnNwZWN0
ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXcuc3Vw
ZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShpbnNwZWN0ZWRWaWV3LmZyYW1lKSk7CisKKyAgICAvLyBS
ZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0
b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAorICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNy
ZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KKyAgICBpZiAoIW1faXNWaXNpYmxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBvcGVuKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQor
eworICAgIGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0
ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAg
IGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0ZWRWaWV3
RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zaGVldFJl
Y3QgPSByZWN0OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2lu
ZG93RHJhZygpCit7CisgICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9w
YWdlLT5zdGFydFdpbmRvd0RyYWcoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1
bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAgaWYg
KCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5nICpwYXRo
ID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJNYWluIiBvZlR5cGU6QCJodG1sIl07CisgICAg
QVNTRVJUKHBhdGggJiYgcGF0aC5sZW5ndGgpOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBp
c0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBb
TlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUki
XTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8g
V2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0Lmh0bWwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCisgICAg
TlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIlRlc3QiIG9mVHlwZTpA
Imh0bWwiXTsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29s
dXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VV
UkwoKQoreworICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50
aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKKyAgICBpZiAoIWJ1bmRsZSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTlNTdHJpbmcgKnBhdGggPSBidW5kbGUucmVz
b3VyY2VQYXRoOworICAgIEFTU0VSVChwYXRoICYmIHBhdGgubGVuZ3RoKTsKKworICAgIHJldHVy
biBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6WUVTXS5hYnNvbHV0ZVN0
cmluZzsKK30KKworc3RhdGljIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvblBsaXN0KCkKK3sK
KyAgICBOU1N0cmluZyAqc3lzdGVtTGlicmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0
b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlF
Uykgb2JqZWN0QXRJbmRleDowXTsKKyAgICBOU1N0cmluZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0
aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJD
b3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCJdOworICAgIE5TRGljdGlvbmFyeSAqc3lz
dGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZp
bGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0aF07CisgICAgcmV0dXJuIHN5c3RlbVZlcnNpb25JbmZv
OworfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2Nh
bERlYnVnZ2FibGUoKQoreworICAgIE5TRGljdGlvbmFyeSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9u
UGxpc3QoKTsKKworICAgIERlYnVnZ2FibGVJbmZvRGF0YSByZXN1bHQ7CisgICAgcmVzdWx0LmRl
YnVnZ2FibGVUeXBlID0gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKyAgICBy
ZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1lID0gIm1hY09TIl9zOworICAgIHJlc3VsdC50YXJnZXRC
dWlsZFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RCdWlsZFZlcnNpb24iXTsKKyAgICByZXN1bHQu
dGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBwbGlzdFtAIlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24i
XTsKKyAgICByZXN1bHQudGFyZ2V0SXNTaW11bGF0b3IgPSBmYWxzZTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mYmVlNWNkZmYzOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5j
bHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJs
aWM6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNw
ZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElE
LCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQorICAgICAgICA6IG1f
cHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQorICAgICAgICAsIG1faW5z
cGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICAgICAgLCBtX2Nvbm5lY3Rpb25JRChj
b25uZWN0aW9uSUQpCisgICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkKKyAgICAgICAgLCBt
X2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+
c2V0Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94eSgpCisg
ICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIG1fcHJv
eHktPmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQoKQorICAgIHsKKyAgICAg
ICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46IHRoaXMgc2hvdWxkIGlu
ZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICAgICAgUmVm
PEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5m
bzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7CisgICAgICAgIGRlYnVnZ2Fi
bGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVnZ2FibGVUeXBlKTsKKyAgICAgICAgbV9w
cm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFj
a2VuZENvbW1hbmRzVVJMKCkpOworICAgIH0KKworICAgIHZvaWQgc2hvdygpCisgICAgeworICAg
ICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOworICAgIH0KKworICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQs
IG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgIH0KKworICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRl
bmQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9t
RnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7CisgICAgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBDb25uZWN0aW9uSUQgbV9jb25u
ZWN0aW9uSUQ7CisgICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKKyAgICBJbnNwZWN0b3I6OkRlYnVn
Z2FibGVUeXBlIG1fZGVidWdnYWJsZVR5cGU7Cit9OworCitSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OlJlbW90ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYg
b2JzZXJ2ZXIpCisgICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQoreworICAgIGlmICghdXJsLmhv
c3QoKSB8fCAhdXJsLnBvcnQoKSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgaW5zcGVj
dG9yIHVybDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2Nvbm5lY3Rpb25JRCA9IGNvbm5lY3RJbmV0KHVybC5ob3N0KCku
dXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgpKTsKKyAgICBpZiAoIW1fY29ubmVjdGlv
bklEKSB7CisgICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9yIGNsaWVudCBjb3VsZCBub3QgY29u
bmVjdCB0byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKTsKK30KKworUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkKK3sKK30KKwordm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcm
IGV2ZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fY29u
bmVjdGlvbklELmhhc1ZhbHVlKCkpOworICAgIGF1dG8gbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsK
KyAgICBzZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgoKSk7Cit9CisKK0hhc2hN
YXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OkNh
bGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaXNwYXRjaE1hcCgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4+IGRpc3Bh
dGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7CisgICAgICAgIHsgIkJhY2tl
bmRDb21tYW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcykgfSwKKyAgICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJf
cywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRh
cmdldExpc3QpIH0sCisgICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgc3RhdGlj
X2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9G
cm9udGVuZCkgfSwKKyAgICB9KTsKKworICAgIHJldHVybiBkaXNwYXRjaE1hcDsKK30KKwordm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKQorewor
ICAgIGF1dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGV2ZW50LT5zZXRT
dHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3MpOworICAgIHNlbmRXZWJJ
bnNwZWN0b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgpCit7CisgICAgbV90YXJnZXRzLmNsZWFy
KCk7CisgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVhcigpOworICAgIG1fb2JzZXJ2ZXIuY29u
bmVjdGlvbkNsb3NlZCgqdGhpcyk7CisgICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgq
dGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaWRDbG9zZShDb25uZWN0
aW9uSUQpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICBjb25uZWN0
aW9uQ2xvc2VkKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNw
ZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQoreworICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlv
bklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxl
VHlwZV0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4o
KnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVUeXBlKTsKKyAgICB9KTsK
KworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+c2hvdygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBzZXR1cEV2ZW50LT5z
ZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOworICAgIHNldHVwRXZlbnQtPnNldEludGVn
ZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBzZXR1cEV2ZW50LT5zZXRJ
bnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVu
dChzZXR1cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5sb2FkKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVz
c2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJ
RCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGF1dG8gYmFja2VuZEV2ZW50ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygiZXZlbnQi
X3MsICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRJbnRl
Z2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7CisgICAgYmFja2VuZEV2ZW50LT5z
ZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOworICAgIGJhY2tlbmRFdmVudC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQo
YmFja2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJn
ZXRJRCB0YXJnZXRJRCkKK3sKKyAgICBhdXRvIGNsb3NlZEV2ZW50ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkZyb250ZW5k
RGlkQ2xvc2UiX3MpOworICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQi
X3MsIGNvbm5lY3Rpb25JRCk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoInRhcmdldElE
Il9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGNsb3NlZEV2ZW50LT50
b0pTT05TdHJpbmcoKSk7CisKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1h
a2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmIGV2ZW50KQoreworICAg
IGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0
ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZShldmVudC5tZXNzYWdlLT51dGY4
KCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29u
c3QgRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVu
dC5tZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1l
c3NhZ2VWYWx1ZTsKKyAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2Fn
ZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJh
eShtZXNzYWdlQXJyYXkpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8VGFyZ2V0PiB0
YXJnZXRMaXN0OworICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgewor
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OworICAgICAgICBpZiAoIWl0
ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBUYXJnZXQgdGFyZ2V0OworICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVn
ZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCisgICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+
Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKKyAgICAgICAgICAgIHx8ICFpdGVtT2Jq
ZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKKyAgICAgICAgICAgIHx8ICFpdGVt
T2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7Cisg
ICAgfQorCisgICAgYXV0byBjb25uZWN0aW9uSUQgPSBldmVudC5jb25uZWN0aW9uSUQudmFsdWUo
KTsKKworICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCisgICAgVmVj
dG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7CisgICAgZm9yIChhdXRvJiBwYWlyIDog
bV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKKyAgICAgICAgaWYgKHBhaXIuZmlyc3QgIT0g
Y29ubmVjdGlvbklEKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAg
ICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5zZWNvbmQpIHsKKyAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVt
b3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7CisgICAgfQorICAgIGZvciAoYXV0byYgdGFyZ2V0SUQg
OiB0YXJnZXRzVG9SZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0
ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAgIG1fdGFyZ2V0cy5z
ZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBtX29ic2VydmVyLnRh
cmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFl
dmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5n
ZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdl
dElELnZhbHVlKCkpKTsKKyAgICBpZiAoIXByb3h5KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJveHktPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjlmNTFkNjNkZWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApAQCAtMCwwICsxLDk5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVDb250cm9sbGFibGVUYXJn
ZXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9u
Q2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsKK2NsYXNzIFJlbW90
ZUluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYp
ID0gMDsKK307CisKK3VzaW5nIENvbm5lY3Rpb25JRCA9IEluc3BlY3Rvcjo6Q29ubmVjdGlvbklE
OwordXNpbmcgVGFyZ2V0SUQgPSBJbnNwZWN0b3I6OlRhcmdldElEOworCitjbGFzcyBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JD
b25uZWN0aW9uQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOworcHVibGlj
OgorICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChVUkwsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVy
Jik7CisgICAgflJlbW90ZUluc3BlY3RvckNsaWVudCgpOworCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCB1cGRhdGUgdGhlIG1lc3NhZ2luZyBwcm90b2NvbCB0byB1c2UgRGVidWdnYWJsZVR5cGUg
aW5zdGVhZCBvZiBTdHJpbmcgZm9yIHRoZSB0YXJnZXQgdHlwZS4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MDQ3CisgICAgc3RydWN0IFRhcmdldCB7
CisgICAgICAgIFRhcmdldElEIGlkOworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgU3Ry
aW5nIG5hbWU7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hN
YXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4mIHRhcmdldHMoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldHM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9CisKKyAgICB2b2lkIGluc3BlY3Qo
Q29ubmVjdGlvbklELCBUYXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSk7CisgICAg
dm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0
SUQpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ+OworCisgICAgdm9pZCBzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCk7
CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKCk7CisKKyAgICB2b2lkIHNldFRhcmdldExpc3Qo
Y29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVu
dCYpOworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IEV2ZW50Jik7CisKKyAgICB2
b2lkIGRpZENsb3NlKENvbm5lY3Rpb25JRCkgZmluYWw7CisgICAgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPiYgZGlzcGF0Y2hNYXAoKSBmaW5hbDsKKworICAgIHZvaWQgc2VuZFdlYkluc3Bl
Y3RvckV2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRz
VVJMOworICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVyOworICAgIE9wdGlv
bmFsPENvbm5lY3Rpb25JRD4gbV9jb25uZWN0aW9uSUQ7CisgICAgSGFzaE1hcDxDb25uZWN0aW9u
SUQsIFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Q29u
bmVjdGlvbklELCBUYXJnZXRJRD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94
eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi43YmM0NTVkM2U2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgiCisKKyNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIkFQSUxvYWRlckNsaWVudC5o
IgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudFdv
cmxkLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5
LmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01FeGNl
cHRpb25IYW5kbGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVl
Lmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitjbGFzcyBTY3JpcHRNZXNzYWdlQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYlNjcmlwdE1lc3Nh
Z2VIYW5kbGVyOjpDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFNjcmlwdE1lc3NhZ2VDbGllbnQoUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
JiBpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpCisgICAgICAgIDogbV9pbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKSB7IH0KKworICAgIH5TY3JpcHRNZXNz
YWdlQ2xpZW50KCkgeyB9CisKKyAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYg
cGFnZSwgRnJhbWVJbmZvRGF0YSYmLCBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gdG9rZW5z
ID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoIjoiKTsKKyAgICAgICAg
aWYgKHRva2Vucy5zaXplKCkgIT0gMykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBV
UkwgcmVxdWVzdFVSTCB7IHsgfSwgcGFnZS5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAg
ICAgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaW5zcGVjdChyZXF1ZXN0VVJMLmhvc3RBbmRQ
b3J0KCksIHRva2Vuc1swXS50b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzFdLnRvVUludFN0cmljdCgp
LCB0b2tlbnNbMl0pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXImIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOworfTsKKworY2xhc3MgTG9h
ZGVyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6TG9hZGVyQ2xpZW50IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBMb2FkZXJDbGllbnQoRnVuY3Rpb248dm9p
ZCgpPiYmIGxvYWRlZENhbGxiYWNrKQorICAgICAgICA6IG1fbG9hZGVkQ2FsbGJhY2sgeyBXVEZN
b3ZlKGxvYWRlZENhbGxiYWNrKSB9IHsgfQorCisgICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJh
bWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmLCBBUEk6Ok5h
dmlnYXRpb24qLCBBUEk6Ok9iamVjdCopIGZpbmFsCisgICAgeworICAgICAgICBtX2xvYWRlZENh
bGxiYWNrKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9sb2Fk
ZWRDYWxsYmFjazsKK307CisKK3N0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlPiBwYXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGRlYnVnZ2Fi
bGVUeXBlU3RyaW5nKQoreworICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAiamF2YXNj
cmlwdCJfcykKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OkphdmFT
Y3JpcHQ7CisgICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJwYWdlIl9zKQorICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6UGFnZTsKKyAgICBpZiAoZGVidWdn
YWJsZVR5cGVTdHJpbmcgPT0gInNlcnZpY2Utd29ya2VyIl9zKQorICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6U2VydmljZVdvcmtlcjsKKyAgICBpZiAoZGVidWdnYWJs
ZVR5cGVTdHJpbmcgPT0gIndlYi1wYWdlIl9zKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpE
ZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisK
K3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjppbnNwZWN0KGNvbnN0IFN0cmlu
ZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdl
dElELCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byBkZWJ1Z2dhYmxlVHlwZSA9IHBh
cnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKHR5cGUpOworICAgIGlmICghZGVidWdnYWJsZVR5
cGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGRlYnVnZ2FibGUgdHlwZTogXCIlc1wi
IiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX2luc3BlY3RvckNsaWVudCkKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmluc3BlY3Qo
Y29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUudmFsdWUoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpydW5TY3JpcHQoY29uc3QgU3RyaW5n
JiBzY3JpcHQpCit7CisgICAgbV9wYWdlLnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZSh7IHNjcmlw
dCwgZmFsc2UsIFdURjo6bnVsbG9wdCwgZmFsc2UgfSwgCisgICAgICAgIFtdKEFQSTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlKiwgT3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscz4gZXhj
ZXB0aW9uRGV0YWlscywgQ2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbkRldGFpbHMpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gcnVu
bmluZyBzY3JpcHQgXCIlc1wiIiwgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZS51dGY4KCkuZGF0
YSgpKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6
OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYgY2xpZW50KQoreworICAg
IFN0cmluZ0J1aWxkZXIgaHRtbDsKKyAgICBpZiAoY2xpZW50LnRhcmdldHMoKS5pc0VtcHR5KCkp
CisgICAgICAgIGh0bWwuYXBwZW5kKCI8cD5ObyB0YXJnZXRzIGZvdW5kPC9wPiJfcyk7CisgICAg
ZWxzZSB7CisgICAgICAgIGh0bWwuYXBwZW5kKCI8dGFibGU+Iik7CisgICAgICAgIGZvciAoYXV0
byYgY29ubmVjdGlvbklEIDogY2xpZW50LnRhcmdldHMoKS5rZXlzKCkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgdGFyZ2V0IDogY2xpZW50LnRhcmdldHMoKS5nZXQoY29ubmVjdGlvbklEKSkg
eworICAgICAgICAgICAgICAgIGh0bWwuYXBwZW5kKG1ha2VTdHJpbmcoCisgICAgICAgICAgICAg
ICAgICAgICI8dGJvZHk+PHRyPiIKKyAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImRh
dGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1lLCAiPC9kaXY+PGRp
diBjbGFzcz1cInRhcmdldHVybFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48L3RkPiIKKyAgICAg
ICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5cGU9XCJidXR0b25c
IiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxl
cnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdlKFxcJyIsIGNvbm5lY3Rpb25JRCwgIjoiLCB0YXJnZXQu
aWQsICI6IiwgdGFyZ2V0LnR5cGUsICJcXCcpO1wiPjwvdGQ+IgorICAgICAgICAgICAgICAgICAg
ICAiPC90cj48L3Rib2R5PiIKKyAgICAgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBodG1sLmFwcGVuZCgiPC90YWJsZT4iKTsKKyAgICB9CisgICAgbV90
YXJnZXRMaXN0c0h0bWwgPSBodG1sLnRvU3RyaW5nKCk7CisgICAgaWYgKG1fcGFnZUxvYWRlZCkK
KyAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlcjo6dXBkYXRlVGFyZ2V0TGlzdCgpCit7CisgICAgaWYgKCFtX3RhcmdldExp
c3RzSHRtbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcnVuU2NyaXB0KG1ha2VTdHJpbmcoInVwZGF0
ZVRhcmdldHMoYCIsIG1fdGFyZ2V0TGlzdHNIdG1sLCAiYCk7IikpOworICAgICAgICBtX3Rhcmdl
dExpc3RzSHRtbCA9IHsgfTsKKyAgICB9Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyOjpwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmIHBhZ2VQcm94eSwgV2Vi
VVJMU2NoZW1lVGFzayYgdGFzaykKK3sKKyAgICBhdXRvJiByZXF1ZXN0VVJMID0gdGFzay5yZXF1
ZXN0KCkudXJsKCk7CisKKyAgICAvLyBEZXN0cm95IHRoZSBjbGllbnQgYmVmb3JlIGNyZWF0aW5n
IGEgbmV3IGNvbm5lY3Rpb24gc28gaXQgY2FuIGNvbm5lY3QgdG8gdGhlIHNhbWUgcG9ydAorICAg
IG1faW5zcGVjdG9yQ2xpZW50ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3RvckNsaWVudCA9IG1h
a2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PihyZXF1ZXN0VVJMLCAqdGhpcyk7CisKKyAg
ICAvLyBTZXR1cCB0YXJnZXQgcG9zdE1lc3NhZ2UgbGlzdGVuZXIKKyAgICBhdXRvIGhhbmRsZXIg
PSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Y3JlYXRlKG1ha2VVbmlxdWU8U2NyaXB0TWVzc2Fn
ZUNsaWVudD4oKnRoaXMpLCAiaW5zcGVjdG9yIiwgQVBJOjpVc2VyQ29udGVudFdvcmxkOjpub3Jt
YWxXb3JsZCgpKTsKKyAgICBwYWdlUHJveHkucGFnZUdyb3VwKCkudXNlckNvbnRlbnRDb250cm9s
bGVyKCkuYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXIuZ2V0KCkpOworCisgICAg
Ly8gU2V0dXAgbG9hZGVyIGNsaWVudCB0byBnZXQgbm90aWZpZWQgb2YgcGFnZSBsb2FkCisgICAg
bV9wYWdlLnNldExvYWRlckNsaWVudChtYWtlVW5pcXVlPExvYWRlckNsaWVudD4oW3RoaXNdIHsK
KyAgICAgICAgbV9wYWdlTG9hZGVkID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgp
OworICAgIH0pKTsKKyAgICBtX3BhZ2VMb2FkZWQgPSBmYWxzZTsKKworICAgIFN0cmluZ0J1aWxk
ZXIgaHRtbEJ1aWxkZXI7CisgICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAorICAgICAgICAiPGh0bWw+
PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKKyAgICAgICAgIjxtZXRhIGh0
dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0
Zi04XCIgLz4iCisgICAgICAgICI8c3R5bGU+IgorICAgICAgICAiICBoMSB7IGNvbG9yOiAjYmFi
ZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRvbTogMDsgfSIKKyAg
ICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1mb250OyBmb250LXNp
emU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHggMCAyMHB4OyBiYWNr
Z3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCisgICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLWlt
YWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xv
ci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsiCisgICAgICAgICIg
ICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8t
cmVwZWF0OyB9IgorICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBib3JkZXItY29sbGFw
c2U6IGNvbGxhcHNlOyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB9IgorICAgICAgICAiICB0YWJsZSwg
dGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVy
LXJpZ2h0OiBub25lOyB9IgorICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRvbTogMzBweDsgfSIK
KyAgICAgICAgIiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9IgorICAgICAgICAiICB0ZC5kYXRhIHsg
d2lkdGg6IDIwMHB4OyB9IgorICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZvbnQtd2VpZ2h0OiBi
b2xkOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6
IGVsbGlwc2lzOyB9IgorICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6ICNiYWJkYjY7IGJh
Y2tncm91bmQ6ICNlZWU7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgb3ZlcmZsb3ctd3JhcDogYnJl
YWstd29yZDsgfSIKKyAgICAgICAgIiAgdGQuaW5wdXQgeyB3aWR0aDogNjRweDsgfSIKKyAgICAg
ICAgIiAgaW5wdXQgeyB3aWR0aDogMTAwJTsgcGFkZGluZzogOHB4OyB9IgorICAgICAgICAiPC9z
dHlsZT4iCisgICAgICAgICI8L2hlYWQ+PGJvZHk+PGgxPkluc3BlY3RhYmxlIHRhcmdldHM8L2gx
PiIKKyAgICAgICAgIjxkaXYgaWQ9XCJ0YXJnZXRsaXN0XCI+PHA+Tm8gdGFyZ2V0cyBmb3VuZDwv
cD48L2Rpdj48L2JvZHk+IgorICAgICAgICAiPHNjcmlwdD4iCisgICAgICAgICJmdW5jdGlvbiB1
cGRhdGVUYXJnZXRzKHN0cikgeyIKKyAgICAgICAgICAgICJsZXQgdGFyZ2V0RGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldGxpc3QnKTsiCisgICAgICAgICAgICAidGFyZ2V0RGl2
LmlubmVySFRNTCA9IHN0cjsiCisgICAgICAgICJ9IgorICAgICAgICAiPC9zY3JpcHQ+Iik7Cisg
ICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8L2h0bWw+Iik7CisKKyAgICBhdXRvIGh0bWwgPSBodG1s
QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBhdXRvIGRhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShodG1sLmRhdGEoKSwgaHRtbC5sZW5ndGgoKSk7CisgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9odG1sIl9zLCBodG1sLmxlbmd0aCgpLCAiVVRG
LTgiX3MpOworICAgIHRhc2suZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICB0YXNr
LmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoZGF0YSkpOworICAgIHRhc2suZGlkQ29tcGxldGUoUmVz
b3VyY2VFcnJvcigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4w
ZjYwMGVmZGVkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgKQEAgLTAsMCAr
MSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5j
bHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxlci5oIgorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFVS
TDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlVSTFNjaGVtZVRhc2s7CisK
K2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciBmaW5hbCA6IHB1YmxpYyBSZW1v
dGVJbnNwZWN0b3JPYnNlcnZlciwgcHVibGljIFdlYlVSTFNjaGVtZUhhbmRsZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyPiBjcmVhdGUo
V2ViUGFnZVByb3h5JiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlcihwYWdlKSk7IH0KKworICAgIHZvaWQgaW5zcGVjdChjb25zdCBTdHJp
bmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5
cGUpOworCitwcml2YXRlOgorICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihXZWJQ
YWdlUHJveHkmIHBhZ2UpCisgICAgICAgIDogbV9wYWdlKHBhZ2UpIHsgfQorCisgICAgLy8gUmVt
b3RlSW5zcGVjdG9yT2JzZXJ2ZXIKKyAgICB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUlu
c3BlY3RvckNsaWVudCYpIGZpbmFsOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0KKworICAgIC8vIFdlYlVSTFNjaGVtZUhhbmRsZXIK
KyAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRh
c2smKSBmaW5hbDsKKyAgICB2b2lkIHBsYXRmb3JtU3RvcFRhc2soV2ViUGFnZVByb3h5JiwgV2Vi
VVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorICAgIHZvaWQgcGxhdGZvcm1UYXNrQ29tcGxldGVk
KFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KKworICAgIHZvaWQgdXBkYXRlVGFyZ2V0TGlz
dCgpOworCisgICAgdm9pZCBydW5TY3JpcHQoY29uc3QgU3RyaW5nJik7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBX
ZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICBib29sIG1fcGFnZUxvYWRlZCB7IGZhbHNlIH07Cisg
ICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNIdG1sOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjM5MGMyYjk0ZjJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKQEAgLTAsMCAr
MSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQ
b2ludGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1l
ID0gTCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKKworTFJFU1VMVCBDQUxMQkFDSyBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90ZVdlYkluc3BlY3RvclByb3h5Kj4oOjpH
ZXRQcm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKKworICAg
IHN3aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAgICByZXR1cm4gY2xpZW50
LT5zaXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAgcmV0dXJuIGNsaWVu
dC0+b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisK
K3N0YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhh
dmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRX
aW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7
CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSAg
ICAgICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXgu
Y2JXbmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAgPSAwOworICAgIHdj
ZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vy
c29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2Nl
eC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Q2xhc3NOYW1lOworICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOwor
CisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisgICAgcmV0dXJuIDo6UmVn
aXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6c2l6ZUNoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiAw
OworCisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxl
LCAmcmVjdCk7CisgICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVj
dC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSBy
ZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCit7CisgICAgOjpTaG93V2luZG93KG1fZnJv
bnRlbmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICByZXR1
cm4gMDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFJlZlB0cjxXZWJQcmVmZXJl
bmNlcz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2Vi
S2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNz
RnJvbUZpbGVVUkxzKHRydWUpOworCisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIHBy
ZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVu
Y2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNl
bmRpZgorCisgICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3Vw
OjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0cikpOwor
CisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNy
ZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9y
UHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIpKSk7CisgICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdldCgpKTsKKyAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5nZXQoKSk7CisKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwgMTAwMCk7CisgICAgcmVnaXN0ZXJXaW5k
b3dDbGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAor
ICAgICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwg
MCwgMCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9mcm9udGVuZEhhbmRsZSwgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMp
KTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX1NIT1cpOworCisgICAgUkVD
VCByOworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcik7CisgICAgbV93
ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2Zyb250ZW5k
SGFuZGxlKTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0KK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0
V2luZG93RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1P
cGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mKSB7IH0KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRlbmRI
YW5kbGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmRlYWM5NzMxNzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5
V2luLmNwcApAQCAtMCwwICsxLDQ1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpbmNsdWRlICJBUElOYXZp
Z2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgorI2luY2x1ZGUgIkFQ
SVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNs
dWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
cy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUJ1bmRsZVdpbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9X
aW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+CisK
KyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclBy
b3h5UG9pbnRlclByb3AgPSBMIldlYkluc3BlY3RvclByb3h5UG9pbnRlciI7CitzdGF0aWMgY29u
c3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiV2ViSW5zcGVjdG9yUHJv
eHlDbGFzcyI7CisKK3N0cnVjdCBJbnNwZWN0ZWRXaW5kb3dJbmZvIHsKKyAgICBpbnQgbGVmdDsK
KyAgICBpbnQgdG9wOworICAgIGludCB2aWV3V2lkdGg7CisgICAgaW50IHZpZXdIZWlnaHQ7Cisg
ICAgaW50IHBhcmVudFdpZHRoOworICAgIGludCBwYXJlbnRIZWlnaHQ7Cit9OworCitzdGF0aWMg
SW5zcGVjdGVkV2luZG93SW5mbyBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVk
V2luZG93LCBIV05EIHBhcmVudFdpbmRvdykKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRD
bGllbnRSZWN0KGluc3BlY3RlZFdpbmRvdywgJnJlY3QpOworICAgIDo6TWFwV2luZG93UG9pbnRz
KGluc3BlY3RlZFdpbmRvdywgcGFyZW50V2luZG93LCAoTFBQT0lOVCkmcmVjdCwgMik7CisKKyAg
ICBSRUNUIHBhcmVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KHBhcmVudFdpbmRvdywgJnBh
cmVudFJlY3QpOworICAgIHJldHVybiB7IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQg
LSByZWN0LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIHBhcmVudFJlY3QucmlnaHQgLSBw
YXJlbnRSZWN0LmxlZnQsIHBhcmVudFJlY3QuYm90dG9tIC0gcGFyZW50UmVjdC50b3AgfTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQgaHdu
ZCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBzd2l0Y2ggKG1zZykg
eworICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6IHsKKyAgICAgICAgaWYgKCFtX2lzQXR0
YWNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byB3aW5kb3dQb3MgPSBy
ZWludGVycHJldF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJhbSk7CisKKyAgICAgICAgaWYgKHdpbmRv
d1Bvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEhXTkQgcGFyZW50ID0gR2V0UGFyZW50KGh3bmQpOworICAgICAgICBSRUNUIHBhcmVudFJlY3Q7
CisgICAgICAgIEdldENsaWVudFJlY3QocGFyZW50LCAmcGFyZW50UmVjdCk7CisKKyAgICAgICAg
UkVDVCBpbnNwZWN0b3JSZWN0OworICAgICAgICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yVmll
d1dpbmRvdywgJmluc3BlY3RvclJlY3QpOworCisgICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50
U2lkZSkgeworICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaW5zcGVjdG9yUmVj
dC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcCwgd2luZG93UG9zLT5jeSk7CisgICAgICAgICAg
ICB3aW5kb3dQb3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKKyAgICAgICAgICAgIDo6U2V0V2lu
ZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3Mt
PnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9O
T1pPUkRFUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF0
dGFjaG1lbnRTaWRlOjpMZWZ0OgorICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDog
eworICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9yV2lkdGggPSBXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoaW5z
cGVjdG9yUmVjdC5yaWdodCAtIGluc3BlY3RvclJlY3QubGVmdCwgd2luZG93UG9zLT5jeCk7Cisg
ICAgICAgICAgICB3aW5kb3dQb3MtPmN4IC09IGluc3BlY3RvcldpZHRoOworICAgICAgICAgICAg
OjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPnggKyB3
aW5kb3dQb3MtPmN4LCB3aW5kb3dQb3MtPnksIGluc3BlY3RvcldpZHRoLCB3aW5kb3dQb3MtPmN5
LCBTV1BfTk9aT1JERVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0xSRVNVTFQg
Q0FMTEJBQ0sgV2ViSW5zcGVjdG9yUHJveHk6OnduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94eSog
Y2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcCho
d25kLCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7CisgICAgc3dpdGNoIChtc2cpIHsK
KyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIDo6U2V0V2luZG93UG9zKGNsaWVudC0+bV9pbnNw
ZWN0b3JWaWV3V2luZG93LCAwLCAwLCAwLCBMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSks
IFNXUF9OT1pPUkRFUik7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgV01fQ0xPU0U6Cisg
ICAgICAgIGNsaWVudC0+Y2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwg
bXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lz
dGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93
Q2xhc3MgPSBmYWxzZTsKKworICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsK
KworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFT
U0VYKTsKKyAgICB3Y2V4LnN0eWxlID0gMDsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jID0gd25kUHJv
YzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSA9IDA7Cisg
ICAgd2NleC5oSW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOworICAgIHdjZXgu
aEljb24gPSAwOworICAgIHdjZXguaEN1cnNvciA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsK
KyAgICB3Y2V4LmhickJhY2tncm91bmQgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsK
KyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKKyAg
ICB3Y2V4LmhJY29uU20gPSAwOworICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7
Cit9CisKK3N0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdl
UmVmIHBhZ2VSZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdh
dGUgYW55d2hlcmUuCisgICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5h
dmlnYXRpb25BY3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOworICAgIGlmIChzb3VyY2VGcmFtZSAm
JiAhc291cmNlRnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKKyAgICAgICAgdG9JbXBsKGxpc3RlbmVy
UmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBXZWJJ
bnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJ
bnNwZWN0b3JQcm94eSo+KGNsaWVudEluZm8pOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94
eSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZp
Z2F0aW9uQWN0aW9uUmVmKS0+cmVxdWVzdCgpOworCisgICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0
aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KKyAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFp
bk9yVGVzdEluc3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsKKyAgICAgICAgdG9JbXBsKGxp
c3RlbmVyUmVmKS0+dXNlKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQ
cmV2ZW50IGV2ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBh
Z2UuCisgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7CisKKyAgICAvLyBBbmQgaW5z
dGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAgICB3ZWJJbnNwZWN0b3JQcm94
eS0+aW5zcGVjdGVkUGFnZSgpLT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKK30KKwor
c3RhdGljIHZvaWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBz
dGF0aWNfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudElu
Zm8pKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOworICAgIHdlYkluc3BlY3RvclBy
b3h5LT5jbG9zZUZvckNyYXNoKCk7Cit9CisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5zcGVjdGVk
UGFnZSgpKTsKKworICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRl
KFN0cmluZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVS
X01PREUpCisgICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVj
dG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZl
cmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2Vz
LT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRp
ZgorICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7
CisgICAgcHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoeyB9KTsKKyAgICBh
dXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElk
ZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOworICAgIGF1dG8gcGFnZUNvbmZpZ3Vy
YXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdlQ29uZmln
dXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25M
ZXZlbCgpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVu
Y2VzLnB0cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91
cC5wdHIoKSk7CisKKyAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVu
dCA9IHsKKyAgICAgICAgeyAwLCB0aGlzIH0sCisgICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24sCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZQorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2Fk
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2
aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0
ciwgLy8gZGlkRmluaXNoTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2
aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJm
cmFtZQorICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQKKyAgICAgICAg
bnVsbHB0ciwgLy8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAv
LyByZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZQorICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gs
CisgICAgICAgIG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKKworICAgICAgICBu
dWxscHRyLCAvLyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8v
IHdpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZp
Z2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2Vz
dHVyZVNuYXBzaG90CisgICAgfTsKKworICAgIFJFQ1QgciA9IHsgMCwgMCwgc3RhdGljX2Nhc3Q8
TE9ORz4oaW5pdGlhbFdpbmRvd1dpZHRoKSwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRv
d0hlaWdodCkgfTsKKyAgICBhdXRvIHBhZ2UgPSBpbnNwZWN0ZWRQYWdlKCk7CisgICAgbV9pbnNw
ZWN0ZWRWaWV3V2luZG93ID0gcGFnZS0+dmlld1dpZGdldCgpOworICAgIG1faW5zcGVjdGVkVmll
d1BhcmVudFdpbmRvdyA9IDo6R2V0UGFyZW50KG1faW5zcGVjdGVkVmlld1dpbmRvdyk7CisgICAg
YXV0byB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIG1faW5zcGVjdG9yVmlldyA9ICZ2aWV3LmxlYWtS
ZWYoKTsKKyAgICBhdXRvIGluc3BlY3RvclBhZ2UgPSBtX2luc3BlY3RvclZpZXctPnBhZ2UoKTsK
KyAgICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBpbnNwZWN0b3JQYWdlLT52aWV3V2lkZ2V0KCk7
CisgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSks
ICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKQoreworICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3Zl
TGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKyAgICBtX2luc3BlY3RvclZp
ZXcgPSBudWxscHRyOworICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisgICAgaWYgKG1f
aW5zcGVjdG9yVmlld1dpbmRvdykgeworICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0
b3JWaWV3V2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gbnVsbHB0cjsK
KyAgICB9CisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7CisgICAgICAgIDo6UmVt
b3ZlUHJvcChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVy
UHJvcCk7CisgICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7
CisgICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gbnVsbHB0cjsKKyAgICB9CisgICAg
bV9pbnNwZWN0ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3RlZFZpZXdQYXJl
bnRXaW5kb3cgPSBudWxscHRyOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RvclBhZ2VVUkwoKQoreworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0
bWxVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktp
dEJ1bmRsZSgpLCBDRlNUUigiTWFpbiIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVj
dG9yVUkiKSkpOworICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsK
KyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCitTdHJpbmcgV2ViSW5zcGVjdG9y
UHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWlu
UHRyPENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVS
TChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRlc3QiKSwgQ0ZTVFIoImh0bWwiKSwg
Q0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRt
bFVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworU3Ry
aW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKK3sKKyNpZiBVU0UoQ0Yp
CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBiYXNlVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNv
cHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIldlYkluc3BlY3Rv
clVJIiksIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoYmFz
ZVVSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworRGVi
dWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxl
KCkKK3sKKyAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhpcyBz
aG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YS4KKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9E
YXRhOjplbXB0eSgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVu
dFJlY3QobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7CisgICAgcmV0dXJuIHJlY3QuYm90
dG9tIC0gcmVjdC50b3A7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGll
bnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOworICAgIHJldHVybiByZWN0LnJp
Z2h0IC0gcmVjdC5sZWZ0OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0
dGFjaCgpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZFNpemUg
PSAzMDA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZFdpZHRoID0g
NzUwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAy
NTA7CisKKyAgICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgJiYgOjpHZXRQYXJlbnQobV9p
bnNwZWN0b3JWaWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRldGFjaFdpbmRvdykgeworICAgICAg
ICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVu
dFdpbmRvdyk7CisgICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywg
U1dfSElERSk7CisgICAgfQorCisgICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVy
OjphZGRMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOworCisgICAgaWYgKG1f
YXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgeworICAgICAgICB1bnNp
Z25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdo
dCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3Rk
OjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXpl
LCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdW5zaWdu
ZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkg
KiAzIC8gNDsKKyAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4
KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhp
bXVtQXR0YWNoZWRXaWR0aCkpKTsKKyAgICB9CisgICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9y
Vmlld1dpbmRvdywgU1dfU0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtRGV0YWNoKCkKK3sKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nl
c3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2luc3BlY3RvckRldGFjaFdpbmRv
dykgeworICAgICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7CisgICAgICAgIG1faW5zcGVjdG9y
RGV0YWNoV2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBXZWJJbnNwZWN0b3JQcm94eUNsYXNz
TmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICAgICAgICAgIENXX1VTRURFRkFVTFQs
IENXX1VTRURFRkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwK
KyAgICAgICAgICAgIDAsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOworICAgICAg
ICA6OlNldFByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclByb3h5UG9p
bnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgfQorCisgICAg
V2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3Bl
Y3RlZFZpZXdXaW5kb3csIHRoaXMpOworCisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50
UmVjdChtX2luc3BlY3RvckRldGFjaFdpbmRvdywgJnJlY3QpOworICAgIGF1dG8gd2luZG93SW5m
byA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dp
bmRvdywgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5z
cGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5i
b3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2lu
c3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdp
bmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50
SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7CisKKyAgICBpZiAobV9pc1Zp
c2libGUpCisgICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1df
U0hPVyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIGF1dG8gd2luZG93SW5mbyA9IGdl
dEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZp
ZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRv
dywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIGhlaWdodCwg
d2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgaGVpZ2h0LCBTV1BfTk9a
T1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2lu
ZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdp
bmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwg
U1dQX05PWk9SREVSKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQoreworICAgIGF1dG8gd2luZG93SW5m
byA9IGdldEluc3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmll
d1dpbmRvdywgMCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpZHRoLCB3aW5kb3dJbmZvLnRv
cCwgd2lkdGgsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9O
T1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3
aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0g
d2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9w
LCBTV1BfTk9aT1JERVIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNl
dFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiAvKiB1cmwgKi8pCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hh
bmdlZChib29sIC8qIGF2YWlsYWJsZSAqLykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkK
K3sKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFy
dFdpbmRvd0RyYWcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyOGNhMmZiZmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFBy
b3h5LmgiCi0KLSNpbmNsdWRlICJQcm92aXNpb25hbFBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldl
YkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0jaW5j
bHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkK
LXsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRQcm94eT4ocGFnZSwgdGFy
Z2V0SWQsIHR5cGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+
IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zp
c2lvbmFsUGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlIHR5cGUpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBJbnNwZWN0b3JUYXJnZXRQcm94
eTo6Y3JlYXRlKHByb3Zpc2lvbmFsUGFnZS5wYWdlKCksIHRhcmdldElkLCB0eXBlKTsKLSAgICB0
YXJnZXQtPm1fcHJvdmlzaW9uYWxQYWdlID0gbWFrZVdlYWtQdHIocHJvdmlzaW9uYWxQYWdlKTsK
LSAgICByZXR1cm4gdGFyZ2V0OwotfQotCi1JbnNwZWN0b3JUYXJnZXRQcm94eTo6SW5zcGVjdG9y
VGFyZ2V0UHJveHkoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSkKLSAgICA6IG1fcGFnZShwYWdlKQot
ICAgICwgbV9pZGVudGlmaWVyKHRhcmdldElkKQotICAgICwgbV90eXBlKHR5cGUpCi17Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENo
YW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQotewotICAgIGlmIChtX3Byb3Zp
c2lvbmFsUGFnZSkgewotICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9j
ZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25uZWN0SW5z
cGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpKTsKLX0KLQotdm9pZCBJbnNwZWN0
b3JUYXJnZXRQcm94eTo6ZGlzY29ubmVjdCgpCi17Ci0gICAgaWYgKGlzUGF1c2VkKCkpCi0gICAg
ICAgIHJlc3VtZSgpOwotCi0gICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7Ci0gICAgICAgIG1f
cHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVj
dG9yKGlkZW50aWZpZXIoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1f
cGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGlzY29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkpKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotewotICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewotICAgICAgICBt
X3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1Rh
cmdldEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAobV9wYWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFn
ZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChpZGVu
dGlmaWVyKCksIG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6ZGlk
Q29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKQotewotICAgIG1fcHJvdmlzaW9uYWxQYWdlID0gbnVs
bHB0cjsKLX0KLQotYm9vbCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6aXNQcm92aXNpb25hbCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICEhbV9wcm92aXNpb25hbFBhZ2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFBy
b3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjM5Y2VjOGUxLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0j
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBy
b3Zpc2lvbmFsUGFnZVByb3h5OwotY2xhc3MgV2ViUGFnZVByb3h5OwotCi0vLyBOT1RFOiBUaGlz
IFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZy
b250ZW5kIGNoYW5uZWwsIHNpbmNlCi0vLyBhbnkgdGFyZ2V0IC0+IGZyb250ZW5kIG1lc3NhZ2Vz
IHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0aCBhIHRhcmdldElkLgotCi1j
bGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOwotcHVibGljOgotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkm
LCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUp
OwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0
ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgSW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFn
ZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlKTsKLSAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9Ci0KLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7
Ci0gICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlwZTsKLSAgICBXZWFrUHRyPFByb3Zpc2lv
bmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTkyYzI5ZjQxOC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIK
LQotI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlv
bi5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVj
dG9yUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5KCkKLSAgICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5m
bzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkpCi17Ci19Ci0KLVJlbW90ZVdl
Ykluc3BlY3RvclByb3h5Ojp+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQotewotICAgIEFTU0VS
VCghbV9pbnNwZWN0b3JQYWdlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
aW52YWxpZGF0ZSgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQot
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUoYm9vbCBhdmFpbGFibGUpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0g
ICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5z
cGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYXZhaWxh
YmxlKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKFJl
ZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25zdCBTdHJpbmcmIGJh
Y2tlbmRDb21tYW5kc1VSTCkKLXsKLSAgICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
LQotICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKLSAgICBt
X2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKLQotICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUo
bV9kZWJ1Z2dhYmxlSW5mby0+ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tlbmRDb21tYW5kc1VS
TCkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OmNsb3NlRnJvbUJhY2tlbmQoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJv
bUNyYXNoKCkKLXsKLSAgICAvLyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1c3QgY2xvc2Vk
LCBzbyBjbGllbnRzIGFyZSBpbmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4KLSAgICBmcm9u
dGVuZERpZENsb3NlKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3co
KQotewotICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNl
bmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQotewotICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5jbG9zZUZyb21Gcm9udGVuZCgpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKLXsK
LSAgICBBU1NFUlQoIW1fYmFja2VuZENvbW1hbmRzVVJMLmlzRW1wdHkoKSk7Ci0KLSAgICBjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIGxvYWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5
UmVmKCksIG1fYmFja2VuZENvbW1hbmRzVVJMKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgcGxh
dGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
c2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIHBsYXRmb3Jt
U2F2ZShzdWdnZXN0ZWRVUkwsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxv
Zyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIHBsYXRmb3Jt
QXBwZW5kKHN1Z2dlc3RlZFVSTCwgY29udGVudCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxh
dGZvcm1TZXRTaGVldFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYgdXJsKQotewotICAgIHBsYXRmb3JtT3BlbkluTmV3VGFiKHVybCk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
ZXJ0aWZpY2F0ZUluZm8pOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5k
TWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fY2xp
ZW50KQotICAgICAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKLQotICAgIHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOwot
Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmICgh
bV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOwotCi0gICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKLQot
ICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0KLSAgICBwbGF0Zm9ybUNsb3NlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLSNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8
ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKLVdl
YlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0
U3RhdGUoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdU
b0Zyb250KCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Ci12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hl
ZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlm
aWNhdGVJbmZvJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkgeyB9Ci0jZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZhYjU4ZjhjZTA2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQSU9iamVj
dC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NM
QVNTIE5TV2luZG93OwotT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOwotT0JK
Q19DTEFTUyBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXI7Ci1PQkpDX0NMQVNT
IFdLV2ViVmlldzsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZp
Y2F0ZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBBUEkgewotY2xhc3MgRGVidWdnYWJsZUluZm87Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJW
aWV3OwotCi1jbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkgPSAwOwotfTsKLQotY2xhc3Mg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eT4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkpOwotICAg
IH0KLQotICAgIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgdm9pZCBzZXRDbGll
bnQoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNs
aWVudDsgfQotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwotCi0gICAg
dm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2b2lkIGxvYWQoUmVmPEFQSTo6RGVidWdnYWJsZUlu
Zm8+JiYsIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKTsKLSAgICB2b2lkIGNsb3Nl
RnJvbUJhY2tlbmQoKTsKLSAgICB2b2lkIHNob3coKTsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgTlNXaW5kb3cgKndpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93LmdldCgpOyB9Ci0g
ICAgV0tXZWJWaWV3ICp3ZWJWaWV3KCkgY29uc3Q7Ci0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNoZWV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENT
dHJpbmcmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQotICAgIExSRVNVTFQg
c2l6ZUNoYW5nZSgpOwotICAgIExSRVNVTFQgb25DbG9zZSgpOwotCi0gICAgc3RhdGljIExSRVNV
TFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0jZW5kaWYK
LQotICAgIHZvaWQgY2xvc2VGcm9tQ3Jhc2goKTsKLQotcHJpdmF0ZToKLSAgICBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSgpOwotCi0gICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOwotCi0gICAgLy8gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgbWVzc2FnZXMuCi0gICAgdm9p
ZCBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAgdm9pZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0
U3RhdGUoKTsKLSAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOwotICAgIHZvaWQgc2F2ZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2Rl
ZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKLSAgICB2b2lkIHNldFNoZWV0UmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwotICAg
IHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHNob3dDZXJ0
aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB2b2lkIHNlbmRN
ZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSAgICB2b2lkIGNyZWF0
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKLQotICAgIC8vIFBsYXRmb3JtIGltcGxlbWVudGF0aW9ucy4KLSAgICBXZWJQYWdl
UHJveHkqIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVJl
c2V0U3RhdGUoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50
LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsK
LSAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLSAgICB2b2lkIHBsYXRmb3Jt
T3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIHBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotCi0gICAgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlDbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwotICAgIFdlYlBh
Z2VQcm94eSogbV9pbnNwZWN0b3JQYWdlIHsgbnVsbHB0ciB9OwotCi0gICAgUmVmPEFQSTo6RGVi
dWdnYWJsZUluZm8+IG1fZGVidWdnYWJsZUluZm87Ci0gICAgU3RyaW5nIG1fYmFja2VuZENvbW1h
bmRzVVJMOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXc7Ci0gICAgUmV0YWluUHRyPE5TV2luZG93PiBt
X3dpbmRvdzsKLSAgICBSZXRhaW5QdHI8V0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFw
dGVyPiBtX29iakNBZGFwdGVyOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZXRhaW5QdHI8TlNVUkw+
PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3No
ZWV0UmVjdDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBHdGtXaWRnZXQqIG1fd2Vi
VmlldyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1fd2luZG93IHsgbnVsbHB0ciB9Owot
I2VuZGlmCi0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQotICAgIEhXTkQgbV9mcm9udGVuZEhhbmRs
ZTsKLSAgICBSZWZQdHI8V2ViVmlldz4gbV93ZWJWaWV3OwotI2VuZGlmCi19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJlMDkxYjc4ZmI2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxs
CkBAIC0xLDQwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgewotICAgIEZyb250ZW5kRGlk
Q2xvc2UoKQotICAgIFJlb3BlbigpCi0gICAgUmVzZXRTdGF0ZSgpCi0gICAgQnJpbmdUb0Zyb250
KCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUs
IFN0cmluZyBjb250ZW50KQotCi0gICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLQotICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcg
dXJsKQotICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlm
aWNhdGVJbmZvKQotCi0gICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdo
dFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmll
dy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTgzOTFjNDIwYy4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLXN0cnVjdCBIaWdobGlnaHQ7Ci19Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JI
aWdobGlnaHRWaWV3IDogVUlWaWV3IHsKLSAgICBOU011dGFibGVBcnJheSAqX2xheWVyczsgLy8g
Q0FTaGFwZUxheWVycy4KLX0KLS0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGln
aHQmKWhpZ2hsaWdodDsKLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA2NWYwYzAzZTMzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KKysrIC9kZXYvbnVsbApAQCAtMSwy
ODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJ
bnNwZWN0b3JIaWdobGlnaHRWaWV3LmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0j
aW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0
aWxpdGllcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JPdmVybGF5Lmg+Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcKLQotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhGcmFtZTpmcmFtZV0pKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIF9sYXllcnMgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107Ci0gICAgW19sYXll
cnMgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKV9yZW1vdmVB
bGxMYXllcnMKLXsKLSAgICBmb3IgKENBU2hhcGVMYXllciAqbGF5ZXIgaW4gX2xheWVycykKLSAg
ICAgICAgW2xheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbX2xheWVycyByZW1vdmVB
bGxPYmplY3RzXTsKLX0KLQotLSAodm9pZClfY3JlYXRlTGF5ZXJzOihOU1VJbnRlZ2VyKW51bUxh
eWVycwotewotICAgIGlmIChbX2xheWVycyBjb3VudF0gPT0gbnVtTGF5ZXJzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLQotICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7Ci0gICAgICAgIENBU2hhcGVMYXllciAq
bGF5ZXIgPSBbW0NBU2hhcGVMYXllciBhbGxvY10gaW5pdF07Ci0gICAgICAgIFtfbGF5ZXJzIGFk
ZE9iamVjdDpsYXllcl07Ci0gICAgICAgIFtzZWxmLmxheWVyIGFkZFN1YmxheWVyOmxheWVyXTsK
LSAgICAgICAgW2xheWVyIHJlbGVhc2VdOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZmluZElu
dGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
cDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHAyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBkMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgZDIsIFdlYkNvcmU6OkZsb2F0UG9p
bnQmIGludGVyc2VjdGlvbikgCi17Ci0gICAgLy8gRG8gdGhlIGxpbmVzIGludGVyc2VjdD8KLSAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50OwotICAgIGlm
ICghZmluZEludGVyc2VjdGlvbihwMSwgcDIsIGQxLCBkMiwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9u
UG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJcyB0aGUgaW50ZXJzZWN0
aW9uIGJldHdlZW4gdGhlIHR3byBwb2ludHMgb24gdGhlIGxpbmU/Ci0gICAgaWYgKHAxLngoKSA+
PSBwMi54KCkpIHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+
IHAxLngoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPCBwMi54KCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHRlbXBvcmFy
eUludGVyc2VjdGlvblBvaW50LngoKSA+IHAyLngoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Q
b2ludC54KCkgPCBwMS54KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGlmIChwMS55KCkgPj0gcDIueSgpKSB7Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rp
b25Qb2ludC55KCkgPiBwMS55KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwg
cDIueSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPiBwMi55KCkgfHwgdGVtcG9yYXJ5
SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwgcDEueSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGludGVyc2VjdGlvbiA9IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50
OwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGlzIHF1YWQgaW50ZXJzZWN0aW9uIHdvcmtz
IGJlY2F1c2UgdGhlIHR3byBxdWFkcyBhcmUga25vd24gdG8gYmUgYXQgdGhlIHNhbWUKLS8vIHJv
dGF0aW9uIGFuZCBjbG9ja3dpc2UtbmVzcy4KLXN0YXRpYyBXZWJDb3JlOjpGbG9hdFF1YWQgcXVh
ZEludGVyc2VjdGlvbihXZWJDb3JlOjpGbG9hdFF1YWQgYm91bmRzLCBXZWJDb3JlOjpGbG9hdFF1
YWQgdG9DbGFtcCkKLXsKLSAgICAvLyBSZXN1bHRpbmcgcG9pbnRzLgotICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgcDEsIHAyLCBwMywgcDQ7Ci0gICAgYm9vbCBjb250YWluc1BvaW50MSA9IGZhbHNl
OwotICAgIGJvb2wgY29udGFpbnNQb2ludDIgPSBmYWxzZTsKLSAgICBib29sIGNvbnRhaW5zUG9p
bnQzID0gZmFsc2U7Ci0gICAgYm9vbCBjb250YWluc1BvaW50NCA9IGZhbHNlOwotICAgIGJvb2wg
aW50ZXJzZWN0Rm9yUG9pbnQxID0gZmFsc2U7Ci0gICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDIg
PSBmYWxzZTsKLSAgICBib29sIGludGVyc2VjdEZvclBvaW50MyA9IGZhbHNlOwotICAgIGJvb2wg
aW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmFsc2U7Ci0KLSAgICAvLyBUb3AgLyBib3R0b20gdmVydGlj
YWwgY2xhbXBpbmcuCi0gICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDEoKSkp
IHsKLSAgICAgICAgY29udGFpbnNQb2ludDEgPSB0cnVlOwotICAgICAgICBwMSA9IHRvQ2xhbXAu
cDEoKTsKLSAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQxID0gZmluZEludGVyc2Vj
dGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wMigpLCB0b0NsYW1w
LnAxKCksIHRvQ2xhbXAucDQoKSwgcDEpKSkKLSAgICAgICAgcDEgPSB0b0NsYW1wLnAxKCk7Ci0K
LSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMigpKSkgewotICAgICAgICBj
b250YWluc1BvaW50MiA9IHRydWU7Ci0gICAgICAgIHAyID0gdG9DbGFtcC5wMigpOwotICAgIH0g
ZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDIgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0
d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRvQ2xhbXAucDIoKSwgdG9DbGFt
cC5wMygpLCBwMikpKQotICAgICAgICBwMiA9IHRvQ2xhbXAucDIoKTsKLQotICAgIGlmIChib3Vu
ZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAzKCkpKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQz
ID0gdHJ1ZTsKLSAgICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7Ci0gICAgfSBlbHNlIGlmICghKGlu
dGVyc2VjdEZvclBvaW50MyA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJv
dW5kcy5wNCgpLCBib3VuZHMucDMoKSwgdG9DbGFtcC5wMigpLCB0b0NsYW1wLnAzKCksIHAzKSkp
Ci0gICAgICAgIHAzID0gdG9DbGFtcC5wMygpOwotCi0gICAgaWYgKGJvdW5kcy5jb250YWluc1Bv
aW50KHRvQ2xhbXAucDQoKSkpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOwotICAg
ICAgICBwNCA9IHRvQ2xhbXAucDQoKTsKLSAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9p
bnQ0ID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnA0KCksIGJv
dW5kcy5wMygpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAucDQoKSwgcDQpKSkKLSAgICAgICAgcDQg
PSB0b0NsYW1wLnA0KCk7Ci0KLSAgICAvLyBJZiBvbmx5IG9uZSBvZiB0aGUgcG9pbnRzIGludGVy
c2VjdGVkIG9uIGVpdGhlciB0aGUgdG9wIG9yIGJvdHRvbSBsaW5lIHRoZW4gd2UKLSAgICAvLyBj
YW4gY2xhbXAgdGhlIG90aGVyIHBvaW50IG9uIHRoYXQgbGluZSB0byB0aGUgY29ybmVyIG9mIHRo
ZSBib3VuZHMuCi0gICAgaWYgKCFjb250YWluc1BvaW50MSAmJiBpbnRlcnNlY3RGb3JQb2ludDIg
JiYgIWludGVyc2VjdEZvclBvaW50MSkgewotICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7
Ci0gICAgICAgIHAxID0gYm91bmRzLnAxKCk7Ci0gICAgfSBlbHNlIGlmICghY29udGFpbnNQb2lu
dDIgJiYgaW50ZXJzZWN0Rm9yUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2ludDIpIHsKLSAgICAg
ICAgY29udGFpbnNQb2ludDIgPSB0cnVlOwotICAgICAgICBwMiA9IGJvdW5kcy5wMigpOwotICAg
IH0KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQ0ICYmIGludGVyc2VjdEZvclBvaW50MyAmJiAhaW50
ZXJzZWN0Rm9yUG9pbnQ0KSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQ0ID0gdHJ1ZTsKLSAgICAg
ICAgcDQgPSBib3VuZHMucDQoKTsKLSAgICB9IGVsc2UgaWYgKCFjb250YWluc1BvaW50MyAmJiBp
bnRlcnNlY3RGb3JQb2ludDQgJiYgIWludGVyc2VjdEZvclBvaW50MykgewotICAgICAgICBjb250
YWluc1BvaW50MyA9IHRydWU7Ci0gICAgICAgIHAzID0gYm91bmRzLnAzKCk7Ci0gICAgfQotCi0g
ICAgLy8gTm93IHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGhvcml6b250YWwgY2xhbXBpbmcgZm9y
IHVuYWRqdXN0ZWQgcG9pbnRzLgotICAgIGlmICghY29udGFpbnNQb2ludDIgJiYgIWludGVyc2Vj
dEZvclBvaW50MikKLSAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMo
Ym91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwMSwgcDIsIHAyKTsKLSAgICBpZiAoIWNvbnRhaW5z
UG9pbnQzICYmICFpbnRlcnNlY3RGb3JQb2ludDMpCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb25P
bkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMigpLCBib3VuZHMucDMoKSwgcDQsIHAzLCBwMyk7
Ci0gICAgaWYgKCFjb250YWluc1BvaW50MSAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKQotICAgICAg
ICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRz
LnA0KCksIHAxLCBwMiwgcDEpOwotICAgIGlmICghY29udGFpbnNQb2ludDQgJiYgIWludGVyc2Vj
dEZvclBvaW50NCkKLSAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMo
Ym91bmRzLnAxKCksIGJvdW5kcy5wNCgpLCBwNCwgcDMsIHA0KTsKLQotICAgIHJldHVybiBXZWJD
b3JlOjpGbG9hdFF1YWQocDEsIHAyLCBwMywgcDQpOwotfQotCi1zdGF0aWMgdm9pZCBsYXllclBh
dGhXaXRoSG9sZShDQVNoYXBlTGF5ZXIgKmxheWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQm
IG91dGVyUXVhZCwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBob2xlUXVhZCkKLXsKLSAgICAv
LyBOb3RoaW5nIHRvIHNob3cuCi0gICAgaWYgKG91dGVyUXVhZCA9PSBob2xlUXVhZCB8fCBob2xl
UXVhZC5jb250YWluc1F1YWQob3V0ZXJRdWFkKSkgewotICAgICAgICBsYXllci5wYXRoID0gTlVM
TDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlzIGEgbmVnYXRp
dmUgbWFyZ2luIC8gcGFkZGluZyB0aGVuIHRoZSBvdXRlciBib3ggbWlnaHQgbm90Ci0gICAgLy8g
ZnVsbHkgY29udGFpbiB0aGUgaG9sZSBib3guIEluIHN1Y2ggY2FzZXMgd2UgcmVjYWxjdWxhdGUg
dGhlIGhvbGUgdG8KLSAgICAvLyBiZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gcXVhZHMu
Ci0gICAgV2ViQ29yZTo6RmxvYXRRdWFkIGlubmVySG9sZTsKLSAgICBpZiAob3V0ZXJRdWFkLmNv
bnRhaW5zUXVhZChob2xlUXVhZCkpCi0gICAgICAgIGlubmVySG9sZSA9IGhvbGVRdWFkOwotICAg
IGVsc2UKLSAgICAgICAgaW5uZXJIb2xlID0gcXVhZEludGVyc2VjdGlvbihvdXRlclF1YWQsIGhv
bGVRdWFkKTsKLQotICAgIC8vIENsb2Nrd2lzZSBpbnNpZGUgcmVjdCAoaG9sZSksIENvdW50ZXIt
Q2xvY2t3aXNlIG91dHNpZGUgcmVjdCAoZmlsbCkuCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRo
ID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAs
IGlubmVySG9sZS5wMSgpLngoKSwgaW5uZXJIb2xlLnAxKCkueSgpKTsKLSAgICBDR1BhdGhBZGRM
aW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDIoKS54KCksIGlubmVySG9sZS5wMigpLnko
KSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAzKCkueCgp
LCBpbm5lckhvbGUucDMoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAs
IGlubmVySG9sZS5wNCgpLngoKSwgaW5uZXJIb2xlLnA0KCkueSgpKTsKLSAgICBDR1BhdGhNb3Zl
VG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDEoKS54KCksIG91dGVyUXVhZC5wMSgpLnkoKSk7
Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnA0KCkueCgpLCBv
dXRlclF1YWQucDQoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91
dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5l
VG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91dGVyUXVhZC5wMigpLnkoKSk7
Ci0gICAgbGF5ZXIucGF0aCA9IHBhdGg7Ci0gICAgQ0dQYXRoUmVsZWFzZShwYXRoKTsKLX0KLQot
c3RhdGljIHZvaWQgbGF5ZXJQYXRoKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UXVhZCYgb3V0ZXJRdWFkKQotewotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENH
UGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRl
clF1YWQucDEoKS54KCksIG91dGVyUXVhZC5wMSgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRv
UG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOwot
ICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0
ZXJRdWFkLnAzKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRl
clF1YWQucDIoKS54KCksIG91dGVyUXVhZC5wMigpLnkoKSk7Ci0gICAgbGF5ZXIucGF0aCA9IHBh
dGg7Ci0gICAgQ0dQYXRoUmVsZWFzZShwYXRoKTsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9yTm9k
ZUhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQgb2Zmc2V0Oih1
bnNpZ25lZClvZmZzZXQKLXsKLSAgICBBU1NFUlQoW19sYXllcnMgY291bnRdID49IG9mZnNldCAr
IDQpOwotICAgIEFTU0VSVChoaWdobGlnaHQucXVhZHMuc2l6ZSgpID49IG9mZnNldCArIDQpOwot
ICAgIGlmIChbX2xheWVycyBjb3VudF0gPCBvZmZzZXQgKyA0IHx8IGhpZ2hsaWdodC5xdWFkcy5z
aXplKCkgPCBvZmZzZXQgKyA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDQVNoYXBlTGF5ZXIg
Km1hcmdpbkxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXRdOwotICAgIENBU2hh
cGVMYXllciAqYm9yZGVyTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDFd
OwotICAgIENBU2hhcGVMYXllciAqcGFkZGluZ0xheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRl
eDpvZmZzZXQgKyAyXTsKLSAgICBDQVNoYXBlTGF5ZXIgKmNvbnRlbnRMYXllciA9IFtfbGF5ZXJz
IG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgM107Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFy
Z2luUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXRdOwotICAgIFdlYkNvcmU6OkZsb2F0UXVh
ZCBib3JkZXJRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDFdOwotICAgIFdlYkNvcmU6
OkZsb2F0UXVhZCBwYWRkaW5nUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAyXTsKLSAg
ICBXZWJDb3JlOjpGbG9hdFF1YWQgY29udGVudFF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0
ICsgM107Ci0KLSAgICBtYXJnaW5MYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hs
aWdodC5tYXJnaW5Db2xvcik7Ci0gICAgYm9yZGVyTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dD
b2xvcihoaWdobGlnaHQuYm9yZGVyQ29sb3IpOwotICAgIHBhZGRpbmdMYXllci5maWxsQ29sb3Ig
PSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5wYWRkaW5nQ29sb3IpOwotICAgIGNvbnRlbnRMYXll
ci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOwotCi0g
ICAgbGF5ZXJQYXRoV2l0aEhvbGUobWFyZ2luTGF5ZXIsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQp
OwotICAgIGxheWVyUGF0aFdpdGhIb2xlKGJvcmRlckxheWVyLCBib3JkZXJRdWFkLCBwYWRkaW5n
UXVhZCk7Ci0gICAgbGF5ZXJQYXRoV2l0aEhvbGUocGFkZGluZ0xheWVyLCBwYWRkaW5nUXVhZCwg
Y29udGVudFF1YWQpOwotICAgIGxheWVyUGF0aChjb250ZW50TGF5ZXIsIGNvbnRlbnRRdWFkKTsK
LX0KLQotLSAodm9pZClfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6
OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Ci17Ci0gICAgaWYgKCFoaWdobGlnaHQucXVhZHMuc2l6ZSgp
KSB7Ci0gICAgICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgbm9kZUNvdW50ID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSAv
IDQ7Ci0gICAgW3NlbGYgX2NyZWF0ZUxheWVyczpub2RlQ291bnQgKiA0XTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkKLSAgICAgICAgW3NlbGYgX2xheW91
dEZvck5vZGVIaWdobGlnaHQ6aGlnaGxpZ2h0IG9mZnNldDppICogNF07Ci19Ci0KLS0gKHZvaWQp
X2xheW91dEZvclJlY3RzSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hs
aWdodAotewotICAgIE5TVUludGVnZXIgbnVtTGF5ZXJzID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUo
KTsKLSAgICBpZiAoIW51bUxheWVycykgewotICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJz
XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bnVt
TGF5ZXJzXTsKLQotICAgIENHQ29sb3JSZWYgY29udGVudENvbG9yID0gY2FjaGVkQ0dDb2xvciho
aWdobGlnaHQuY29udGVudENvbG9yKTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBu
dW1MYXllcnM7ICsraSkgewotICAgICAgICBDQVNoYXBlTGF5ZXIgKmxheWVyID0gW19sYXllcnMg
b2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgbGF5ZXIuZmlsbENvbG9yID0gY29udGVudENvbG9y
OwotICAgICAgICBsYXllclBhdGgobGF5ZXIsIGhpZ2hsaWdodC5xdWFkc1tpXSk7Ci0gICAgfQot
fQotCi0tICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQK
LXsKLSAgICBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6Tm9k
ZSB8fCBoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpOb2RlTGlzdCkK
LSAgICAgICAgW3NlbGYgX2xheW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0OmhpZ2hsaWdodF07Ci0g
ICAgZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6UmVj
dHMpCi0gICAgICAgIFtzZWxmIF9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDpoaWdobGlnaHRdOwot
fQotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Q3MDVlODNlNy4u
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJv
eHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUg
IkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIkFQSVVJQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiV2ViQXV0b21hdGlvblNlc3Npb24uaCIKLSNpbmNsdWRlICJXZWJGcmFtZVBy
b3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRFbmNvZGlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQot
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY29uc3QgdW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dXaWR0aCA9IDUwMDsKLWNvbnN0IHVuc2lnbmVk
IFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93SGVpZ2h0ID0gNDAwOwotCi1jb25zdCB1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoID0gMTAwMDsKLWNv
bnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0ID0gNjUw
OwotCi1XZWJJbnNwZWN0b3JQcm94eTo6V2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5KiBp
bnNwZWN0ZWRQYWdlKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICA6IG1fY2xvc2VGcm9udGVuZEFm
dGVySW5hY3Rpdml0eVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYkluc3BlY3RvclBy
b3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCkKLSNlbmRpZgotewot
ICAgIGlmIChpbnNwZWN0ZWRQYWdlICYmIGluc3BlY3RlZFBhZ2UtPmhhc1J1bm5pbmdQcm9jZXNz
KCkpIHsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKLSAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2Ut
PndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3JQcm94eTo6fldl
Ykluc3BlY3RvclByb3h5KCkKLXsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3Rpb25MZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGluc3BlY3RvckxldmVsRm9yUGFn
ZShpbnNwZWN0ZWRQYWdlKCkpOwotfQotCi1XZWJQcmVmZXJlbmNlcyYgV2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faW5z
cGVjdG9yUGFnZSk7Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yUGFnZS0+cGFnZUdyb3VwKCkucHJl
ZmVyZW5jZXMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCi17
Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9j
ZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKLQot
ICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgcGxhdGZvcm1JbnZhbGlkYXRl
KCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRv
RnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi0vLyBQdWJsaWMgQVBJcwotYm9vbCBXZWJJbnNwZWN0
b3JQcm94eTo6aXNGcm9udCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUlzRnJvbnQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nob3dNZXNzYWdlU2VudCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zaG93TWVzc2FnZVNlbnQgPSB0cnVlOwotICAgIG1faWdub3Jl
Rmlyc3RCcmluZ1RvRnJvbnQgPSB0cnVlOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0K
LSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXI6Ok5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCksIDApOwotICAgIG1faW5zcGVj
dGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93KCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzaG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgYnJp
bmdUb0Zyb250KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0KCk7Ci0K
LSAgICAvLyBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGJyaW5nVG9Gcm9udCBzbyBpdCBvcGVucyB0
aGUgSW5zcGVjdG9yLgotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aGlkZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNWaXNpYmxlID0gZmFsc2U7Ci0KLSAg
ICBwbGF0Zm9ybUhpZGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2UoKQot
ewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lu
c3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6Q2xvc2UoKSk7Ci0KLSAg
ICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpjbG9zZUZvckNyYXNoKCkKLXsKLSAgICBjbG9zZSgpOwotCi0gICAgcGxhdGZvcm1EaWRD
bG9zZUZvckNyYXNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlb3BlbigpCi17
Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsb3Nl
KCk7Ci0gICAgc2hvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNldFN0YXRl
KCkKLXsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JBdHRh
Y2hlZEhlaWdodCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3Bl
Y3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxl
dGVJbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpLmRlbGV0ZUluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7Ci0gICAgaW5zcGVjdG9yUGFnZVBy
ZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLQotICAgIHBsYXRmb3Jt
UmVzZXRTdGF0ZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNldCgpCi17Ci0g
ICAgaWYgKG1faW5zcGVjdGVkUGFnZSkgewotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nl
c3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwotICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5KiBpbnNwZWN0
ZWRQYWdlKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NFUlQoaW5z
cGVjdGVkUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOwotICAg
IG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdl
LT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6VXBkYXRl
Q29ubmVjdGlvbigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RnJvbnRlbmRD
b25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBp
ZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0ZWRQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihj
b25uZWN0aW9uSWRlbnRpZmllcikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93
Q29uc29sZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCkpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzaG93UmVzb3VyY2VzKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0KLSAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291cmNl
cygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZy
YW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNl
Rm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjphdHRhY2hCb3R0b20oKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6Qm90dG9tKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoUmlnaHQoKQotewotICAgIGF0dGFj
aChBdHRhY2htZW50U2lkZTo6UmlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojph
dHRhY2hMZWZ0KCkKLXsKLSAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OkxlZnQpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2goQXR0YWNobWVudFNpZGUgc2lkZSkKLXsKLSAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhY2FuQXR0YWNoKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faXNBdHRhY2hlZCA9IHRydWU7Ci0gICAgbV9hdHRhY2htZW50U2lkZSA9IHNpZGU7
Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2htZW50
U2lkZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkpOwotCi0gICAgaWYgKG1faXNWaXNpYmxl
KQotICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNB
dHRhY2hlZCh0cnVlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVu
dFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkQm90dG9t
KCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0Ogot
ICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpB
dHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cGxhdGZvcm1BdHRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkK
LXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9p
c0F0dGFjaGVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAgIGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsK
LQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRB
dHRhY2hlZChmYWxzZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOwotCi0gICAgcGxhdGZvcm1EZXRhY2goKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0KGhlaWdodCk7Ci0gICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dChoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hlZFdpbmRv
d1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygp
LnNldEluc3BlY3RvckF0dGFjaGVkV2lkdGgod2lkdGgpOwotICAgIHBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldFNo
ZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRTaGVldFJl
Y3QocmVjdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJhZygp
Ci17Ci0gICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzUHJvZmlsaW5nUGFnZSkKLSAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BQYWdl
UHJvZmlsaW5nKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0UGFnZVByb2ZpbGluZygpKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2VsZW1lbnRTZWxl
Y3Rpb25BY3RpdmUpIHsKLSAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlID0g
dHJ1ZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbm5l
Y3QoKTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViSW5zcGVj
dG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UoY29uc3QgVVJMJiB1cmwpCi17Ci0g
ICAgLy8gVXNlIFVSTCBzbyB3ZSBjYW4gY29tcGFyZSB0aGUgcGF0aHMgYW5kIHByb3RvY29scy4K
LSAgICBVUkwgbWFpblBhZ2VVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQ
YWdlVVJMKCkpOwotICAgIGlmICh1cmwucHJvdG9jb2woKSA9PSBtYWluUGFnZVVSTC5wcm90b2Nv
bCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXMobWFpblBhZ2VVUkwucGF0aCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QgVVJMIGluIFByb2R1Y3Rpb24gYnVp
bGRzLgotICAgIFN0cmluZyB0ZXN0UGFnZVVSTFN0cmluZyA9IFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIGlmICh0ZXN0UGFnZVVSTFN0cmluZy5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVVJMIHRlc3RQYWdlVVJMKFVSTCgpLCB0
ZXN0UGFnZVVSTFN0cmluZyk7Ci0gICAgcmV0dXJuIHVybC5wcm90b2NvbCgpID09IHRlc3RQYWdl
VVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0ZXN0UGFnZVVSTC5wYXRoKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIGlmIChtX2lu
c3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IHBs
YXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7
Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYWNr
SW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBt
X2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+
aWRlbnRpZmllcigpLCAqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNz
dW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6b3Bl
bkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQot
ewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuaGFzTG9jYWxGcm9udGVuZCgp
KSB7Ci0gICAgICAgIHNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdW5k
ZXJUZXN0ID0gdW5kZXJUZXN0OwotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgQVNT
RVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OkVzdGFibGlzaENvbm5lY3Rpb24obV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCks
IGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZlbCgp
KSk7Ci0KLSAgICBBU1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7Ci0gICAgbV9pc0FjdGl2ZUZy
b250ZW5kID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5jb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotCi0gICAgaWYgKCFtX3VuZGVyVGVzdCkgewotICAg
ICAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCk7Ci0gICAgICAg
IG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwotICAgICAgICBtX2F0dGFjaG1l
bnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwotCi0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZChtX2lzQXR0YWNo
ZWQpKTsKLQotICAgICAgICBpZiAobV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJv
dHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAgICAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNo
ZWRSaWdodCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQo
KSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwotICAgIH0KLQotICAg
IC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNwZWN0b3IgYXR0YWNoZXMg
c28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8gdGhlIF9XS0luc3BlY3Rv
ciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnVpQ2xpZW50KCku
ZGlkQXR0YWNoSW5zcGVjdG9yKCptX2luc3BlY3RlZFBhZ2UsICp0aGlzKTsKLQotICAgIC8vIEJh
aWwgb3V0IGlmIHRoZSBjbGllbnQgY2xvc2VkIHRoZSBpbnNwZWN0b3IgZnJvbSB0aGUgZGVsZWdh
dGUgbWV0aG9kLgotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgbV91bmRlclRlc3Qg
PyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKSA6IFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6b3BlbigpCi17Ci0gICAgaWYgKG1fdW5kZXJUZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2V0Rm9yU2Nv
cGU8Ym9vbD4gaXNPcGVuaW5nKG1faXNPcGVuaW5nLCB0cnVlKTsKLSAgICBtX2lzVmlzaWJsZSA9
IHRydWU7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkKQot
ICAgICAgICBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIGVsc2UKLSAgICAgICAgcGxhdGZvcm1DcmVh
dGVGcm9udGVuZFdpbmRvdygpOwotCi0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQ2xvc2UoKQotewotICAgIGNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRl
bmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLSAgICBtX2lzUHJvZmlsaW5nUGFn
ZSA9IGZhbHNlOwotICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gZmFsc2U7Ci0gICAgbV9pZ25vcmVG
aXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotCi0gICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9p
bnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOwotICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlm
aWVyKCkpOwotCi0gICAgaWYgKG1faXNBY3RpdmVGcm9udGVuZCkgewotICAgICAgICBtX2lzQWN0
aXZlRnJvbnRlbmQgPSBmYWxzZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotCi0gICAgLy8gTnVsbCBv
dXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVyIHBsYXRmb3JtRGV0YWNoKCksIHNvIHRoZSB2aWV3cyBj
YW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0bHkuCi0gICAgbV9pbnNwZWN0b3JQYWdlID0gbnVsbHB0
cjsKLQotICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fY2FuQXR0YWNoID0gZmFsc2U7
Ci0gICAgbV91bmRlclRlc3QgPSBmYWxzZTsKLQotICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBh
Z2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VU
b0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIGF1dG9tYXRpb25T
ZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0
aW9uU2Vzc2lvbigpKQotICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+aW5zcGVjdG9yRnJvbnRl
bmRMb2FkZWQoKm1faW5zcGVjdGVkUGFnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbCB0ZWxscyB1cyB0byBkbyB0aGlzIG9uIGxvYWQuIFdlIHdhbnQgdG8KLSAgICAvLyBp
Z25vcmUgaXQgb25jZSBpZiB3ZSBvbmx5IHdhbnRlZCB0byBjb25uZWN0LiBUaGlzIGFsbG93cyB0
aGUgSW5zcGVjdG9yIHRvIGxhdGVyCi0gICAgLy8gcmVxdWVzdCB0byBiZSBicm91Z2h0IHRvIHRo
ZSBmcm9udCB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQgb3Igc29tZSBvdGhlciBhY3Rpb24uCi0g
ICAgaWYgKG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQpIHsKLSAgICAgICAgbV9pZ25vcmVGaXJz
dEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KG1faXNWaXNpYmxlKQotICAgICAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAgIGVsc2UK
LSAgICAgICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpicmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoQXZhaWxhYmlsaXR5Q2hh
bmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBib29sIHByZXZpb3VzQ2FuQXR0YWNoID0gbV9j
YW5BdHRhY2g7Ci0KLSAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGF2YWlsYWJs
ZSk7Ci0KLSAgICBpZiAocHJldmlvdXNDYW5BdHRhY2ggPT0gbV9jYW5BdHRhY2gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2luc3BlY3RvclBhZ2UgJiYgIW1fdW5kZXJUZXN0KQotICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRE
b2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0KLSAgICBwbGF0Zm9ybUF0dGFjaEF2
YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAg
IHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJ
bmZvKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZWxlbWVudFNlbGVjdGlvbkNoYW5n
ZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlID0gYWN0aXZl
OwotCi0gICAgaWYgKG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSkgewotICAgICAgICBt
X2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2lz
VmlzaWJsZSkKLSAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoYWN0aXZlKQotICAgICAgICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKTsKLSAgICBlbHNlIGlmIChpc0Nvbm5lY3RlZCgpKQotICAgICAgICBicmluZ1RvRnJvbnQo
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2Vk
KGJvb2wgYWN0aXZlKQotewotICAgIG1faXNQcm9maWxpbmdQYWdlID0gYWN0aXZlOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLXsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
ICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3Bl
Y3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxh
YmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJ
RCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGF2YWlsYWJsZSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykK
LXsKLSAgICBwbGF0Zm9ybVNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZv
cmNlU2F2ZUFzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBwbGF0Zm9ybUFw
cGVuZChmaWxlbmFtZSwgY29udGVudCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnNo
b3VsZE9wZW5BdHRhY2hlZCgpCi17Ci0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkgJiYgY2FuQXR0YWNoKCk7Ci19Ci0KLS8vIFVu
c3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGNhbiB1c2UgdGhlIHN0dWJzIHByb3ZpZGVkIGhlcmUu
Ci0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lO
KQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250
ZW5kUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRv
dygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZv
ckNyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1C
cmluZ1RvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1I
aWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBD
ZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
RGlhbG9nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdW5zaWduZWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1BdHRhY2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0
cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvckJhc2VVUkwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9G
b3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNo
QXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0o
V0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjFmZGZj
YTFkZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiRGVidWdn
YWJsZUluZm9EYXRhLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSAi
V2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJX
S0dlb21ldHJ5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KLQotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNfQ0xBU1MgTlNWaWV3OwotT0JKQ19D
TEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
OwotT0JKQ19DTEFTUyBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyOwotI2VsaWYgUExBVEZPUk0o
V0lOKQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBXZWJGcmFtZVByb3h5OwotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQ7Ci1jbGFzcyBX
ZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcmVmZXJlbmNlczsKLQotZW51bSBjbGFzcyBBdHRhY2ht
ZW50U2lkZSB7Ci0gICAgQm90dG9tLAotICAgIFJpZ2h0LAotICAgIExlZnQsCi19OwotCi1jbGFz
cyBXZWJJbnNwZWN0b3JQcm94eQotICAgIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9i
amVjdDo6VHlwZTo6SW5zcGVjdG9yPgotICAgICwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVy
Ci0gICAgLCBwdWJsaWMgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwKLSNpZiBQTEFURk9STShX
SU4pCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCi0jZW5kaWYK
LXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoV2Vi
UGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViSW5zcGVjdG9yUHJveHkoaW5zcGVjdGVkUGFnZSkpOwotICAgIH0KLQotICAgIH5X
ZWJJbnNwZWN0b3JQcm94eSgpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBQ
dWJsaWMgQVBJcwotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zcGVjdGVkUGFnZTsgfQotICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yUGFnZTsgfQotCi0gICAgYm9vbCBpc0Nvbm5lY3Rl
ZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JQYWdlOyB9Ci0gICAgYm9vbCBpc1Zpc2li
bGUoKSBjb25zdCB7IHJldHVybiBtX2lzVmlzaWJsZTsgfQotICAgIGJvb2wgaXNGcm9udCgpOwot
Ci0gICAgdm9pZCBjb25uZWN0KCk7Ci0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIGhpZGUo
KTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdm9pZCBjbG9zZUZvckNyYXNoKCk7Ci0gICAgdm9p
ZCByZW9wZW4oKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLQotICAgIHZvaWQgcmVzZXQoKTsK
LSAgICB2b2lkIHVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSopOwotCi0jaWYg
UExBVEZPUk0oTUFDKQotICAgIGVudW0gY2xhc3MgSW5zcGVjdGlvblRhcmdldFR5cGUgeyBMb2Nh
bCwgUmVtb3RlIH07Ci0gICAgc3RhdGljIFJldGFpblB0cjxOU1dpbmRvdz4gY3JlYXRlRnJvbnRl
bmRXaW5kb3coTlNSZWN0IHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlKTsK
LQotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKLSAgICB2b2lk
IGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zsb2F0ID0gMCk7Ci0gICAgdm9pZCB3aW5k
b3dGcmFtZURpZENoYW5nZSgpOwotICAgIHZvaWQgd2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgp
OwotICAgIE5TV2luZG93KiBpbnNwZWN0b3JXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvcldpbmRvdy5nZXQoKTsgfQotCi0gICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZSgpOwotICAg
IHZvaWQgY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKTsKLQotICAgIHZv
aWQgYXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1Zp
ZXcpOwotICAgIHZvaWQgYXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xk
V2luZG93KTsKLSAgICB2b2lkIGF0dGFjaG1lbnREaWRNb3ZlVG9XaW5kb3coTlNXaW5kb3cgKm5l
d1dpbmRvdyk7Ci0KLSAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNoZWV0UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hlZXRSZWN0OyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykK
LSAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZpZXcoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3Rv
clZpZXc7IH07Ci0gICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3Rv
clByb3h5Q2xpZW50PiYmKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzaG93Q29uc29sZSgpOwotICAg
IHZvaWQgc2hvd1Jlc291cmNlcygpOwotICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1l
KFdlYkZyYW1lUHJveHkqKTsKLQotICAgIEF0dGFjaG1lbnRTaWRlIGF0dGFjaG1lbnRTaWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRhY2htZW50U2lkZTsgfQotICAgIGJvb2wgaXNBdHRhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNBdHRhY2hlZDsgfQotICAgIHZvaWQgYXR0YWNoUmlnaHQoKTsK
LSAgICB2b2lkIGF0dGFjaExlZnQoKTsKLSAgICB2b2lkIGF0dGFjaEJvdHRvbSgpOwotICAgIHZv
aWQgYXR0YWNoKEF0dGFjaG1lbnRTaWRlID0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7Ci0gICAg
dm9pZCBkZXRhY2goKTsKLQotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQpOwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7Ci0KLSAgICB2
b2lkIHNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQg
c3RhcnRXaW5kb3dEcmFnKCk7Ci0KLSAgICBib29sIGlzUHJvZmlsaW5nUGFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNQcm9maWxpbmdQYWdlOyB9Ci0gICAgdm9pZCB0b2dnbGVQYWdlUHJvZmlsaW5n
KCk7Ci0KLSAgICBib29sIGlzRWxlbWVudFNlbGVjdGlvbkFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZTsgfQotICAgIHZvaWQgdG9nZ2xlRWxlbWVudFNlbGVj
dGlvbigpOwotCi0gICAgYm9vbCBpc1VuZGVyVGVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJU
ZXN0OyB9Ci0KLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwot
Ci0gICAgLy8gUHJvdmlkZWQgYnkgcGxhdGZvcm0gV2ViSW5zcGVjdG9yUHJveHkgaW1wbGVtZW50
YXRpb25zLgotICAgIHN0YXRpYyBTdHJpbmcgaW5zcGVjdG9yUGFnZVVSTCgpOwotICAgIHN0YXRp
YyBTdHJpbmcgaW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKLSAgICBzdGF0aWMgU3RyaW5nIGluc3Bl
Y3RvckJhc2VVUkwoKTsKLSAgICBzdGF0aWMgYm9vbCBpc01haW5PclRlc3RJbnNwZWN0b3JQYWdl
KGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBEZWJ1Z2dhYmxlSW5mb0RhdGEgaW5mb0ZvckxvY2Fs
RGVidWdnYWJsZSgpOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dX
aWR0aDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVdpbmRvd0hlaWdodDsKLQot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93V2lkdGg7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGluaXRpYWxXaW5kb3dIZWlnaHQ7Ci0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgV2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVByb3h5Kik7Ci0KLSAgICB2b2lkIGNyZWF0
ZUZyb250ZW5kUGFnZSgpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
LQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLSAgICBDb25uZWN0aW9uVHlwZSBjb25u
ZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbm5lY3Rpb25UeXBlOjpMb2Nh
bDsgfQotCi0gICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOwot
ICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotICAgIHZvaWQgcGxhdGZv
cm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotCi0gICAgdm9pZCBwbGF0Zm9ybURpZENs
b3NlRm9yQ3Jhc2goKTsKLSAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwotICAgIHZvaWQg
cGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwot
ICAgIHZvaWQgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybUhpZGUoKTsKLSAgICBib29sIHBsYXRmb3JtSXNGcm9udCgpOwotICAgIHZvaWQgcGxh
dGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgcGxhdGZvcm1J
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0gICAgdW5zaWdu
ZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKTsKLSAgICB1bnNpZ25lZCBwbGF0Zm9y
bUluc3BlY3RlZFdpbmRvd1dpZHRoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUF0dGFjaCgpOwotICAg
IHZvaWQgcGxhdGZvcm1EZXRhY2goKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQpOwotICAgIHZvaWQgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dp
ZHRoKHVuc2lnbmVkKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLSAg
ICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2go
Ym9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKTsKLSNlbHNlCi0gICAgYm9vbCBwbGF0Zm9ybUNhbkF0
dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpIHsgcmV0dXJuIHdlYlByb2Nlc3NDYW5BdHRh
Y2g7IH0KLSNlbmRpZgotCi0gICAgLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvclByb3h5IG1lc3Nh
Z2VzCi0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwg
Ym9vbCB1bmRlclRlc3QpOwotICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0
YWNobWVudCk7Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYp
OwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLSAgICB2b2lkIGRpZENsb3NlKCk7Ci0gICAg
dm9pZCBicmluZ1RvRnJvbnQoKTsKLSAgICB2b2lkIGJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQo
KTsKLSAgICB2b2lkIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2hvd0NlcnRpZmlj
YXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAgIHZvaWQgZWxlbWVudFNl
bGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0
aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQpOwotCi0gICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7IHJldHVybiBtX2NhbkF0
dGFjaDsgfQotICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7Ci0KLSAgICB2b2lkIG9wZW4o
KTsKLQotICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0OwotCi0gICAgV2ViUHJl
ZmVyZW5jZXMmIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0OwotCi0jaWYgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShXUEUpCi0gICAgdm9pZCB1cGRhdGVJbnNwZWN0b3JXaW5kb3dU
aXRsZSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIExS
RVNVTFQgQ0FMTEJBQ0sgd25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0gICAg
Ym9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgdm9pZCB3aW5kb3dSZWNlaXZlZE1lc3Nh
Z2UoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBX
ZWJQYWdlUHJveHkqIG1faW5zcGVjdGVkUGFnZSB7IG51bGxwdHIgfTsKLSAgICBXZWJQYWdlUHJv
eHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKLQotICAgIGJvb2wgbV91bmRlclRlc3Qg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9p
c0F0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fY2FuQXR0YWNoIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1faXNQcm9maWxpbmdQYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvd01lc3Nh
Z2VTZW50IHsgZmFsc2UgfTsKLSAgICBib29sIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2lzT3BlbmluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzQWN0aXZlRnJvbnRlbmQgeyBm
YWxzZSB9OwotCi0gICAgQXR0YWNobWVudFNpZGUgbV9hdHRhY2htZW50U2lkZSB7QXR0YWNobWVu
dFNpZGU6OkJvdHRvbX07Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0gICAgUmV0
YWluUHRyPE5TV2luZG93PiBtX2luc3BlY3RvcldpbmRvdzsKLSAgICBSZXRhaW5QdHI8V0tXZWJJ
bnNwZWN0b3JQcm94eU9iakNBZGFwdGVyPiBtX29iakNBZGFwdGVyOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZXRhaW5QdHI8TlNVUkw+PiBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwOwotICAgIFJ1
bkxvb3A6OlRpbWVyPFdlYkluc3BlY3RvclByb3h5PiBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0
aXZpdHlUaW1lcjsKLSAgICBTdHJpbmcgbV91cmxTdHJpbmc7Ci0gICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IG1fc2hlZXRSZWN0OwotICAgIGJvb2wgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0
IHsgZmFsc2UgfTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
SW5zcGVjdG9yUHJveHlDbGllbnQ+IG1fY2xpZW50OwotICAgIEd0a1dpZGdldCogbV9pbnNwZWN0
b3JWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5kb3cgeyBu
dWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX2hlYWRlckJhciB7IG51bGxwdHIgfTsKLSAgICBT
dHJpbmcgbV9pbnNwZWN0ZWRVUkxTdHJpbmc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgSFdO
RCBtX2luc3BlY3RlZFZpZXdXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2luc3BlY3Rl
ZFZpZXdQYXJlbnRXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2luc3BlY3RvclZpZXdX
aW5kb3cgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2luc3BlY3RvckRldGFjaFdpbmRvdyB7IG51
bGxwdHIgfTsKLSAgICBSZWZQdHI8V2ViVmlldz4gbV9pbnNwZWN0b3JWaWV3OwotI2VuZGlmCi19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGViYjc3NTUzYzZiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0x
LDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yUHJveHkgewotICAgIE9wZW5Mb2NhbEluc3BlY3Rv
ckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKLSAgICBTZXRGcm9udGVu
ZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQotCi0gICAg
U2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCi0KLSAgICBGcm9udGVuZExvYWRl
ZCgpCi0gICAgRGlkQ2xvc2UoKQotICAgIEJyaW5nVG9Gcm9udCgpCi0gICAgQnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpCi0gICAgUmVvcGVuKCkKLSAgICBSZXNldFN0YXRlKCkKLQotICAgIElu
c3BlY3RlZFVSTENoYW5nZWQoU3RyaW5nIHVybFN0cmluZykKLSAgICBTaG93Q2VydGlmaWNhdGUo
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKLSAgICBFbGVtZW50U2Vs
ZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLSAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQo
Ym9vbCBhY3RpdmUpCi0gICAgU2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9w
dGlvbmFsPGJvb2w+IGVuYWJsZWQpCi0KLSAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5n
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKLSAgICBBcHBl
bmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKLQotICAgIEF0dGFjaEJvdHRvbSgp
Ci0gICAgQXR0YWNoUmlnaHQoKQotICAgIEF0dGFjaExlZnQoKQotICAgIERldGFjaCgpCi0KLSAg
ICBBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotCi0gICAgU2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotICAgIFNldEF0dGFjaGVkV2luZG93
V2lkdGgodW5zaWduZWQgd2lkdGgpCi0KLSAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QpCi0KLSAgICBTdGFydFdpbmRvd0RyYWcoKQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNmZWExNWVlNjU3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
V2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZp
Z3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi10eXBlZGVmIEhhc2hNYXA8V2ViUGFnZVByb3h5
KiwgdW5zaWduZWQ+IFBhZ2VMZXZlbE1hcDsKLQotc3RhdGljIFBhZ2VMZXZlbE1hcCYgcGFnZUxl
dmVsTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUxldmVsTWFwPiBtYXA7
Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdW5zaWduZWQgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKFdl
YlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICBpZiAocGFnZSkgewotICAgICAgICBhdXRvIGZpbmRS
ZXN1bHQgPSBwYWdlTGV2ZWxNYXAoKS5maW5kKHBhZ2UpOwotICAgICAgICBpZiAoZmluZFJlc3Vs
dCAhPSBwYWdlTGV2ZWxNYXAoKS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmaW5kUmVzdWx0
LT52YWx1ZSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLVN0cmluZyBpbnNwZWN0
b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpCi17Ci0gICAg
cmV0dXJuIG1ha2VTdHJpbmcoIl9fV2ViSW5zcGVjdG9yUGFnZUdyb3VwTGV2ZWwiLCBpbnNwZWN0
b3JMZXZlbEZvclBhZ2UocGFnZSksICJfXyIpOwotfQotCi12b2lkIHRyYWNrSW5zcGVjdG9yUGFn
ZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFn
ZSkKLXsKLSAgICBwYWdlTGV2ZWxNYXAoKS5zZXQoaW5zcGVjdG9yUGFnZSwgaW5zcGVjdG9yTGV2
ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UpKTsKLX0KLQotdm9pZCB1bnRyYWNrSW5zcGVjdG9yUGFn
ZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UpCi17Ci0gICAgcGFnZUxldmVsTWFwKCkucmVt
b3ZlKGluc3BlY3RvclBhZ2UpOwotfQotCi1zdGF0aWMgV2ViUHJvY2Vzc1Bvb2wqIHNfbWFpbklu
c3BlY3RvclByb2Nlc3NQb29sOwotc3RhdGljIFdlYlByb2Nlc3NQb29sKiBzX25lc3RlZEluc3Bl
Y3RvclByb2Nlc3NQb29sOwotCi1XZWJQcm9jZXNzUG9vbCYgaW5zcGVjdG9yUHJvY2Vzc1Bvb2wo
dW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAgIC8vIEhhdmluZyBvdXIgb3duIHByb2Nl
c3MgcG9vbCByZW1vdmVzIHVzIGZyb20gdGhlIG1haW4gcHJvY2VzcyBwb29sIGFuZAotICAgIC8v
IGd1YXJhbnRlZXMgbm8gcHJvY2VzcyBzaGFyaW5nIGZvciBvdXIgdXNlciBpbnRlcmZhY2UuCi0g
ICAgV2ViUHJvY2Vzc1Bvb2wqJiBwb29sID0gKGluc3BlY3Rpb25MZXZlbCA9PSAxKSA/IHNfbWFp
bkluc3BlY3RvclByb2Nlc3NQb29sIDogc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbDsKLSAg
ICBpZiAoIXBvb2wpIHsKLSAgICAgICAgYXV0byBjb25maWd1cmF0aW9uID0gQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICBwb29sID0gJldlYlByb2Nlc3NQ
b29sOjpjcmVhdGUoY29uZmlndXJhdGlvbi5nZXQoKSkubGVha1JlZigpOwotICAgICAgICAvLyBE
byBub3QgZGVsYXkgcHJvY2VzcyBsYXVuY2ggZm9yIGluc3BlY3RvciBwYWdlcyBhcyBpbnNwZWN0
b3IgcGFnZXMgZG8gbm90IGtub3cgaG93IHRvIHRyYW5zaXRpb24gZnJvbSBhIHRlcm1pbmF0ZWQg
cHJvY2Vzcy4KLSAgICAgICAgcG9vbC0+ZGlzYWJsZURlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoKCk7
Ci0gICAgfQotICAgIHJldHVybiAqcG9vbDsKLX0KLQotYm9vbCBpc0luc3BlY3RvclByb2Nlc3NQ
b29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4gKHNfbWFpbklu
c3BlY3RvclByb2Nlc3NQb29sICYmIHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9j
ZXNzUG9vbCkKLSAgICAgICAgfHwgKHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19u
ZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCA9PSAmcHJvY2Vzc1Bvb2wpOwotfQotCi1ib29sIGlz
SW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCi17Ci0gICAgcmV0dXJuIHBhZ2VM
ZXZlbE1hcCgpLmNvbnRhaW5zKCZ3ZWJQYWdlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRp
ZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTllYTc1ODhjYy4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdlYlByb2Nlc3NQb29sOwotCi0vLyBUaGUgaW5zcGVj
dG9yIHBhZ2UgZ3JvdXBzIGFyZSB1c2VkIHRvIGdpdmUgZGlmZmVyZW50IHByZWZlcmVuY2VzIHRv
IGVhY2gKLS8vIGluc3BlY3RvciBsZXZlbCBieSBzZXR0aW5nIGEgcGVyLWxldmVsIHBhZ2UgZ3Jv
dXAgaWRlbnRpZmllci4KLXVuc2lnbmVkIGluc3BlY3RvckxldmVsRm9yUGFnZShXZWJQYWdlUHJv
eHkqKTsKLVN0cmluZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdl
UHJveHkqKTsKLXZvaWQgdHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9y
UGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKTsKLXZvaWQgdW50cmFja0luc3BlY3Rv
clBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKTsKLQotV2ViUHJvY2Vzc1Bvb2wmIGlu
c3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7Ci1ib29sIGlzSW5z
cGVjdG9yUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmKTsKLWJvb2wgaXNJbnNwZWN0b3JQYWdl
KFdlYlBhZ2VQcm94eSYpOwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlRGVidWdnYWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
RGVidWdnYWJsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYmJkZjg3YWNl
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdn
YWJsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
Ci0KLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLVdlYlBhZ2VEZWJ1Z2dhYmxl
OjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFn
ZSkKLXsKLX0KLQotU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpuYW1lKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9uYW1lT3Zl
cnJpZGU7Ci0KLSAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUoKS0+dGl0bGUoKTsKLX0KLQot
U3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwoKSBjb25zdAotewotICAgIGlmICghbV9wYWdl
Lm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gV1RGOjpibGFua1VSTCgpLnN0cmluZygpOwot
Ci0gICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWluRnJhbWUoKS0+dXJsKCkuc3RyaW5nKCk7Ci0g
ICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3Ry
aW5nKCk7Ci0KLSAgICByZXR1cm4gdXJsOwotfQotCi1ib29sIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpo
YXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlLmluc3BlY3RvckNv
bnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZURlYnVnZ2Fi
bGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsLCBib29sIGlzQXV0b21hdGljQ29u
bmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNlKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JD
b250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5uZWwsIGlzQXV0b21hdGljQ29ubmVjdGlv
biwgaW1tZWRpYXRlbHlQYXVzZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmRpc2Nv
bm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOwotfQotCi12b2lkIFdlYlBh
Z2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2Fn
ZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCi17Ci0gICAgbV9wYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1
Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fbmFt
ZU92ZXJyaWRlID0gbmFtZTsKLSAgICB1cGRhdGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4Zjg0OGRlMTE2YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZURlYnVnZ2FibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvUmVtb3RlSW5zcGVjdGlvblRhcmdldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotCi1jbGFzcyBX
ZWJQYWdlRGVidWdnYWJsZSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rp
b25UYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdlYlBhZ2VEZWJ1Z2dhYmxlKTsKLXB1YmxpYzoKLSAgICBXZWJQYWdlRGVidWdn
YWJsZShXZWJQYWdlUHJveHkmKTsKLSAgICB+V2ViUGFnZURlYnVnZ2FibGUoKSA9IGRlZmF1bHQ7
Ci0KLSAgICBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6VHlwZSB0eXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpSZW1vdGVDb250cm9sbGFibGVUYXJnZXQ6
OlR5cGU6OldlYlBhZ2U7IH0KLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3QgZmluYWw7Ci0gICAg
U3RyaW5nIHVybCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaGFzTG9jYWxEZWJ1Z2dlcigpIGNv
bnN0IGZpbmFsOwotCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
JiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBh
dXNlID0gZmFsc2UpIGZpbmFsOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCYpIGZpbmFsOwotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOwotICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29s
KSBmaW5hbDsKLQotICAgIGNvbnN0IFN0cmluZyYgbmFtZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lT3ZlcnJpZGU7IH0KLSAgICB2b2lkIHNldE5hbWVPdmVycmlkZShjb25zdCBTdHJp
bmcmKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAgICBTdHJpbmcg
bV9uYW1lT3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19DT05UUk9MTEFCTEVfVEFSR0VUKFdlYktpdDo6V2ViUGFnZURlYnVnZ2Fi
bGUsIFdlYlBhZ2UpOwotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZTI4YmY3MTYzLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiUHJvdmlzaW9u
YWxQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZUluc3BlY3RvclRhcmdldC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50QmFzZS5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1zdGF0
aWMgU3RyaW5nIGdldFRhcmdldElEKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNp
b25hbFBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0
SUQocHJvdmlzaW9uYWxQYWdlLndlYlBhZ2VJRCgpKTsKLX0KLQotV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgcGFnZSkK
LSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZFJvdXRlcihGcm9udGVuZFJvdXRl
cjo6Y3JlYXRlKCkpCi0gICAgLCBtX2JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUobV9mcm9udGVuZFJvdXRlci5jb3B5UmVmKCkpKQotewotICAgIGF1dG8gdGFyZ2V0
QWdlbnQgPSBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldEFnZW50PihtX2Zyb250ZW5kUm91dGVy
LmdldCgpLCBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKLQotICAgIG1fdGFyZ2V0QWdlbnQg
PSB0YXJnZXRBZ2VudC5nZXQoKTsKLQotICAgIG1fYWdlbnRzLmFwcGVuZChXVEZNb3ZlKHRhcmdl
dEFnZW50KSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmluaXQoKQot
ewotICAgIFN0cmluZyBwYWdlVGFyZ2V0SWQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1Rh
cmdldElEKG1fcGFnZS53ZWJQYWdlSUQoKSk7Ci0gICAgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHBh
Z2VUYXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKTsKLX0KLQot
dm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6cGFnZUNsb3NlZCgpCi17Ci0gICAgZGlz
Y29ubmVjdEFsbEZyb250ZW5kcygpOwotCi0gICAgbV9hZ2VudHMuZGlzY2FyZFZhbHVlcygpOwot
fQotCi1ib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNMb2NhbEZyb250ZW5kKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9mcm9udGVuZFJvdXRlci0+aGFzTG9jYWxGcm9udGVuZCgp
OwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCwgYm9vbCwgYm9vbCkK
LXsKLSAgICBib29sIGNvbm5lY3RpbmdGaXJzdEZyb250ZW5kID0gIW1fZnJvbnRlbmRSb3V0ZXIt
Pmhhc0Zyb250ZW5kcygpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci0+Y29ubmVjdEZyb250ZW5k
KGZyb250ZW5kQ2hhbm5lbCk7Ci0KLSAgICBpZiAoY29ubmVjdGluZ0ZpcnN0RnJvbnRlbmQpCi0g
ICAgICAgIG1fYWdlbnRzLmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCgmbV9mcm9udGVuZFJv
dXRlci5nZXQoKSwgJm1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCkpOwotCi0gICAgbV9wYWdlLmRp
ZENoYW5nZUluc3BlY3RvckZyb250ZW5kQ291bnQobV9mcm9udGVuZFJvdXRlci0+ZnJvbnRlbmRD
b3VudCgpKTsKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotICAgIGlmIChoYXNMb2Nh
bEZyb250ZW5kKCkpCi0gICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRp
ZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6
OmRpc2Nvbm5lY3RGcm9udGVuZChGcm9udGVuZENoYW5uZWwmIGZyb250ZW5kQ2hhbm5lbCkKLXsK
LSAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0RnJvbnRlbmQoZnJvbnRlbmRDaGFubmVs
KTsKLQotICAgIGJvb2wgZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91
dGVyLT5oYXNGcm9udGVuZHMoKTsKLSAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RGcm9udGVuZCkK
LSAgICAgICAgbV9hZ2VudHMud2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVj
dFJlYXNvbjo6SW5zcGVjdG9yRGVzdHJveWVkKTsKLQotICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNw
ZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0K
LSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICBpZiAoZGlzY29ubmVjdGluZ0xhc3RG
cm9udGVuZCkKLSAgICAgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hh
bmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlz
Y29ubmVjdEFsbEZyb250ZW5kcygpCi17Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBhIGxvY2FsIGlu
c3BlY3RvciBjbGllbnQuCi0KLSAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5k
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOb3RpZnkgYWdlbnRzIGZpcnN0LCBzaW5j
ZSB0aGV5IG1heSBuZWVkIHRvIHVzZSBJbnNwZWN0b3JDbGllbnQuCi0gICAgbV9hZ2VudHMud2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFy
Z2V0RGVzdHJveWVkKTsKLQotICAgIC8vIERpc2Nvbm5lY3QgYW55IHJlbWFpbmluZyByZW1vdGUg
ZnJvbnRlbmRzLgotICAgIG1fZnJvbnRlbmRSb3V0ZXItPmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMo
KTsKLQotICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRl
bmRSb3V0ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLSAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKLSNl
bmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNwYXRjaE1lc3Nh
Z2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPmRpc3BhdGNoKG1lc3NhZ2UpOwotfQotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbmRpY2F0aW5nKGJv
b2wgaW5kaWNhdGluZykKLXsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3BhZ2Uu
c2V0SW5kaWNhdGluZyhpbmRpY2F0aW5nKTsKLSNlbHNlCi0gICAgaWYgKGluZGljYXRpbmcpCi0g
ICAgICAgIG1fcGFnZS5zaG93SW5zcGVjdG9ySW5kaWNhdGlvbigpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9wYWdlLmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgot
Ci12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpjcmVhdGVJbnNwZWN0b3JUYXJnZXQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5
cGUpCi17Ci0gICAgYWRkVGFyZ2V0KEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUobV9wYWdl
LCB0YXJnZXRJZCwgdHlwZSkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCi17Ci0gICAg
YXV0byBpdCA9IG1fdGFyZ2V0cy5maW5kKHRhcmdldElkKTsKLSAgICBpZiAoaXQgPT0gbV90YXJn
ZXRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVz
dHJveWVkKCppdC0+dmFsdWUpOwotICAgIG1fdGFyZ2V0cy5yZW1vdmUoaXQpOwotfQotCi12b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IG1fdGFyZ2V0QWdlbnQtPnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQodGFyZ2V0SWQs
IG1lc3NhZ2UpOwotfQotCi1ib29sIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpzaG91bGRQ
YXVzZUxvYWRpbmcoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmRSb3V0ZXItPmhhc0Zyb250ZW5kcygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdl
dFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSkpOwotICAgIEFTU0VSVCh0YXJnZXQpOwotICAgIHJl
dHVybiB0YXJnZXQtPmlzUGF1c2VkKCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXI6OnNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVBy
b3h5JiBwcm92aXNpb25hbFBhZ2UsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQot
ewotICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9u
YWxQYWdlKSk7Ci0gICAgQVNTRVJUKHRhcmdldCk7Ci0gICAgdGFyZ2V0LT5zZXRSZXN1bWVDYWxs
YmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJv
dmlzaW9uYWxQYWdlKQotewotICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3Jl
YXRlKHByb3Zpc2lvbmFsUGFnZSwgZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXI6OndpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lv
bmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpCi17Ci0gICAgZGVzdHJveUluc3BlY3RvclRh
cmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2ViUGFn
ZUlEKQotewotICAgIFN0cmluZyBvbGRJRCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnRvVGFy
Z2V0SUQob2xkV2ViUGFnZUlEKTsKLSAgICBTdHJpbmcgbmV3SUQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG5ld1dlYlBhZ2VJRCk7Ci0gICAgYXV0byBuZXdUYXJnZXQgPSBt
X3RhcmdldHMudGFrZShuZXdJRCk7Ci0gICAgQVNTRVJUKG5ld1RhcmdldCk7Ci0gICAgbmV3VGFy
Z2V0LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldCgpOwotICAgIG1fdGFyZ2V0QWdlbnQtPmRp
ZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KG9sZElELCBuZXdJRCk7Ci0KLSAgICAvLyBXZSd2ZSBk
aXNjb25uZWN0ZWQgZnJvbSB0aGUgb2xkIHBhZ2UgYW5kIHdpbGwgbm90IHJlY2VpdmUgYW55IG1l
c3NhZ2UgZnJvbSBpdCwgc28KLSAgICAvLyB3ZSBkZXN0cm95IGV2ZXJ5dGhpbmcgYnV0IHRoZSBu
ZXcgdGFyZ2V0IGhlcmUuCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDI5
Mzc+IGRvIG5vdCBkZXN0cm95IHRhcmdldHMgdGhhdCBiZWxvbmcgdG8gdGhlIGNvbW1pdHRlZCBw
YWdlLgotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogbV90YXJnZXRzLnZhbHVlcygpKQotICAgICAg
ICBtX3RhcmdldEFnZW50LT50YXJnZXREZXN0cm95ZWQoKnRhcmdldCk7Ci0gICAgbV90YXJnZXRz
LmNsZWFyKCk7Ci0gICAgbV90YXJnZXRzLnNldChuZXdUYXJnZXQtPmlkZW50aWZpZXIoKSwgV1RG
TW92ZShuZXdUYXJnZXQpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJiB0YXJnZXQp
Ci17Ci0gICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0Q3JlYXRlZCgqdGFyZ2V0KTsKLSAgICBtX3Rh
cmdldHMuc2V0KHRhcmdldC0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKHRhcmdldCkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3OGNhZWRmMGMwYy4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFByb3h5LmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRl
bnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotY2xhc3MgQmFja2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBGcm9udGVuZENoYW5u
ZWw7Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIoV2ViUGFnZVByb3h5
Jik7Ci0KLSAgICB2b2lkIGluaXQoKTsKLSAgICB2b2lkIHBhZ2VDbG9zZWQoKTsKLQotICAgIGJv
b2wgaGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0OwotCi0gICAgdm9pZCBjb25uZWN0RnJvbnRlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbiA9
IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSk7Ci0gICAgdm9pZCBkaXNjb25u
ZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKLSAgICB2b2lkIGRpc2Nv
bm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKLSAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3Jl
YXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVGFyZ2V0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250
ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLSAg
ICBib29sIHNob3VsZFBhdXNlTG9hZGluZyhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYpIGNv
bnN0OwotICAgIHZvaWQgc2V0Q29udGludWVMb2FkaW5nQ2FsbGJhY2soY29uc3QgUHJvdmlzaW9u
YWxQYWdlUHJveHkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGRpZENy
ZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQcm94eSYpOwotICAgIHZvaWQgd2ls
bERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKLSAg
ICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBv
bGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCk7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdl
dFByb3h5PiYmKTsKLQotICAgIFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAgIFJlZjxJbnNwZWN0
b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91dGVyOwotICAgIFJlZjxJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotICAgIEluc3BlY3Rvcjo6
QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldEFn
ZW50KiBtX3RhcmdldEFnZW50OwotICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8
SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlkNTBkYzI4
NmIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgotCi0jaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1
ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
UmVtb3RlSW5zcGVjdG9yVXRpbHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVn
Z2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUlu
c3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUlu
c3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCB1aW50
NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotICAgICAgICA6IG1fcHJveHko
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQotICAgICAgICAsIG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0
aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkKLSAgICB7Ci0gICAgICAgIG1f
cHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICB9Ci0KLSAgICB+UmVtb3RlSW5zcGVjdG9yUHJv
eHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAg
ICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkKCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNo
b3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAg
ICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1Z2dhYmxlSW5mbyA9IEFQSTo6RGVidWdn
YWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpOwotICAgICAgICBk
ZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUoSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlw
ZTo6V2ViUGFnZSk7Ci0gICAgICAgIG1fcHJveHktPmxvYWQoV1RGTW92ZShkZWJ1Z2dhYmxlSW5m
byksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21tYW5kc1VSTCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2hvdygpOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0VGFyZ2V0TmFtZShjb25zdCBDU3RyaW5nJiBuYW1lKQotICAgIHsKLSNpZiBQ
TEFURk9STShHVEspCi0gICAgICAgIG1fcHJveHktPnVwZGF0ZVdpbmRvd1RpdGxlKG5hbWUpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JD
bGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1l
c3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25u
ZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWY8UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBt
X2luc3BlY3RvckNsaWVudDsKLSAgICB1aW50NjRfdCBtX2Nvbm5lY3Rpb25JRDsKLSAgICB1aW50
NjRfdCBtX3RhcmdldElEOwotfTsKLQotY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhh
bmRsZXJzJiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Om1lc3NhZ2VIYW5kbGVycygpCi17Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VIYW5k
bGVycz4gbWVzc2FnZUhhbmRsZXJzID0gU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJz
KHsKLSAgICB7ICJEaWRDbG9zZSIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9u
OjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9LAotICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwg
R1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50
ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAg
ICAgICAgIGNsaWVudC5jb25uZWN0aW9uRGlkQ2xvc2UoKTsKLSAgICAgICAgfX0KLSAgICB9LAot
ICAgIHsgIkRpZFNldHVwSW5zcGVjdG9yQ2xpZW50Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tl
dENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKGF5KSIsCi0gICAgICAgIFtdKFNvY2tl
dENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsK
LSAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JD
bGllbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiBiYWNrZW5k
Q29tbWFuZHNWYXJpYW50OwotICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAi
KEBheSkiLCAmYmFja2VuZENvbW1hbmRzVmFyaWFudC5vdXRQdHIoKSk7Ci0gICAgICAgICAgICBj
bGllbnQuc2V0QmFja2VuZENvbW1hbmRzKGdfdmFyaWFudF9nZXRfYnl0ZXN0cmluZyhiYWNrZW5k
Q29tbWFuZHNWYXJpYW50LmdldCgpKSk7Ci0gICAgICAgIH19Ci0gICAgfSwKLSAgICB7ICJTZXRU
YXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VD
YWxsYmFjaz4geyAiKHRhKHRzc3NiKSkiLAotICAgICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwg
R1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBh
dXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRh
dGEpOwotICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQ7Ci0gICAgICAgICAgICBHVW5p
cXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gaXRlcjsKLSAgICAgICAgICAgIGdfdmFyaWFudF9nZXQo
cGFyYW1ldGVycywgIih0YSh0c3NzYikpIiwgJmNvbm5lY3Rpb25JRCwgJml0ZXIub3V0UHRyKCkp
OwotICAgICAgICAgICAgc2l6ZV90IHRhcmdldENvdW50ID0gZ192YXJpYW50X2l0ZXJfbl9jaGls
ZHJlbihpdGVyLmdldCgpKTsKLSAgICAgICAgICAgIFZlY3RvcjxSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OlRhcmdldD4gdGFyZ2V0TGlzdDsKLSAgICAgICAgICAgIHRhcmdldExpc3QucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSh0YXJnZXRDb3VudCk7Ci0gICAgICAgICAgICBndWludDY0IHRhcmdldElE
OwotICAgICAgICAgICAgY29uc3QgY2hhciogdHlwZTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG5hbWU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB1cmw7Ci0gICAgICAgICAgICBnYm9vbGVh
biBoYXNMb2NhbERlYnVnZ2VyOwotICAgICAgICAgICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xv
b3AoaXRlci5nZXQoKSwgIih0JnMmcyZzYikiLCAmdGFyZ2V0SUQsICZ0eXBlLCAmbmFtZSwgJnVy
bCwgJmhhc0xvY2FsRGVidWdnZXIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAo
dHlwZSwgIldlYiIpIHx8ICFnX3N0cmNtcDAodHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0TGlzdC51bmNoZWNrZWRBcHBlbmQoeyB0YXJnZXRJRCwgdHlwZSwg
bmFtZSwgdXJsIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xpZW50LnNldFRhcmdl
dExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKLSAgICAgICAgfX0KLSAg
ICB9LAotICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBT
b2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0dHMpIiwKLSAgICAgICAgW10o
U29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0
YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3Bl
Y3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklE
LCB0YXJnZXRJRDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7Ci0gICAgICAgICAg
ICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodHQmcykiLCAmY29ubmVjdGlvbklELCAmdGFy
Z2V0SUQsICZtZXNzYWdlKTsKLSAgICAgICAgICAgIGNsaWVudC5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAgICAgIH19Ci0gICAgfQot
ICAgIH0pOwotICAgIHJldHVybiBtZXNzYWdlSGFuZGxlcnM7Ci19Ci0KLVJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIqIGFkZHJlc3MsIHVuc2ln
bmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBvYnNlcnZlcikKLSAgICA6IG1faG9z
dEFuZFBvcnQoU3RyaW5nOjpmcm9tVVRGOChhZGRyZXNzKSArICc6JyArIFN0cmluZzo6bnVtYmVy
KHBvcnQpKQotICAgICwgbV9vYnNlcnZlcihvYnNlcnZlcikKLSAgICAsIG1fY2FuY2VsbGFibGUo
YWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQotewotICAgIEdSZWZQdHI8R1NvY2tldENs
aWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7Ci0g
ICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0
KCksIG1faG9zdEFuZFBvcnQudXRmOCgpLmRhdGEoKSwgMCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwK
LSAgICAgICAgW10oR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICAgICAgICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBhZG9w
dEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5pc2goR19TT0NLRVRfQ0xJ
RU5UKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgICAgICBpZiAo
Z19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNF
TExFRCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXV0byogY2xpZW50
ID0gc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAg
ICAgICAgaWYgKGNvbm5lY3Rpb24pCi0gICAgICAgICAgICAgICAgY2xpZW50LT5zZXR1cENvbm5l
Y3Rpb24oU29ja2V0Q29ubmVjdGlvbjo6Y3JlYXRlKFdURk1vdmUoY29ubmVjdGlvbiksIG1lc3Nh
Z2VIYW5kbGVycygpLCBjbGllbnQpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiUmVtb3RlSW5zcGVjdG9yQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0
IHRvIGluc3BlY3RvciBzZXJ2ZXI6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICAgICAg
ICAgIGNsaWVudC0+bV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCpjbGllbnQpOwotICAgICAg
ICAgICAgfQotICAgIH0sIHRoaXMpOwotfQotCi1SZW1vdGVJbnNwZWN0b3JDbGllbnQ6On5SZW1v
dGVJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2Vs
bGFibGUuZ2V0KCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0dXBDb25u
ZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCi17Ci0gICAgbV9zb2Nr
ZXRDb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKTsKLSAgICBtX3NvY2tldENvbm5lY3Rp
b24tPnNlbmRNZXNzYWdlKCJTZXR1cEluc3BlY3RvckNsaWVudCIsIGdfdmFyaWFudF9uZXcoIihA
YXkpIiwgZ192YXJpYW50X25ld19ieXRlc3RyaW5nKEluc3BlY3Rvcjo6YmFja2VuZENvbW1hbmRz
SGFzaCgpLmRhdGEoKSkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJh
Y2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMpCi17Ci0gICAgaWYgKCFi
YWNrZW5kQ29tbWFuZHMgfHwgIWJhY2tlbmRDb21tYW5kc1swXSkgewotICAgICAgICBtX2JhY2tl
bmRDb21tYW5kc1VSTCA9IFN0cmluZygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
VmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGJhY2tlbmRDb21tYW5k
cywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwotICAgIG1fYmFja2VuZENv
bW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsK
LX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25EaWRDbG9zZSgpCi17
Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVhcigp
OwotICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9vYnNlcnZlci5jb25u
ZWN0aW9uQ2xvc2VkKCp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKLXsKLSAgICBh
dXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRF0g
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMs
IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpOwotICAgIH0pOwotICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVz
c2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJ
RCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmxvYWQoKTsKLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKHVpbnQ2NF90IGNvbm5l
Y3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZW5kTWVzc2FnZVRvQmFja2VuZCIs
IGdfdmFyaWFudF9uZXcoIih0dHMpIiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZS51
dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZy
b21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotewot
ICAgIEFTU0VSVChtX2luc3BlY3RvclByb3h5TWFwLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQpKSk7Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVz
c2FnZSgiRnJvbnRlbmREaWRDbG9zZSIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9u
SUQsIHRhcmdldElEKSk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtl
X3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6c2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJn
ZXQ+JiYgdGFyZ2V0TGlzdCkKLXsKLSAgICAvLyBGaW5kIGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92
ZSB0aGVtLgotICAgIFZlY3Rvcjx1aW50NjRfdCwgND4gdGFyZ2V0c1RvUmVtb3ZlOwotICAgIGZv
ciAoYXV0byYgY29ubmVjdGlvblRhcmdldFBhaXIgOiBtX2luc3BlY3RvclByb3h5TWFwLmtleXMo
KSkgewotICAgICAgICBpZiAoY29ubmVjdGlvblRhcmdldFBhaXIuZmlyc3QgIT0gY29ubmVjdGlv
bklEKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRMaXN0KSB7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0LmlkID09IGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCkgewotICAg
ICAgICAgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KGNvbm5lY3Rpb25UYXJnZXRQYWly
KS0+c2V0VGFyZ2V0TmFtZSh0YXJnZXQubmFtZSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICB0YXJnZXRzVG9SZW1vdmUuYXBwZW5kKGNv
bm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAgfQotICAgIGZvciAoYXV0byB0YXJnZXRJ
RCA6IHRhcmdldHNUb1JlbW92ZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotCi0gICAgbV90YXJnZXRz
LnNldChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOwotICAgIG1fb2JzZXJ2ZXIu
dGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3Qg
dGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgYXV0byBwcm94eSA9IG1faW5z
cGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQp
KTsKLSAgICBBU1NFUlQocHJveHkpOwotICAgIGlmICghcHJveHkpCi0gICAgICAgIHJldHVybjsK
LSAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZzo6ZnJvbVVURjgobWVzc2Fn
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZWUw
MmNlNWQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvU29ja2V0Q29ubmVjdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi10eXBlZGVmIHN0cnVjdCBfR0NhbmNlbGxhYmxlIEdDYW5jZWxs
YWJsZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVu
dDsKLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5OwotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0
YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOwotfTsK
LQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCgpOwotcHVibGljOgotICAgIFJlbW90ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFyKiBh
ZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYpOwotICAgIH5S
ZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKLQotICAgIHN0cnVjdCBUYXJnZXQgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdWludDY0X3QgaWQ7Ci0gICAgICAgIENTdHJpbmcgdHlwZTsKLSAgICAgICAg
Q1N0cmluZyBuYW1lOwotICAgICAgICBDU3RyaW5nIHVybDsKLSAgICB9OwotCi0gICAgY29uc3Qg
SGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1
cm4gbV90YXJnZXRzOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCgpIGNvbnN0IHsg
cmV0dXJuIG1faG9zdEFuZFBvcnQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5k
c1VSTCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9Ci0KLSAgICB2b2lk
IGluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCk7Ci0gICAg
dm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90
IHRhcmdldElELCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKHVp
bnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOwotCi1wcml2YXRlOgotICAg
IHN0YXRpYyBjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMmIG1lc3NhZ2VI
YW5kbGVycygpOwotICAgIHZvaWQgc2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9u
PiYmKTsKLSAgICB2b2lkIGNvbm5lY3Rpb25EaWRDbG9zZSgpOwotCi0gICAgdm9pZCBzZXRCYWNr
ZW5kQ29tbWFuZHMoY29uc3QgY2hhciopOwotICAgIHZvaWQgc2V0VGFyZ2V0TGlzdCh1aW50NjRf
dCBjb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+JiYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0
IGNoYXIqKTsKLQotICAgIFN0cmluZyBtX2hvc3RBbmRQb3J0OwotICAgIFN0cmluZyBtX2JhY2tl
bmRDb21tYW5kc1VSTDsKLSAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgbV9vYnNlcnZlcjsK
LSAgICBSZWZQdHI8U29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwotICAgIEdS
ZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwotICAgIEhhc2hNYXA8dWludDY0X3Qs
IFZlY3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7Ci0gICAgSGFzaE1hcDxzdGQ6OnBhaXI8dWludDY0
X3QsIHVpbnQ2NF90Piwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5Pj4gbV9p
bnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwODhkZDA4YjAuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
Ci0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCi0j
aW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlV2luZG93VGl0
bGUoY29uc3QgQ1N0cmluZyYgdGFyZ2V0TmFtZSkKLXsKLSAgICBpZiAoIW1fd2luZG93KQotICAg
ICAgICByZXR1cm47Ci0gICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lU
X0lOU1BFQ1RPUl9XSU5ET1cobV93aW5kb3cpLCAhdGFyZ2V0TmFtZS5pc051bGwoKSA/IHRhcmdl
dE5hbWUuZGF0YSgpIDogbnVsbHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW90ZUluc3BlY3Rv
clZpZXdEZXN0cm95ZWQoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5KQot
ewotICAgIGluc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOwotfQotCi1XZWJQYWdlUHJv
eHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpCi17Ci0gICAgQVNTRVJUKCFtX3dlYlZpZXcpOwotCi0gICAgYXV0byBwcmVmZXJl
bmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJL
aXQyLiIpOwotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAgICAvLyBBbGxvdyBkZXZlbG9w
ZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQg
Y2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0Vu
YWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3Rl
bUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQ
YWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxs
cHRyKSk7Ci0KLSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZp
bnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAg
ICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwot
ICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLSAg
ICBtX3dlYlZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29u
ZmlndXJhdGlvbi5wdHIoKSkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYlZp
ZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhyZW1vdGVJbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwg
dGhpcyk7Ci0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX3dlYlZpZXcp
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldykpOwotCi0gICAgbV93aW5kb3cg
PSB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcobnVsbHB0cik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihtX3dpbmRvdyksIG1fd2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9z
aG93KG1fd2ViVmlldyk7Ci0KLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNU
KG1fd2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dpbmRvdykpOwotICAgIGd0
a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1fd2luZG93KSk7Ci0KLSAgICByZXR1cm4gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpOwot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIGlmIChhdXRv
KiB3ZWJQYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNF
KG1fd2ViVmlldykpKQotICAgICAgICAgICAgd2ViUGFnZS0+Y2xvc2UoKTsKLSAgICB9Ci0gICAg
aWYgKG1fd2luZG93KQotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgp
Ci17Ci0gICAgaWYgKG1fd2luZG93KQotICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJ
TkRPVyhtX3dpbmRvdykpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdGVGaWxlUmVwbGFjZUNvbnRl
bnRzQ2FsbGJhY2soR09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
Z3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2Jq
ZWN0KTsKLSAgICBpZiAoIWdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1
bHQsIG51bGxwdHIsIG51bGxwdHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBwYWdl
ID0gc3RhdGljX2Nhc3Q8V2ViUGFnZVByb3h5Kj4odXNlckRhdGEpOwotICAgIEdVbmlxdWVQdHI8
Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmlsZSkpOwotICAgIHBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSwg
cGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZm9yY2VTYXZlRGlhbG9nKTsKLQotICAgIEdSZWZQdHI8R3RrRmlsZUNob29z
ZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXco
IlNhdmUgRmlsZSIsCi0gICAgICAgIEdUS19XSU5ET1cobV93aW5kb3cpLCBHVEtfRklMRV9DSE9P
U0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwiKSk7Ci0KLSAgICBHdGtGaWxlQ2hvb3Nl
ciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKLSAgICBndGtfZmls
ZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOwot
Ci0gICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBh
IGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCi0gICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2Ug
Y2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCi0gICAgLy8g
dW5mb3J0dW5hdGVseS4KLSAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOwotICAgIC8v
IFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCi0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3Vy
cmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFs
b2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBUKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKLSAgICBDU3RyaW5nIGRhdGFTdHJpbmc7Ci0gICAg
aWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwg
ZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgpOwotICAgIH0gZWxzZQotICAgICAgICBk
YXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7Ci0KLSAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRh
dGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgp
OwotICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3Ry
aW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmls
ZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKLSAgICBH
VW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKLSAgICBn
X2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3Ro
LCBudWxscHRyLCBmYWxzZSwKLSAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFU
SU9OLCBudWxscHRyLCByZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVj
dG9yUGFnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBw
ZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCi17
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dE
cmFnKCkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVu
SW5OZXdUYWIoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikKLXsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNw
ZWN0b3JQcm94eUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclByb3h5Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5OWM0NDY1
NzY4Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5OwotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eUNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yUHJveHlDbGllbnQoKSA9
IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coV2ViSW5zcGVjdG9yUHJveHkm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKFdlYkluc3BlY3RvclByb3h5JikgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoV2ViSW5zcGVjdG9yUHJveHkm
LCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhdHRhY2goV2ViSW5z
cGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRldGFjaChXZWJJbnNwZWN0b3JQ
cm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoV2Vi
SW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBoZWlnaHQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIHdpZHRo
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eShXZWJJ
bnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNw
ZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVj
dG9yUHJveHlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmRlMzQ5YmI3
MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3Bl
Y3RvclByb3h5R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4uCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94
eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRp
b25BY3Rpb24uaCIKLSNpbmNsdWRlICJXS0FycmF5LmgiCi0jaW5jbHVkZSAiV0tDb250ZXh0TWVu
dUl0ZW0uaCIKLSNpbmNsdWRlICJXS011dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYktp
dEluc3BlY3RvcldpbmRvdy5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgi
Ci0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZp
Y2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1V0aWxpdGllcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLXN0YXRpYyB2b2lkIGluc3BlY3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50
ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0g
c3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPih1c2VyRGF0YSk7Ci0KLSAgICAvLyBJbmZv
cm0gV2ViUHJvY2VzcyBhYm91dCB3ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAot
ICAgIC8vIHJlc3VsdHMgaW4gZmFpbHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2Vi
aW5zcGVjdG9yLgotICAgIGluc3BlY3RvclByb3h5LT5jbG9zZSgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5
Q2xpZW50PiYmIGNsaWVudCkKLXsKLSAgICBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgd2Via2l0SW5zcGVj
dG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1cobV9pbnNwZWN0b3JX
aW5kb3cpLCAhbV9pbnNwZWN0ZWRVUkxTdHJpbmcuaXNFbXB0eSgpID8gbV9pbnNwZWN0ZWRVUkxT
dHJpbmcudXRmOCgpLmRhdGEoKSA6IG51bGxwdHIpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9u
ZyBsb25nIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2Vj
dXJpdHlPcmlnaW5SZWYsIFdLU3RyaW5nUmVmLCBXS1N0cmluZ1JlZiwgdW5zaWduZWQgbG9uZyBs
b25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50RGF0YWJh
c2VVc2FnZSwgdW5zaWduZWQgbG9uZyBsb25nIGV4cGVjdGVkVXNhZ2UsIGNvbnN0IHZvaWQqKQot
ewotICAgIHJldHVybiBzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxvbmc+KGV4cGVjdGVkVXNhZ2Us
IGN1cnJlbnREYXRhYmFzZVVzYWdlICogMS4yNSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlByb2Nl
c3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2Vi
SW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVj
dG9yUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci0gICAgQVNTRVJUKHdl
Ykluc3BlY3RvclByb3h5KTsKLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgp
OwotfQotCi1zdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFn
ZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwg
V0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCi17Ci0gICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmln
YXRlIGFueXdoZXJlLgotICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChu
YXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKLSAgICBpZiAoc291cmNlRnJhbWUg
JiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgIHRvSW1wbChsaXN0ZW5l
clJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgV2Vi
SW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
SW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKLSAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJv
eHkpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2
aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKLQotICAgIC8vIEFsbG93IGxvYWRpbmcgb2Yg
dGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCi0gICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01h
aW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgIHRvSW1wbChs
aXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
UHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBw
YWdlLgotICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOwotCi0gICAgLy8gQW5kIGlu
c3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgd2ViSW5zcGVjdG9yUHJv
eHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFn
ZVJlZiwgV0tBcnJheVJlZiBwcm9wb3NlZE1lbnVSZWYsIFdLQXJyYXlSZWYqIG5ld01lbnVSZWYs
IFdLSGl0VGVzdFJlc3VsdFJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKikKLXsKLSAgICBXS011
dGFibGVBcnJheVJlZiBtZW51SXRlbXMgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOwotCi0gICAg
c2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUocHJvcG9zZWRNZW51UmVmKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgV0tDb250ZXh0TWVudUl0
ZW1SZWYgY29udGV4dE1lbnVJdGVtID0gc3RhdGljX2Nhc3Q8V0tDb250ZXh0TWVudUl0ZW1SZWY+
KFdLQXJyYXlHZXRJdGVtQXRJbmRleChwcm9wb3NlZE1lbnVSZWYsIGkpKTsKLSAgICAgICAgc3dp
dGNoIChXS0NvbnRleHRNZW51SXRlbUdldFRhZyhjb250ZXh0TWVudUl0ZW0pKSB7Ci0gICAgICAg
IGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAgICAgICAg
Y2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6Ci0gICAgICAgIGNh
c2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgV0tBcnJheUFwcGVuZEl0ZW0o
bWVudUl0ZW1zLCBjb250ZXh0TWVudUl0ZW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAqbmV3TWVudVJlZiA9IG1lbnVJdGVtczsKLX0KLQotV2ViUGFnZVBy
b3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewot
ICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3
KTsKLQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmlu
ZygpLCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUp
Ci0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGlu
IGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2Vz
LT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRM
b2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAg
IHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsKLSAgICB9KTsKLSAgICBh
dXRvIHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElk
ZW50aWZpZXJGb3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwotCi0gICAgYXV0byBwYWdlQ29uZmln
dXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlv
bkxldmVsKCkpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVy
ZW5jZXMucHRyKCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdy
b3VwLnB0cigpKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZp
ZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIoKSkpOwotICAgIGdfb2JqZWN0X2Fk
ZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JWaWV3KSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZtX2luc3BlY3RvclZpZXcpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5z
cGVjdG9yVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKGluc3BlY3RvclZpZXdEZXN0cm95ZWQp
LCB0aGlzKTsKLQotICAgIFdLUGFnZVVJQ2xpZW50VjIgdWlDbGllbnQgPSB7Ci0gICAgICAgIHsg
MiwgdGhpcyB9LAotICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRG
b3JVc2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKLSAgICAgICAgbnVsbHB0
ciwgLy8gY2xvc2VQYWdlCi0gICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cwotICAgICAgICBu
dWxscHRyLCAvLyBmb2N1cwotICAgICAgICBudWxscHRyLCAvLyB1bmZvY3VzCi0gICAgICAgIG51
bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZh
U2NyaXB0Q29uZmlybQotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0Ci0g
ICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKLSAgICAgICAgbnVsbHB0ciwgLy8gbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAotICAgICAgICBudWxs
cHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYw
Ci0gICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50Ci0gICAgICAgIG51bGxw
dHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKLSAgICAgICAgbnVsbHB0ciwgLy8gYXJlVG9v
bGJhcnNWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJzVmlzaWJsZQotICAg
ICAgICBudWxscHRyLCAvLyBpc01lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNl
dE1lbnVCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIGlzU3RhdHVzQmFyVmlzaWJsZQot
ICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNCYXJWaXNpYmxlCi0gICAgICAgIG51bGxwdHIs
IC8vIGlzUmVzaXphYmxlCi0gICAgICAgIG51bGxwdHIsIC8vIHNldFJlc2l6YWJsZQotICAgICAg
ICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZSwKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2lu
ZG93RnJhbWUsCi0gICAgICAgIG51bGxwdHIsIC8vIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bAotICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3Ci0gICAgICAgIG51bGxwdHIsIC8vIHBhZ2VE
aWRTY3JvbGwKLSAgICAgICAgZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAgICAgICBudWxscHRy
LCAvLyBydW5PcGVuUGFuZWwsCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKLSAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVp
Z2h0Ci0gICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAotICAgICAgICBudWxscHRyLCAv
LyBkcmF3SGVhZGVyCi0gICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIKLSAgICAgICAgbnVs
bHB0ciwgLy8gcHJpbnRGcmFtZQotICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAotICAgICAg
ICBudWxscHRyLCAvLyB1bnVzZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gc2F2ZURhdGFUb0ZpbGVJ
bkRvd25sb2Fkc0ZvbGRlcgotICAgICAgICBudWxscHRyLCAvLyBzaG91bGRJbnRlcnJ1cHRKYXZh
U2NyaXB0Ci0gICAgICAgIG51bGxwdHIsIC8vIGNyZWF0ZVBhZ2UKLSAgICAgICAgbnVsbHB0ciwg
Ly8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9s
aWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKLSAgICAgICAgbnVsbHB0ciwgLy8g
dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKLSAg
ICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCi0gICAgICAgIG51bGxwdHIsIC8vIGhp
ZGVDb2xvclBpY2tlcgotICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRv
bkNsaWNrZWQKLSAgICB9OwotCi0gICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRp
b25DbGllbnQgPSB7Ci0gICAgICAgIHsgMCwgdGhpcyB9LAotICAgICAgICBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uUmVzcG9uc2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1
Z2luTG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlv
bgotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2
aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RmFpbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZEluU3ViZnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCi0g
ICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KLSAgICAgICAgbnVs
bHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKLSAgICAgICAgbnVsbHB0ciwgLy8g
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQotICAgICAgICBudWxscHRyLCAv
LyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLSAgICAgICAgd2ViUHJvY2Vzc0Rp
ZENyYXNoLAotICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5Ci0KLSAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxs
cHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdh
dGlvbkdlc3R1cmVTbmFwc2hvdAotICAgIH07Ci0KLSAgICBXS1BhZ2VDb250ZXh0TWVudUNsaWVu
dFYzIGNvbnRleHRNZW51Q2xpZW50ID0gewotICAgICAgICB7IDMsIHRoaXMgfSwKLSAgICAgICAg
bnVsbHB0ciwgLy8gZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51X2RlcHJlY2F0ZWRGb3JV
c2VXaXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gY3VzdG9tQ29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQKLSAgICAgICAgbnVsbHB0ciwgLy8gY29udGV4dE1lbnVEaXNtaXNzZWQKLSAgICAgICAgZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51LAotICAgICAgICBudWxscHRyLCAvLyBzaG93Q29u
dGV4dE1lbnUKLSAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNvbnRleHRNZW51Ci0gICAgfTsKLQot
ICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX2luc3BlY3RvclZpZXcpKTsKLSAgICBBU1NFUlQoaW5z
cGVjdG9yUGFnZSk7Ci0KLSAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQodG9BUEkoaW5zcGVjdG9y
UGFnZSksICZ1aUNsaWVudC5iYXNlKTsKLSAgICBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVu
dCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFzZSk7Ci0gICAgV0tQ
YWdlU2V0UGFnZUNvbnRleHRNZW51Q2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmY29udGV4
dE1lbnVDbGllbnQuYmFzZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCi17Ci0g
ICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5vcGVuV2luZG93KCp0aGlzKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3RrV2lkZ2V0KiBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gZ3RrX3dpZGdl
dF9nZXRfdG9wbGV2ZWwoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpOwotICAgIGlmICgh
V2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KGluc3BlY3RlZFZpZXdQYXJl
bnQpKQotICAgICAgICBpbnNwZWN0ZWRWaWV3UGFyZW50ID0gbnVsbHB0cjsKLQotICAgIEFTU0VS
VCghbV9pbnNwZWN0b3JXaW5kb3cpOwotICAgIG1faW5zcGVjdG9yV2luZG93ID0gd2Via2l0SW5z
cGVjdG9yV2luZG93TmV3KGluc3BlY3RlZFZpZXdQYXJlbnQgPyBHVEtfV0lORE9XKGluc3BlY3Rl
ZFZpZXdQYXJlbnQpIDogbnVsbHB0cik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihtX2luc3BlY3RvcldpbmRvdyksIG1faW5zcGVjdG9yVmlldyk7Ci0gICAgZ3RrX3dpZGdl
dF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci0KLSAgICBpZiAoIW1faW5zcGVjdGVkVVJMU3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKLQotICAg
IGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV9pbnNwZWN0b3JXaW5kb3cpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yV2luZG93KSk7Ci0gICAgZ3RrX3dp
bmRvd19wcmVzZW50KEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17
Ci0gICAgaWYgKG1faW5zcGVjdG9yVmlldykgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQq
PihpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmll
dyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVu
dC0+ZGlkQ2xvc2UoKnRoaXMpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAg
ICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7Ci0gICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIGlmIChtX2lzT3Bl
bmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5i
cmluZ1RvRnJvbnQoKnRoaXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtXaWRnZXQqIHBh
cmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaWYg
KFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQotICAgICAg
ICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJlbnQpKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUlzRnJvbnQoKQotewotICAgIEd0a1dpZGdldCogcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfdG9w
bGV2ZWwobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpZiAoV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVl
blRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAgICAgIHJldHVybiBtX2lzVmlzaWJsZSAmJiBn
dGtfd2luZG93X2lzX2FjdGl2ZShHVEtfV0lORE9XKHBhcmVudCkpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1faW5zcGVjdGVkVVJMU3RyaW5nID0gdXJs
OwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5n
ZWQoKnRoaXMsIHVybCk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHVw
ZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9v
cmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCIpOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNl
L1Rlc3QuaHRtbCIpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJh
c2VVUkwoKQotewotICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5z
cGVjdG9yL1VzZXJJbnRlcmZhY2UvIik7Ci19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCi17Ci0gICAgLy8gRklYTUUgPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVs
IGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KLSAgICByZXR1cm4gRGVidWdnYWJsZUluZm9E
YXRhOjplbXB0eSgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQotewotICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxv
Y2F0ZWRfaGVpZ2h0KGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLX0KLQotdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewot
ICAgIHJldHVybiBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoaW5zcGVjdGVkUGFnZSgp
LT52aWV3V2lkZ2V0KCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0
dGFjaCgpCi17Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3Bl
Y3RvclZpZXc7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIGd0a19jb250
YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3Rv
clZpZXcpOwotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwot
ICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAgLy8gU2V0IGEgZGVm
YXVsdCBzaXplcyBiYXNlZCBvbiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLgotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0gMzAwOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1MDsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOwotCi0gICAgaWYgKG1f
YXR0YWNobWVudFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgewotICAgICAgICB1bnNp
Z25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdo
dCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3Rk
OjptYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXpl
LCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWdu
ZWQgbWF4aW11bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkg
KiAzIC8gNDsKLSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4
KG1pbmltdW1BdHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhp
bXVtQXR0YWNoZWRXaWR0aCkpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQgJiYgbV9jbGll
bnQtPmF0dGFjaCgqdGhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdlYmtpdFdlYlZpZXdC
YXNlQWRkV2ViSW5zcGVjdG9yKFdFQktJVF9XRUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+
dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3LCBtX2F0dGFjaG1lbnRTaWRlKTsKLSAgICBn
dGtfd2lkZ2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIGlmICghaW5zcGVjdGVkUGFnZSgpLT5oYXNS
dW5uaW5nUHJvY2VzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHUmVmUHRyPEd0a1dpZGdl
dD4gaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldzsKLSAgICBpZiAoIW1fY2xpZW50IHx8
ICFtX2NsaWVudC0+ZGV0YWNoKCp0aGlzKSkgewotICAgICAgICAvLyBEZXRhY2ggaXMgY2FsbGVk
IHdoZW4gbV9pc0F0dGFjaGVkIGlzIHRydWUsIGJ1dCBpdCBjb3VsZCBjYWxsZWQgYmVmb3JlCi0g
ICAgICAgIC8vIHRoZSBpbnNwZWN0b3IgaXMgb3BlbmVkIGlmIHRoZSBpbnNwZWN0b3IgaXMgc2hv
d24vY2xvc2VkIHF1aWNrbHkuIFNvLAotICAgICAgICAvLyB3ZSBtaWdodCBub3QgaGF2ZSBhIHBh
cmVudCB5ZXQuCi0gICAgICAgIGlmIChHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3BhcmVudChtX2luc3BlY3RvclZpZXcpKQotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1v
dmUoR1RLX0NPTlRBSU5FUihwYXJlbnQpLCBtX2luc3BlY3RvclZpZXcpOwotICAgIH0KLQotICAg
IC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRoaXMgbWVhbnMgdGhlIGlu
c3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCi0gICAgLy8gYW5kIHdlIHNob3VsZCBu
b3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93LgotICAgIGlmICghbV9pc1Zp
c2libGUpIHsKLSAgICAgICAgLy8gVGhlIGluc3BlY3RvciB2aWV3IHdpbGwgYmUgZGVzdHJveWVk
LCBidXQgd2UgZG9uJ3QgbmVlZCB0byBub3RpZnkgdGhlIHdlYiBwcm9jZXNzIHRvIGNsb3NlIHRo
ZQotICAgICAgICAvLyBpbnNwZWN0b3IgaW4gdGhpcyBjYXNlLCBzaW5jZSBpdCdzIGFscmVhZHkg
Y2xvc2VkLgotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9p
bnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JWaWV3RGVzdHJv
eWVkKSwgdGhpcyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewot
ICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jbGll
bnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCgqdGhpcywgaGVp
Z2h0KTsKLSAgICB3ZWJraXRXZWJWaWV3QmFzZVNldEluc3BlY3RvclZpZXdTaXplKFdFQktJVF9X
RUJfVklFV19CQVNFKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKSwgaGVpZ2h0KTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRh
Y2hlZFdpZHRoKCp0aGlzLCB3aWR0aCk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0
b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRn
ZXQoKSksIHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJh
ZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgZmlsZVJlcGxh
Y2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNv
dXJjZU9iamVjdCk7Ci0gICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmls
ZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKLSAgICBHVW5p
cXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUpKTsKLSAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSks
IHBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7Ci0KLSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaWYgKCFXZWJDb3JlOjp3
aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR1JlZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0
a19maWxlX2Nob29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxlIiwKLSAgICAgICAgR1RLX1dJTkRP
VyhwYXJlbnQpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZFLCAiU2F2ZSIsICJDYW5jZWwi
KSk7Ci0KLSAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdUS19GSUxFX0NIT09TRVIoZGlh
bG9nLmdldCgpKTsKLSAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9kb19vdmVyd3JpdGVfY29uZmly
bWF0aW9uKGNob29zZXIsIFRSVUUpOwotCi0gICAgLy8gU29tZSBpbnNwZWN0b3Igdmlld3MgKEF1
ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2NoZW1lLCBzdWNoCi0gICAgLy8g
YXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0aGUgVVJMIGJlaW5nIGEgdmFs
aWQgZmlsZTovLy8gVVJMCi0gICAgLy8gdW5mb3J0dW5hdGVseS4KLSAgICBVUkwgdXJsKFVSTCgp
LCBzdWdnZXN0ZWRVUkwpOwotICAgIC8vIFN0cmlwIGxlYWRpbmcgLyBjaGFyYWN0ZXIuCi0gICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29zZXIsIHVybC5wYXRoKCkuc3Vi
c3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKGd0a19uYXRpdmVfZGlhbG9nX3J1
bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBHVEtfUkVTUE9OU0VfQUNDRVBU
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YVZlY3RvcjsKLSAgICBD
U3RyaW5nIGRhdGFTdHJpbmc7Ci0gICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFzZTY0VmFsaWRhdGVQYWRkaW5n
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YVZlY3Rvci5zaHJpbmtUb0ZpdCgp
OwotICAgIH0gZWxzZQotICAgICAgICBkYXRhU3RyaW5nID0gY29udGVudC51dGY4KCk7Ci0KLSAg
ICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmRh
dGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOwotICAgIHNpemVfdCBkYXRhTGVuZ3RoID0gIWRhdGFT
dHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDogZGF0YVZlY3Rvci5zaXplKCk7
Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dl
dF9maWxlKGNob29zZXIpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9w
YXRoKGZpbGUuZ2V0KCkpKTsKLSAgICBnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19hc3luYyhmaWxl
LmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxzZSwKLSAgICAgICAgR19GSUxF
X0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBmaWxlUmVwbGFjZUNvbnRlbnRz
Q2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotewotICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUF0dGFjaEF2YWlsYWJpbGl0eSgqdGhpcywg
YXZhaWxhYmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDkwZjBlNmYzMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0SW5z
cGVjdG9yV2luZG93LmgiCi0KLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1
ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1zdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRv
dyB7Ci0gICAgR3RrV2luZG93IHBhcmVudDsKLQotICAgIEd0a1dpZGdldCogaGVhZGVyQmFyOwot
fTsKLQotc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyB7Ci0gICAgR3RrV2luZG93
Q2xhc3MgcGFyZW50OwotfTsKLQotR19ERUZJTkVfVFlQRShXZWJLaXRJbnNwZWN0b3JXaW5kb3cs
IHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93LCBHVEtfVFlQRV9XSU5ET1cpCi0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2NsYXNzX2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93
Q2xhc3MqKQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19pbml0
KFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93KQotewotICAgIHdpbmRvdy0+aGVhZGVyQmFy
ID0gZ3RrX2hlYWRlcl9iYXJfbmV3KCk7Ci0gICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3RpdGxlKEdU
S19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgXygiV2ViIEluc3BlY3RvciIpKTsKLSAg
ICBndGtfaGVhZGVyX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0b24oR1RLX0hFQURFUl9CQVIod2lu
ZG93LT5oZWFkZXJCYXIpLCBUUlVFKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZWJhcihHVEtf
V0lORE9XKHdpbmRvdyksIHdpbmRvdy0+aGVhZGVyQmFyKTsKLSAgICBndGtfd2lkZ2V0X3Nob3co
d2luZG93LT5oZWFkZXJCYXIpOwotfQotCi1HdGtXaWRnZXQqIHdlYmtpdEluc3BlY3RvcldpbmRv
d05ldyhHdGtXaW5kb3cqIHBhcmVudCkKLXsKLSAgICByZXR1cm4gR1RLX1dJREdFVChnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgInR5cGUiLCBHVEtfV0lORE9XX1RP
UExFVkVMLCAidHJhbnNpZW50LWZvciIsIHBhcmVudCwKLSAgICAgICAgImRlZmF1bHQtd2lkdGgi
LCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCAiZGVmYXVsdC1oZWlnaHQi
LCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCwgbnVsbHB0cikpOwotfQot
Ci12b2lkIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdlYktpdEluc3BlY3Rvcldp
bmRvdyogd2luZG93LCBjb25zdCBjaGFyKiBzdWJ0aXRsZSkKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKHdpbmRvdykpOwotCi0gICAgZ3RrX2hlYWRl
cl9iYXJfc2V0X3N1YnRpdGxlKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgc3Vi
dGl0bGUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktp
dEluc3BlY3RvcldpbmRvdy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdElu
c3BlY3RvcldpbmRvdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmRjMjhkMTA5
Zi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdElu
c3BlY3RvcldpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQ
RV9JTlNQRUNUT1JfV0lORE9XICAgICAgICAgICAgKHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2dl
dF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RP
Ul9XSU5ET1csIFdlYktpdEluc3BlY3RvcldpbmRvdykpCi0jZGVmaW5lIFdFQktJVF9JU19JTlNQ
RUNUT1JfV0lORE9XKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVD
VE9SX1dJTkRPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dD
bGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9X
SU5ET1cpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPV19HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1Jf
V0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRJbnNwZWN0b3JXaW5kb3cgV2ViS2l0SW5zcGVjdG9yV2luZG93OwotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzIFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNz
OwotCi1HVHlwZSB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19nZXRfdHlwZSh2b2lkKTsKLQotR3Rr
V2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3RrV2luZG93KiBwYXJlbnQpOwotdm9p
ZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cq
LCBjb25zdCBjaGFyKiBzdWJ0aXRsZSk7Ci0KLUdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29n
bml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFy
Y2hHZXN0dXJlUmVjb2duaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmJh
Njk1ZTZiYS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
SW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNp
bXBvcnQgPFVJS2l0L1VJR2VzdHVyZVJlY29nbml6ZXIuaD4KLQotQGludGVyZmFjZSBXS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKLS0g
KENHUG9pbnQpbG9jYXRpb25JblZpZXc6KFVJVmlldyAqKXZpZXc7Ci1AZW5kCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
SW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwNjdmZTdiY2NkYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1t
CisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIu
aCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgPFVJS2l0L1VJR2VzdHVy
ZVJlY29nbml6ZXJTdWJjbGFzcy5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotCi1AaW1w
bGVtZW50YXRpb24gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIgewotICAg
IFJldGFpblB0cjxVSVRvdWNoPiBfdG91Y2g7Ci19Ci0KLS0gKENHUG9pbnQpbG9jYXRpb25JblZp
ZXc6KFVJVmlldyAqKXZpZXcKLXsKLSAgICByZXR1cm4gW190b3VjaCBsb2NhdGlvbkluVmlldzp2
aWV3XTsKLX0KLQotLSAodm9pZClfcHJvY2Vzc1RvdWNoZXM6KE5TU2V0ICopdG91Y2hlcyBzdGF0
ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKW5ld1N0YXRlCi17Ci0gICAgQVNTRVJUKF90b3Vj
aCk7Ci0gICAgaWYgKFt0b3VjaGVzIGNvbnRhaW5zT2JqZWN0Ol90b3VjaC5nZXQoKV0pCi0gICAg
ICAgIHNlbGYuc3RhdGUgPSBuZXdTdGF0ZTsKLX0KLQotLSAodm9pZCl0b3VjaGVzQmVnYW46KE5T
U2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIGlmIChzZWxm
LnN0YXRlICE9IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoIV90b3VjaCk7Ci0gICAgX3RvdWNoID0gW3RvdWNoZXMgYW55T2Jq
ZWN0XTsKLQotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZUJlZ2FuXTsKLX0KLQotLSAodm9pZCl0b3VjaGVzTW92ZWQ6KE5TU2V0
ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIFtzZWxmIF9wcm9j
ZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWRd
OwotfQotCi0tICh2b2lkKXRvdWNoZXNFbmRlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDoo
VUlFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3Rh
dGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWRdOwotfQotCi0tICh2b2lkKXRvdWNoZXND
YW5jZWxsZWQ6KE5TU2V0ICopdG91Y2hlcyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewot
ICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hlczp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZUNhbmNlbGxlZF07Ci19Ci0KLS0gKHZvaWQpcmVzZXQKLXsKLSAgICBfdG91Y2ggPSBu
aWw7Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRhYmRlYjVmNmQwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KKysrIC9kZXYv
bnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2ltcG9ydCAiUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNz
YWdlcy5oIgotI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkFjdGlvbi5oIgotI2ltcG9ydCAi
V0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0j
aW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0j
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2Vy
dGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0
ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9CYXNlNjQuaD4KLQotQGludGVyZmFjZSBXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5
T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlckRlbGVnYXRlPiB7Ci0gICAgV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eSogX2luc3BlY3RvclByb3h5OwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3Rv
clByb3h5OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eU9iakNBZGFwdGVyCi0KLS0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93IHdpbGxQ
b3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJlY3QKLXsK
LSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCBf
aW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJveHktPnNo
ZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAgIHJldHVybiByZWN0OwotfQotCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF9pbnNwZWN0b3JQcm94eSA9IGlu
c3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgX2luc3BlY3RvclByb3h5LT5jbG9z
ZUZyb21DcmFzaCgpOwotfQotCi0tIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVj
dG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3
Q29udHJvbGxlcgotewotICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCk7
Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6d2ViVmlldygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5nZXQoKS53ZWJWaWV3OwotfQotCi1XZWJQ
YWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1JlbW90
ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6dGhpc10pOwotCi0gICAgbV9pbnNwZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTpudWxs
cHRyXSk7Ci0gICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTptX29iakNBZGFw
dGVyLmdldCgpXTsKLQotICAgIG1fd2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZy
b250ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0aW9uVGFy
Z2V0VHlwZTo6UmVtb3RlKTsKLSAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRl
ci5nZXQoKV07Ci0gICAgW21fd2luZG93IHNldEZyYW1lQXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVX
ZWJJbnNwZWN0b3JXaW5kb3dGcmFtZSJdOwotCi0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IG1f
d2luZG93LmdldCgpLmNvbnRlbnRWaWV3OwotICAgIFt3ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVu
dFZpZXcuYm91bmRzXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3Vidmlldzp3ZWJWaWV3KCldOwot
Ci0gICAgcmV0dXJuIHdlYlZpZXcoKS0+X3BhZ2UuZ2V0KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewot
ICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICBbbV93aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsK
LSAgICAgICAgW21fd2luZG93IGNsb3NlXTsKLSAgICAgICAgbV93aW5kb3cgPSBuaWw7Ci0gICAg
fQotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlldykgewotICAgICAgICBbbV9pbnNwZWN0b3JWaWV3
LmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldyA9IG5pbDsK
LSAgICB9Ci0KLSAgICBpZiAobV9vYmpDQWRhcHRlcikKLSAgICAgICAgbV9vYmpDQWRhcHRlciA9
IG5pbDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0
YXRlKCkKLXsKLSAgICBbTlNXaW5kb3cgcmVtb3ZlRnJhbWVVc2luZ05hbWU6W21fd2luZG93IGZy
YW1lQXV0b3NhdmVOYW1lXV07Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBbbV93aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJv
bnQ6bmlsXTsKLSAgICBbbV93aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOndlYlZpZXcoKV07Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdl
Ykluc3BlY3RvclByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgp
KTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJM
TWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOwotICAgIGlmICghcGxhdGZvcm1VUkwpIHsKLSAg
ICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwot
ICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2Ug
Y2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4K
LSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcg
Y29udGVudENvcHkgPSBjb250ZW50OwotCi0gICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICph
Y3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgbV9zdWdn
ZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKLQot
ICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91
dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2
NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
UmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKLSAgICAgICAgICAg
IFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJM
IGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExd
OwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJl
bW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwg
bV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0gICAgfTsKLQotICAgIGlmICghZm9yY2VT
YXZlRGlhbG9nKSB7Ci0gICAgICAgIHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2
ZVBhbmVsXTsKLSAgICBwYW5lbC5uYW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxh
c3RQYXRoQ29tcG9uZW50OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFs
cmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBhbmQKLSAgICAvLyBjYW4gcHJvdmlkZSBh
IGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAg
IC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGlu
IHRoZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKLSAgICAgICAgcGFu
ZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBv
bmVudF07Ci0KLSAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0
KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9L
KTsKLSAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7Ci0gICAgfTsKLQotICAgIE5TV2luZG93
ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107
Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRv
dzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgLy8gRklYTUU6IFNoYXJl
IHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCi0KLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5p
c0VtcHR5KCkpOwotICAgIAotICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdn
ZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBEbyBub3QgYXBw
ZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBp
biBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxVUkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5T
RmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1Rv
VVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsKLSAgICBbaGFuZGxlIHNlZWtUb0VuZE9m
RmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbaGFuZGxlIGNsb3NlRmlsZV07Ci0KLSAgICBX
ZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOwotICAg
IGluc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgaW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9zaGVldFJl
Y3QgPSByZWN0OwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0
YXJ0V2luZG93RHJhZygpCi17Ci0gICAgd2ViVmlldygpLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFn
KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbkluTmV3
VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3Nw
YWNlXSBvcGVuVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOnVybF1dOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBBU1NFUlQoIWNlcnRpZmljYXRlSW5m
by5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4gY2VydGlm
aWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGluaXRdKTsK
LQotICAgIEFTU0VSVChtX3dpbmRvdyk7Ci0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElP
TikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2luZG93Lmdl
dCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dEluZm86bnVs
bHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93R3JvdXA6WUVTXTsKLSNlbHNl
Ci0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQo
KSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxw
dHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hh
aW4oKSBzaG93R3JvdXA6WUVTXTsKLSNlbmRpZgotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxl
ZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBj
ZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5kLgotICAgIFNGQ2VydGlmaWNh
dGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZp
ZXddOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107Ci0gICAgW2Nl
cnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3
IHNldERpc3BsYXlEZXRhaWxzOllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxz
RGlzY2xvc2VkOllFU107Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGJkMDhmZjlkNC4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8d3RmL05ha2VkUHRyLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLU9CSkNfQ0xBU1MgV0tX
ZWJWaWV3OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLX0KLQot
QHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKLQotTlNfQVNTVU1F
X05PTk5VTExfQkVHSU4KLQotQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIDog
TlNPYmplY3QKLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXcgKndl
YlZpZXc7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aElu
c3BlY3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PilpbnNwZWN0ZWRQYWdl
OwotCi0rIChCT09MKXZpZXdJc0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZpZXc7Ci0KLUBl
bmQKLQotQHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmpl
Y3Q+Ci1Ab3B0aW9uYWwKLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JE
aWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9s
bGVyOwotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0
OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci0t
ICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
ICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKilu
ZXdXaW5kb3c7Ci0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93
OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci1A
ZW5kCi0KLU5TX0FTU1VNRV9OT05OVUxMX0VORAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDkyNjNlMGZkNmUu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiQVBJTmF2aWdhdGlvbi5o
IgotI2ltcG9ydCAiVmVyc2lvbkNoZWNrcy5oIgotI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIKLSNp
bXBvcnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rp
b24uaCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRlLmgiCi0jaW1wb3J0ICJXS09wZW5Q
YW5lbFBhcmFtZXRlcnMuaCIKLSNpbXBvcnQgIldLUHJlZmVyZW5jZXNQcml2YXRlLmgiCi0jaW1w
b3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZh
dGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgiCi0jaW1wb3J0
ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2lt
cG9ydCAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIK
LSNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgotCi1AaW50ZXJmYWNlIFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgKCkgPFdLVUlEZWxlZ2F0ZSwgV0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLSW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyIHsKLSAgICBOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4g
X2luc3BlY3RlZFBhZ2U7Ci0gICAgUmV0YWluUHRyPFdLSW5zcGVjdG9yV0tXZWJWaWV3PiBfd2Vi
VmlldzsKLSAgICBXZWFrT2JqQ1B0cjxpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVn
YXRlPj4gX2RlbGVnYXRlOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQ
YWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4paW5zcGVjdGVkUGFnZQotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
Ly8gVGhlIChsb2NhbCkgaW5zcGVjdGVkIHBhZ2UgaXMgbmlsIGlmIHRoZSBjb250cm9sbGVyIGlz
IGhvc3RpbmcgYSBSZW1vdGUgV2ViIEluc3BlY3RvciB2aWV3LgotICAgIF9pbnNwZWN0ZWRQYWdl
ID0gaW5zcGVjdGVkUGFnZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBpZiAoX3dlYlZpZXcpIHsKLSAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdh
dGU6bmlsXTsKLSAgICAgICAgW193ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpuaWxdOwot
ICAgICAgICBbX3dlYlZpZXcgc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6bmlsXTsKLSAg
ICAgICAgX3dlYlZpZXcgPSBuaWw7Ci0gICAgfQotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQot
Ci0tIChpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0ZQotewot
ICAgIHJldHVybiBfZGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKFdLV2ViVmll
dyAqKXdlYlZpZXcKLXsKLSAgICAvLyBDb25zdHJ1Y3QgbGF6aWx5IHNvIHRoZSBjbGllbnQgY2Fu
IHNldCB0aGUgZGVsZWdhdGUgYmVmb3JlIHRoZSBXZWJWaWV3IGlzIGNyZWF0ZWQuCi0gICAgaWYg
KCFfd2ViVmlldykgewotICAgICAgICBOU1JlY3QgaW5pdGlhbEZyYW1lID0gTlNNYWtlUmVjdCgw
LCAwLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGgsIFdlYktp
dDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQpOwotICAgICAgICBfd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvcldLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTppbml0aWFsRnJhbWUgY29uZmlndXJhdGlvbjpbc2VsZiBjb25maWd1cmF0aW9uXV0pOwotICAg
ICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3IHNl
dE5hdmlnYXRpb25EZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3IHNldEluc3BlY3Rv
cldLV2ViVmlld0RlbGVnYXRlOnNlbGZdOwotICAgICAgICBbX3dlYlZpZXcgX3NldEF1dG9tYXRp
Y2FsbHlBZGp1c3RzQ29udGVudEluc2V0czpOT107Ci0gICAgICAgIFtfd2ViVmlldyBfc2V0VXNl
U3lzdGVtQXBwZWFyYW5jZTpZRVNdOwotICAgICAgICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5n
TWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gX3dlYlZpZXcuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpc2V0RGVsZWdhdGU6KGlk
IDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgX2Rl
bGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0gKFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25m
aWd1cmF0aW9uCi17Ci0gICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLQotICAgIFdLUHJlZmVyZW5jZXMgKnByZWZl
cmVuY2VzID0gY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJlbmNlczsKLSAgICBwcmVmZXJlbmNl
cy5fYWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzID0gWUVTOwotICAgIFtjb25maWd1cmF0aW9u
IF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNdOwotICAgIHByZWZlcmVu
Y2VzLl9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lBbGxv
d0FsbDsKLSAgICBwcmVmZXJlbmNlcy5famF2YVNjcmlwdFJ1bnRpbWVGbGFncyA9IDA7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIg
SW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAg
IHByZWZlcmVuY2VzLl9kZXZlbG9wZXJFeHRyYXNFbmFibGVkID0gWUVTOwotICAgIHByZWZlcmVu
Y2VzLl9sb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCA9IFlFUzsKLSNlbmRp
ZgotCi0gICAgcHJlZmVyZW5jZXMuX2RpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCA9IFlFUzsKLQot
ICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDopXSkgewot
ICAgICAgICBpZiAoW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rvcklz
VW5kZXJUZXN0OnNlbGZdKSB7Ci0gICAgICAgICAgICBwcmVmZXJlbmNlcy5faGlkZGVuUGFnZURP
TVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBOTzsKLSAgICAgICAgICAgIHByZWZlcmVuY2VzLl9w
YWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCA9IE5POwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgW2NvbmZpZ3VyYXRpb24gc2V0UHJvY2Vzc1Bvb2w6d3JhcHBlcihX
ZWJLaXQ6Omluc3BlY3RvclByb2Nlc3NQb29sKFdlYktpdDo6aW5zcGVjdG9yTGV2ZWxGb3JQYWdl
KF9pbnNwZWN0ZWRQYWdlKSkpXTsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0R3JvdXBJZGVudGlm
aWVyOldlYktpdDo6aW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoX2luc3BlY3Rl
ZFBhZ2UpXTsKLQotICAgIHJldHVybiBjb25maWd1cmF0aW9uLmF1dG9yZWxlYXNlKCk7Ci19Ci0K
LSsgKEJPT0wpdmlld0lzSW5zcGVjdG9yV2ViVmlldzooTlNWaWV3ICopdmlldwotewotICAgIHJl
dHVybiBbdmlldyBpc0tpbmRPZkNsYXNzOltXS0luc3BlY3RvcldLV2ViVmlldyBjbGFzc11dOwot
fQotCi0vLyBNQVJLOiBXS1VJRGVsZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShDR1JlY3QpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgaWYgKCFfd2ViVmlldy5n
ZXQoKS53aW5kb3cpCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENHUmVjdFplcm8pOwotICAg
IGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTlNSZWN0VG9DR1JlY3QoW3dlYlZpZXcg
ZnJhbWVdKSk7Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2V0
V2luZG93RnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIGlmICghX3dlYlZpZXcuZ2V0KCkud2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3dlYlZpZXcuZ2V0KCkud2luZG93IHNldEZy
YW1lOk5TUmVjdEZyb21DR1JlY3QoZnJhbWUpIGRpc3BsYXk6WUVTXTsKLX0KLQotLSAodm9pZCl3
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOihX
S09wZW5QYW5lbFBhcmFtZXRlcnMgKilwYXJhbWV0ZXJzIGluaXRpYXRlZEJ5RnJhbWU6KFdLRnJh
bWVJbmZvICopZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNVUkwg
Kj4gKlVSTHMpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgTlNPcGVuUGFuZWwgKm9wZW5QYW5l
bCA9IFtOU09wZW5QYW5lbCBvcGVuUGFuZWxdOwotICAgIG9wZW5QYW5lbC5hbGxvd3NNdWx0aXBs
ZVNlbGVjdGlvbiA9IHBhcmFtZXRlcnMuYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb247Ci0KLSAgICBh
dXRvIHJlcG9ydFNlbGVjdGVkRmlsZXMgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKLSAgICAgICAg
aWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSykKLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKG9wZW5QYW5lbC5VUkxzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIobmlsKTsKLSAgICB9OwotCi0gICAgaWYgKF93ZWJWaWV3LmdldCgpLndpbmRv
dykKLSAgICAgICAgW29wZW5QYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6X3dlYlZpZXcu
Z2V0KCkud2luZG93IGNvbXBsZXRpb25IYW5kbGVyOnJlcG9ydFNlbGVjdGVkRmlsZXNdOwotICAg
IGVsc2UKLSAgICAgICAgcmVwb3J0U2VsZWN0ZWRGaWxlcyhbb3BlblBhbmVsIHJ1bk1vZGFsXSk7
Ci19Ci0KLS0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlRGF0YWJh
c2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOihXS1NlY3VyaXR5T3JpZ2luICopc2VjdXJpdHlPcmln
aW4gY3VycmVudFF1b3RhOih1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudFF1b3RhIGN1cnJlbnRP
cmlnaW5Vc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRPcmlnaW5Vc2FnZSBjdXJyZW50
RGF0YWJhc2VVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRVc2FnZSBleHBlY3RlZFVz
YWdlOih1bnNpZ25lZCBsb25nIGxvbmcpZXhwZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6KHZv
aWQgKF4pKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkpZGVjaXNpb25IYW5kbGVyCi17Ci0g
ICAgZGVjaXNpb25IYW5kbGVyKHN0ZDo6bWF4PHVuc2lnbmVkIGxvbmcgbG9uZz4oZXhwZWN0ZWRV
c2FnZSwgY3VycmVudFVzYWdlICogMS4yNSkpOwotfQotCi0tIChOU01lbnUgKilfd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBjb250ZXh0TWVudTooTlNNZW51ICopbWVudSBmb3JFbGVtZW50
OihfV0tDb250ZXh0TWVudUVsZW1lbnRJbmZvICopZWxlbWVudAotewotICAgIGZvciAoTlNJbnRl
Z2VyIGkgPSBtZW51Lm51bWJlck9mSXRlbXMgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBO
U01lbnVJdGVtICppdGVtID0gW21lbnUgaXRlbUF0SW5kZXg6aV07Ci0gICAgICAgIHN3aXRjaCAo
aXRlbS50YWcpIHsKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0lu
TmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUlu
TmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUlu
TmV3V2luZG93OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVVy
bFRvQ2xpcGJvYXJkOgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFn
ZVRvQ2xpcGJvYXJkOgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2Fk
TGlua1RvRGlzazoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZElt
YWdlVG9EaXNrOgotICAgICAgICAgICAgW21lbnUgcmVtb3ZlSXRlbUF0SW5kZXg6aV07Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtZW51OwotfQot
Ci0vLyBNQVJLOiBXS05hdmlnYXRpb25EZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZvaWQpd2ViVmll
d1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlOihXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0g
ICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOildKQotICAgICAg
ICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6c2Vs
Zl07Ci19Ci0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uOihXS05hdmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0
aW9uIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KSlk
ZWNpc2lvbkhhbmRsZXIKLXsKLSAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdh
dGUgYW55d2hlcmUuCi0gICAgaWYgKCFuYXZpZ2F0aW9uQWN0aW9uLnRhcmdldEZyYW1lLmlzTWFp
bkZyYW1lKSB7Ci0gICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xp
Y3lBbGxvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5n
IG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKG5hdmlnYXRpb25BY3Rpb24ucmVxdWVz
dC5VUkwpKSB7Ci0gICAgICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xp
Y3lBbGxvdyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2ZXJ5
dGhpbmcgZWxzZS4KLSAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5
Q2FuY2VsKTsKLSAgICAKLSAgICAvLyBBbmQgaW5zdGVhZCBsb2FkIGl0IGluIHRoZSBpbnNwZWN0
ZWQgcGFnZS4KLSAgICBpZiAoX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIF9pbnNwZWN0ZWRQYWdl
LT5sb2FkUmVxdWVzdChuYXZpZ2F0aW9uQWN0aW9uLnJlcXVlc3QpOwotfQotCi0vLyBNQVJLOiBX
S0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIG1ldGhvZHMKLQotLSAodm9pZClpbnNwZWN0b3JX
S1dlYlZpZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlm
ICghX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIE9wdGlvblNldDxXZWJD
b3JlOjpSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlvbnM7Ci0gICAgaWYgKFdlYktpdDo6bGlua2Vk
T25PckFmdGVyKFdlYktpdDo6U0RLVmVyc2lvbjo6Rmlyc3RXaXRoRXhwaXJlZE9ubHlSZWxvYWRC
ZWhhdmlvcikpCi0gICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFdlYkNvcmU6OlJlbG9hZE9wdGlv
bjo6RXhwaXJlZE9ubHkpOwotCi0gICAgX2luc3BlY3RlZFBhZ2UtPnJlbG9hZChyZWxvYWRPcHRp
b25zKTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihX
S0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoIV9pbnNwZWN0ZWRQYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBfaW5zcGVjdGVkUGFnZS0+cmVsb2FkKFdlYkNvcmU6
OlJlbG9hZE9wdGlvbjo6RnJvbU9yaWdpbik7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJW
aWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNX
aW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVyOndpbGxN
b3ZlVG9XaW5kb3c6KV0pCi0gICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXI6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dpbmRvd107Ci19Ci0KLS0gKHZvaWQpaW5zcGVj
dG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZp
ZXcKLXsKLSAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OildKQot
ICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93
OnNlbGZdOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTdlNzdjZmU3Zi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotQHByb3RvY29s
IFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JX
S1dlYlZpZXcgOiBXS1dlYlZpZXcKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJ
bnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4gaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci1A
ZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlCi1AcmVxdWlyZWQK
LS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAq
KXdlYlZpZXc7Ci0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdL
SW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3
OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5k
b3cgKiluZXdXaW5kb3c7Ci0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRv
dzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3OwotQGVuZAotCi0jZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5z
cGVjdG9yV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVj
dG9yV0tXZWJWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmZlZjRhMDFi
YS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVj
dG9yV0tXZWJWaWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCIK
LQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgi
Ci0jaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KLQotQGltcGxlbWVudGF0aW9uIFdLSW5zcGVj
dG9yV0tXZWJWaWV3IHsKLSAgICBXZWFrT2JqQ1B0cjxpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdE
ZWxlZ2F0ZT4+IF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTsKLX0KLQotLSAoTlNSZWN0KV9v
cGFxdWVSZWN0Rm9yV2luZG93TW92ZVdoZW5JblRpdGxlYmFyCi17Ci0gICAgLy8gVGhpcyBjb252
aW5jZXMgQXBwS2l0IHRvIGFsbG93IHdpbmRvdyBtb3ZlcyB3aGVuIGNsaWNraW5nIGFueXdoZXJl
IGluIHRoZSB0aXRsZWJhciAodG9wIDIycHQpCi0gICAgLy8gd2hlbiB0aGlzIHZpZXcncyBjb250
ZW50cyBjb3ZlciB0aGUgZW50aXJlIHdpbmRvdydzIGNvbnRlbnRzLCBpbmNsdWRpbmcgdGhlIHRp
dGxlYmFyLgotICAgIHJldHVybiBOU1plcm9SZWN0OwotfQotCi0tIChOU0ludGVnZXIpdGFnCi17
Ci0gICAgcmV0dXJuIFdLSW5zcGVjdG9yVmlld1RhZzsKLX0KLQotLSAoaWQgPFdLSW5zcGVjdG9y
V0tXZWJWaWV3RGVsZWdhdGU+KWluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlCi17Ci0gICAgcmV0
dXJuIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKLX0KLQot
LSAodm9pZClzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTooaWQgPFdLSW5zcGVjdG9yV0tX
ZWJWaWV3RGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgX2luc3BlY3RvcldLV2ViVmlld0RlbGVn
YXRlID0gZGVsZWdhdGU7Ci19Ci0KLS0gKElCQWN0aW9uKXJlbG9hZDooaWQpc2VuZGVyCi17Ci0g
ICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVs
b2FkOnNlbGZdOwotfQotCi0tIChJQkFjdGlvbilyZWxvYWRGcm9tT3JpZ2luOihpZClzZW5kZXIK
LXsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZp
ZXdSZWxvYWRGcm9tT3JpZ2luOnNlbGZdOwotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRvV2lu
ZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIFtzdXBlciB2aWV3V2lsbE1vdmVUb1dp
bmRvdzpuZXdXaW5kb3ddOwotICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGlu
c3BlY3RvcldLV2ViVmlldzpzZWxmIHdpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKLX0KLQot
LSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Ci17Ci0gICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9X
aW5kb3ddOwotICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldL
V2ViVmlld0RpZE1vdmVUb1dpbmRvdzpzZWxmXTsKLX0KLQotQGVuZAotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlNzI4ZDQzNWMuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDgwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpZiBQTEFURk9S
TShNQUMpCi0KLSNpbXBvcnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgotI2ltcG9ydCAiV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tWaWV3SW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JVSU1lc3Nh
Z2VzLmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5o
IgotI2ltcG9ydCAiX1dLSW5zcGVjdG9ySW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3Rv
cldpbmRvdy5oIgotI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVBhbmVs
Lmg+Ci0jaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlVmlldy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJp
bmdzLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotc3RhdGljIGNvbnN0IE5TVUlu
dGVnZXIgd2luZG93U3R5bGVNYXNrID0gTlNXaW5kb3dTdHlsZU1hc2tUaXRsZWQgfCBOU1dpbmRv
d1N0eWxlTWFza0Nsb3NhYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tNaW5pYXR1cml6YWJsZSB8IE5T
V2luZG93U3R5bGVNYXNrUmVzaXphYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tGdWxsU2l6ZUNvbnRl
bnRWaWV3OwotCi0vLyBUaGUgdGltZSB3ZSBrZWVwIG91ciBXZWJWaWV3IGFsaXZlIGJlZm9yZSBj
bG9zaW5nIGl0IGFuZCBpdHMgcHJvY2Vzcy4KLS8vIFJldXNpbmcgdGhlIFdlYlZpZXcgaW1wcm92
ZXMgc3RhcnQgdXAgdGltZSBmb3IgcGVvcGxlIHRoYXQganVtcCBpbiBhbmQgb3V0IG9mIHRoZSBJ
bnNwZWN0b3IuCi1zdGF0aWMgY29uc3QgU2Vjb25kcyB3ZWJWaWV3Q2xvc2VUaW1lb3V0IHsgMV9t
aW4gfTsKLQotc3RhdGljIHZvaWQqIGtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0
ID0gJmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0OwotCi1AaW50ZXJmYWNlIFdL
V2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciAoKSA8TlNXaW5kb3dEZWxlZ2F0ZSwgV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhX
ZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJv
eHk7Ci0tICh2b2lkKWludmFsaWRhdGU7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLV2Vi
SW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciB7Ci0gICAgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eSogX2luc3BlY3RvclByb3h5OwotfQotCi0tIChXS0luc3BlY3RvclJlZilpbnNwZWN0b3JSZWYK
LXsKLSAgICByZXR1cm4gdG9BUEkoX2luc3BlY3RvclByb3h5KTsKLX0KLQotLSAoX1dLSW5zcGVj
dG9yICopaW5zcGVjdG9yCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0
dXJuIHdyYXBwZXIoKl9pbnNwZWN0b3JQcm94eSk7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVj
dG9yUHJveHkqKWluc3BlY3RvclByb3h5Ci17Ci0gICAgQVNTRVJUX0FSRyhpbnNwZWN0b3JQcm94
eSwgaW5zcGVjdG9yUHJveHkpOwotCi0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBVbnJldGFpbmVkIHRvIGF2b2lkIGEgcmVmZXJl
bmNlIGN5Y2xlLgotICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpaW52YWxpZGF0ZQotewotICAgIF9pbnNwZWN0b3JQ
cm94eSA9IG51bGxwdHI7Ci19Ci0KLS0gKE5TUmVjdCl3aW5kb3c6KE5TV2luZG93ICopd2luZG93
IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVzaW5nUmVjdDooTlNSZWN0KXJl
Y3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICByZXR1cm4gTlNNYWtlUmVj
dCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdodCgpLCBfaW5zcGVjdG9yUHJv
eHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAgIHJldHVybiByZWN0OwotfQotCi0tICh2
b2lkKXdpbmRvd0RpZE1vdmU6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFt
ZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZFJlc2l6ZTooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBf
aW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpd2lu
ZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChf
aW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKLX0KLQot
LSAodm9pZCl3aW5kb3dEaWRFbnRlckZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclBy
b3h5LT53aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlk
RXhpdEZ1bGxTY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGdWxsU2Ny
ZWVuRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIC8vIFJlc2l6aW5nIHRoZSB2
aWV3cyB3aGlsZSBpbnNpZGUgdGhpcyBub3RpZmljYXRpb24gY2FuIGxlYWQgdG8gYmFkIHJlc3Vs
dHMgd2hlbiBlbnRlcmluZwotICAgIC8vIG9yIGV4aXRpbmcgZnVsbCBzY3JlZW4uIFRvIGF2b2lk
IHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIHRoZSB3b3JrIGFmdGVyIGEgZGVsYXkuIFdlIG9ubHkK
LSAgICAvLyBkZXBlbmQgb24gdGhpcyBmb3IgZW5mb3JjaW5nIHRoZSBoZWlnaHQgY29uc3RyYWlu
dHMsIHNvIGEgc21hbGwgZGVsYXkgaXNuJ3QgdGVycmlibGUuIE1vc3QKLSAgICAvLyBvZiB0aGUg
dGltZSB0aGUgdmlld3Mgd2lsbCBhbHJlYWR5IGhhdmUgdGhlIGNvcnJlY3QgZnJhbWVzIGJlY2F1
c2Ugb2YgYXV0b3Jlc2l6aW5nIG1hc2tzLgotCi0gICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hf
VElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChfaW5z
cGVjdG9yUHJveHkpCi0gICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZSgpOwotICAgIH0pOwotfQotCi0tICh2b2lkKW9ic2VydmVWYWx1ZUZvcktl
eVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNE
aWN0aW9uYXJ5PE5TS2V5VmFsdWVDaGFuZ2VLZXksIGlkPiAqKWNoYW5nZSBjb250ZXh0Oih2b2lk
ICopY29udGV4dAotewotICAgIGlmIChjb250ZXh0ICE9IGtXaW5kb3dDb250ZW50TGF5b3V0T2Jz
ZXJ2ZXJDb250ZXh0KSB7Ci0gICAgICAgIFtzdXBlciBvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOmtl
eVBhdGggb2ZPYmplY3Q6b2JqZWN0IGNoYW5nZTpjaGFuZ2UgY29udGV4dDpjb250ZXh0XTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBvYmplY3Q7Ci0g
ICAgQVNTRVJUKFt3aW5kb3cgaXNLaW5kT2ZDbGFzczpbTlNXaW5kb3cgY2xhc3NdXSk7Ci0gICAg
aWYgKHdpbmRvdy5pbkxpdmVSZXNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRpc3BhdGNo
X2FmdGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewot
ICAgICAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICAgICAgX2luc3BlY3RvclByb3h5
LT5pbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB9KTsKLX0KLQotLy8gTUFSSzog
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIG1ldGhvZHMKLQotLSAodm9pZClpbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3RvclBy
b3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotLSAo
Qk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICByZXR1
cm4gX2luc3BlY3RvclByb3h5ID8gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpIDogZmFs
c2U7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6KFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3aWxsTW92ZVRvV2luZG93OihO
U1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAg
IF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhpbnNwZWN0b3JW
aWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRvdyk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilp
bnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAg
ICAgIF9pbnNwZWN0b3JQcm94eS0+YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhpbnNwZWN0b3JW
aWV3Q29udHJvbGxlci53ZWJWaWV3LndpbmRvdyk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YXR0YWNobWVudFZpZXdEaWRDaGFuZ2UoTlNWaWV3ICpvbGRWaWV3LCBOU1ZpZXcgKm5ld1Zp
ZXcpCi17Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24gb2JqZWN0Om9sZFZpZXddOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBzZWxlY3RvcjpAc2Vs
ZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikgbmFtZTpOU1ZpZXdGcmFtZURpZENo
YW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmV3Vmlld107Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVk
KQotICAgICAgICBhdHRhY2gobV9hdHRhY2htZW50U2lkZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRv
dykKLXsKLSAgICBpZiAobV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0KSB7Ci0gICAgICAg
IG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9IGZhbHNlOwotICAgICAgICBbb2xkV2lu
ZG93IHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRl
bnRMYXlvdXRSZWN0IiBjb250ZXh0OmtXaW5kb3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0
XTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnREaWRNb3Zl
VG9XaW5kb3coTlNXaW5kb3cgKm5ld1dpbmRvdykKLXsKLSAgICBpZiAobV9pc0F0dGFjaGVkICYm
ICEhbmV3V2luZG93KSB7Ci0gICAgICAgIG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVjdCA9
IHRydWU7Ci0gICAgICAgIFtuZXdXaW5kb3cgYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQo
KSBmb3JLZXlQYXRoOkAiY29udGVudExheW91dFJlY3QiIG9wdGlvbnM6MCBjb250ZXh0OmtXaW5k
b3dDb250ZW50TGF5b3V0T2JzZXJ2ZXJDb250ZXh0XTsKLSAgICAgICAgaW5zcGVjdGVkVmlld0Zy
YW1lRGlkQ2hhbmdlKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRh
dGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luc3BlY3Rvcldp
bmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgbGV2ZWwgPSBpbnNwZWN0aW9u
TGV2ZWwoKTsKLSAgICBpZiAobGV2ZWwgPiAxKSB7Ci0gICAgICAgIE5TU3RyaW5nICpkZWJ1Z1Rp
dGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3Bl
Y3RvciBbJWRdIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSB3aGVuIGluc3Bl
Y3RpbmcgV2ViIEluc3BlY3RvciIpLCBsZXZlbCwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOwot
ICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0VGl0bGU6ZGVidWdUaXRsZV07Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgTlNTdHJpbmcgKnRpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6V0VCX1VJX1NUUklORygiV2ViIEluc3BlY3RvciDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3
aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5nICopbV91cmxTdHJpbmddOwotICAgICAgICBbbV9pbnNw
ZWN0b3JXaW5kb3cgc2V0VGl0bGU6dGl0bGVdOwotICAgIH0KLX0KLQotUmV0YWluUHRyPE5TV2lu
ZG93PiBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNSZWN0IHNhdmVk
V2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlIHRhcmdldFR5cGUpCi17Ci0gICAgTlNS
ZWN0IHdpbmRvd0ZyYW1lID0gIU5TSXNFbXB0eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkgPyBzYXZl
ZFdpbmRvd0ZyYW1lIDogTlNNYWtlUmVjdCgwLCAwLCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRp
YWxXaW5kb3dIZWlnaHQpOwotICAgIGF1dG8gd2luZG93ID0gYWRvcHROUyhbW19XS0luc3BlY3Rv
cldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dGcmFtZSBzdHlsZU1hc2s6
d2luZG93U3R5bGVNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT10p
OwotICAgIFt3aW5kb3cgc2V0TWluU2l6ZTpOU01ha2VTaXplKG1pbmltdW1XaW5kb3dXaWR0aCwg
bWluaW11bVdpbmRvd0hlaWdodCldOwotICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2Vk
Ok5PXTsKLSAgICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xsZWN0
aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuUHJpbWFy
eSldOwotCi0gICAgYm9vbCBmb3JSZW1vdGVUYXJnZXQgPSB0YXJnZXRUeXBlID09IEluc3BlY3Rp
b25UYXJnZXRUeXBlOjpSZW1vdGU7Ci0gICAgW3dpbmRvdyBzZXRGb3JSZW1vdGVUYXJnZXQ6Zm9y
UmVtb3RlVGFyZ2V0XTsKLQotICAgIENHRmxvYXQgYXBwcm94aW1hdGVseUhhbGZTY3JlZW5TaXpl
ID0gKFt3aW5kb3cgc2NyZWVuXS5mcmFtZS5zaXplLndpZHRoIC8gMikgLSA0OwotICAgIENHRmxv
YXQgbWluaW11bUZ1bGxTY3JlZW5XaWR0aCA9IHN0ZDo6bWF4PENHRmxvYXQ+KDYzNiwgYXBwcm94
aW1hdGVseUhhbGZTY3JlZW5TaXplKTsKLSAgICBbd2luZG93IHNldE1pbkZ1bGxTY3JlZW5Db250
ZW50U2l6ZTpOU01ha2VTaXplKG1pbmltdW1GdWxsU2NyZWVuV2lkdGgsIG1pbmltdW1XaW5kb3dI
ZWlnaHQpXTsKLSAgICBbd2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjooW3dpbmRvdyBjb2xs
ZWN0aW9uQmVoYXZpb3JdIHwgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3JGdWxsU2NyZWVuQWxs
b3dzVGlsaW5nKV07Ci0KLSAgICBbd2luZG93IHNldFRpdGxlYmFyQXBwZWFyc1RyYW5zcGFyZW50
OllFU107Ci0KLSAgICAvLyBDZW50ZXIgdGhlIHdpbmRvdyBpZiB0aGUgc2F2ZWQgZnJhbWUgd2Fz
IGVtcHR5LgotICAgIGlmIChOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93RnJhbWUpKQotICAgICAg
ICBbd2luZG93IGNlbnRlcl07Ci0KLSAgICByZXR1cm4gd2luZG93OwotfQotCi1XZWJQYWdlUHJv
eHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0g
ICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UoKSk7Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvclBhZ2Up
OwotCi0gICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0g
ICAgaWYgKG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fb2Jq
Q0FkYXB0ZXIpOwotICAgICAgICByZXR1cm4gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld10tPl9wYWdlLmdldCgpOwotICAgIH0KLQotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5T
KFtbV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0aFdlYkluc3Bl
Y3RvclByb3h5OnRoaXNdKTsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQ
YWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVj
dG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0Zy
YW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDppbnNwZWN0ZWRWaWV3XTsKLQotICAgIG1f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOmluc3BlY3RlZFBhZ2UoKV0pOwotICAg
IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0
ZXIuZ2V0KCldOwotCi0gICAgV2ViUGFnZVByb3h5ICppbnNwZWN0b3JQYWdlID0gW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLmdldCgpOwotICAgIEFTU0VSVChpbnNw
ZWN0b3JQYWdlKTsKLQotICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBBU1NF
UlQoIW1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIE5TU3RyaW5nICpzYXZlZFdpbmRvd0ZyYW1l
U3RyaW5nID0gaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLmluc3Bl
Y3RvcldpbmRvd0ZyYW1lKCk7Ci0gICAgTlNSZWN0IHNhdmVkV2luZG93RnJhbWUgPSBOU1JlY3RG
cm9tU3RyaW5nKHNhdmVkV2luZG93RnJhbWVTdHJpbmcpOwotCi0gICAgbV9pbnNwZWN0b3JXaW5k
b3cgPSBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRXaW5kb3coc2F2ZWRXaW5kb3dG
cmFtZSwgSW5zcGVjdGlvblRhcmdldFR5cGU6OkxvY2FsKTsKLSAgICBbbV9pbnNwZWN0b3JXaW5k
b3cgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBXS1dlYlZpZXcgKmlu
c3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsKLSAgICBO
U1ZpZXcgKmNvbnRlbnRWaWV3ID0gW21faW5zcGVjdG9yV2luZG93IGNvbnRlbnRWaWV3XTsKLSAg
ICBpbnNwZWN0b3JWaWV3LmZyYW1lID0gW2NvbnRlbnRWaWV3IGJvdW5kc107Ci0gICAgW2NvbnRl
bnRWaWV3IGFkZFN1YnZpZXc6aW5zcGVjdG9yVmlld107Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JX
aW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5k
UGFnZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQgfHwgIW1faW5zcGVjdG9yV2luZG93
KTsKLQotICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAgIFttX2lu
c3BlY3RvclZpZXdDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIG1f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqQ0Fk
YXB0ZXIpIHsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgICAgICBbbV9vYmpDQWRh
cHRlciBpbnZhbGlkYXRlXTsKLSAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKLSAgICB9Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlU
aW1lckZpcmVkKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAg
ICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNl
dERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAg
ICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwotICAgIH0KLQotICAgIG1fY2xvc2VGcm9udGVu
ZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0YXJ0T25lU2hvdCh3ZWJWaWV3Q2xvc2VUaW1lb3V0KTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkK
LXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAg
ICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUludmFsaWRhdGUoKQotewotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRp
bWVyLnN0b3AoKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgaWYgKG1faXNBdHRhY2hlZCkgewot
ICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRE
ZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwotICAgICAg
ICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdl
R3JvdXAoKS5wcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICAv
LyBJZiB0aGUgV2ViIEluc3BlY3RvciBpcyBubyBsb25nZXIgaW4gdGhlIHNhbWUgd2luZG93IGFz
IHRoZSBpbnNwZWN0ZWQgdmlldywKLSAgICAvLyB0aGVuIHdlIG5lZWQgdG8gcmVvcGVuIHRoZSBJ
bnNwZWN0b3IgdG8gZ2V0IGl0IGF0dGFjaGVkIHRvIHRoZSByaWdodCB3aW5kb3cuCi0gICAgLy8g
VGhpcyBjYW4gaGFwcGVuIHdoZW4gZHJhZ2dpbmcgdGFicyB0byBhbm90aGVyIHdpbmRvdyBpbiBT
YWZhcmkuCi0gICAgaWYgKG1faXNBdHRhY2hlZCAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3ZWJWaWV3XS53aW5kb3cgIT0gaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpKSB7
Ci0gICAgICAgIG9wZW4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1F
IDxyZGFyOi8vcHJvYmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgYnJpbmcgYSBiYWNrZ3Jv
dW5kIHRhYiBpbiBTYWZhcmkgdG8gdGhlIGZyb250LCBvbmx5IGl0cyB3aW5kb3cuCi0gICAgW1tt
X2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtlS2V5QW5kT3JkZXJG
cm9udDpuaWxdOwotICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5k
b3cgbWFrZUZpcnN0UmVzcG9uZGVyOlttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXdd
XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBh
Z2VUb0Zyb250KCkKLXsKLSAgICBbaW5zcGVjdGVkUGFnZSgpLT5wbGF0Zm9ybVdpbmRvdygpIG1h
a2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtSXNGcm9udCgpCi17Ci0gICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4
PjogdGhpcyB3aWxsIG5vdCByZXR1cm4gZmFsc2UgZm9yIGEgYmFja2dyb3VuZCB0YWIgaW4gU2Fm
YXJpLCBvbmx5IGEgYmFja2dyb3VuZCB3aW5kb3cuCi0gICAgcmV0dXJuIG1faXNWaXNpYmxlICYm
IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdy5pc01haW5XaW5kb3c7
Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2Vi
UHJvY2Vzc0NhbkF0dGFjaCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0
ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgaWYgKFtXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyIHZpZXdJc0luc3BlY3RvcldlYlZpZXc6aW5zcGVjdGVkVmlld10pCi0g
ICAgICAgIHJldHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOwotCi0gICAgc3RhdGljIGNvbnN0IGZs
b2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQg
bWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1OwotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDUwMDsKLQotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3
RnJhbWUgPSBpbnNwZWN0ZWRWaWV3LmZyYW1lOwotCi0gICAgZmxvYXQgbWF4aW11bUF0dGFjaGVk
SGVpZ2h0ID0gTlNIZWlnaHQoaW5zcGVjdGVkVmlld0ZyYW1lKSAqIG1heGltdW1BdHRhY2hlZEhl
aWdodFJhdGlvOwotICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gbWF4aW11bUF0
dGFjaGVkSGVpZ2h0ICYmIG1pbmltdW1BdHRhY2hlZFdpZHRoIDw9IE5TV2lkdGgoaW5zcGVjdGVk
Vmlld0ZyYW1lKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQotewotICAgIC8vIERvIG5vdGhpbmcu
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBtX3VybFN0cmluZyA9IHVybFN0cmlu
ZzsKLQotICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5m
byYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIEFTU0VSVCghY2VydGlmaWNhdGVJbmZvLmlzRW1w
dHkoKSk7Ci0KLSAgICBSZXRhaW5QdHI8U0ZDZXJ0aWZpY2F0ZVBhbmVsPiBjZXJ0aWZpY2F0ZVBh
bmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNhdGVQYW5lbCBhbGxvY10gaW5pdF0pOwotCi0gICAg
TlNXaW5kb3cgKndpbmRvdzsKLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHdp
bmRvdyA9IG1faW5zcGVjdG9yV2luZG93LmdldCgpOwotICAgIGVsc2UKLSAgICAgICAgd2luZG93
ID0gW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddIHdpbmRvd107Ci0KLSAgICBp
ZiAoIXdpbmRvdykKLSAgICAgICAgd2luZG93ID0gW05TQXBwIGtleVdpbmRvd107Ci0KLSNpZiBI
QVZFKFNFQ19UUlVTVF9TRVJJQUxJWkFUSU9OKQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2lu
U2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5V
TEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3QoKSBzaG93
R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldp
bmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0
SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0
aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMgbXVz
dCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwgYmVj
YXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KLSAgICBT
RkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwgY2Vy
dGlmaWNhdGVWaWV3XTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZRVNd
OwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFibGVUcnVzdDpOT107Ci0gICAgW2NlcnRp
ZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcg
c2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBB
U1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIE5TVVJMICpwbGF0Zm9y
bVVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7
Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkgewotICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOnN1Z2dlc3RlZFVSTF07Ci0gICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29u
ZmlybSBuZXcgZmlsZW5hbWVzIGJlZm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgotICAgICAgICBm
b3JjZVNhdmVEaWFsb2cgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQocGxhdGZvcm1V
UkwpOwotICAgIGlmICghcGxhdGZvcm1VUkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE5l
Y2Vzc2FyeSBmb3IgdGhlIGJsb2NrIGJlbG93LgotICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5
ID0gc3VnZ2VzdGVkVVJMOwotICAgIFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7Ci0KLSAg
ICBhdXRvIHNhdmVUb1VSTCA9IF4oTlNVUkwgKmFjdHVhbFVSTCkgewotICAgICAgICBBU1NFUlQo
YWN0dWFsVVJMKTsKLQotICAgICAgICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdn
ZXN0ZWRVUkxDb3B5LCBhY3R1YWxVUkwpOwotCi0gICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7
Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKCFiYXNlNjRE
ZWNvZGUoY29udGVudENvcHksIG91dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVu
dCA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5n
dGg6b3V0LnNpemUoKV0pOwotICAgICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0
dWFsVVJMIGF0b21pY2FsbHk6WUVTXTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBbY29u
dGVudENvcHkgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmcgZXJyb3I6TlVMTF07Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVh
bFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLSAg
ICB9OwotCi0gICAgaWYgKCFmb3JjZVNhdmVEaWFsb2cpIHsKLSAgICAgICAgc2F2ZVRvVVJMKHBs
YXRmb3JtVVJMKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TU2F2ZVBhbmVsICpw
YW5lbCA9IFtOU1NhdmVQYW5lbCBzYXZlUGFuZWxdOwotICAgIHBhbmVsLm5hbWVGaWVsZFN0cmlu
Z1ZhbHVlID0gcGxhdGZvcm1VUkwubGFzdFBhdGhDb21wb25lbnQ7Ci0KLSAgICAvLyBJZiB3ZSBo
YXZlIGEgZmlsZSBVUkwgd2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFu
ZAotICAgIC8vIGNhbiBwcm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNl
LCB1c2UgdGhlIHN5c3RlbSdzCi0gICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRp
YWwgZGlyZWN0b3J5IHRvIHNob3cgaW4gdGhlIGRpYWxvZy4KLSAgICBpZiAocGxhdGZvcm1VUkwu
aXNGaWxlVVJMKQotICAgICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJM
QnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKLQotICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXIgPSBeKE5TSW50ZWdlciByZXN1bHQpIHsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFs
UmVzcG9uc2VDYW5jZWwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spOwotICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsK
LSAgICB9OwotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IG1faW5zcGVjdG9yV2luZG93ID8gbV9p
bnNwZWN0b3JXaW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5V2luZG93XTsKLSAgICBpZiAod2luZG93
KQotICAgICAgICBbcGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2luZG93OndpbmRvdyBjb21wbGV0
aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgZWxzZQotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9kYWxdKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCkKLXsKLSAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAg
IAotICAgIFJldGFpblB0cjxOU1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5nZXQoc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUg
dXNlciBoYXMgYWxyZWFkeSBjb25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCi0gICAg
aWYgKCFhY3R1YWxVUkwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TRmlsZUhhbmRsZSAqaGFu
ZGxlID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5n
ZXQoKSBlcnJvcjpOVUxMXTsKLSAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0gICAgW2hh
bmRsZSB3cml0ZURhdGE6W2NvbnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddXTsKLSAgICBbaGFuZGxlIGNsb3NlRmlsZV07Ci0KLSAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1
YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCkKLXsKLSAg
ICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7Ci0gICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAgICBB
U1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAhbV9p
c1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBO
U1N0cmluZyAqZnJhbWVTdHJpbmcgPSBOU1N0cmluZ0Zyb21SZWN0KFttX2luc3BlY3RvcldpbmRv
dyBmcmFtZV0pOwotICAgIGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMo
KS5zZXRJbnNwZWN0b3JXaW5kb3dGcmFtZShmcmFtZVN0cmluZyk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKQotewotICAgIEFTU0VSVCgh
bV9pc0F0dGFjaGVkKTsKLSAgICBBU1NFUlQobV9pc1Zpc2libGUpOwotICAgIEFTU0VSVChtX2lu
c3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8
fCAhbV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF0dGFjaEF2YWls
YWJpbGl0eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsgICAgCi19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShDR0Zs
b2F0IGN1cnJlbnREaW1lbnNpb24pCi17Ci0gICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX2lzQXR0YWNoZWQpIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIGF0dGFjaCBhdmFpbGFiaWxpdHkgY2hhbmdlZC4gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUg
aW4gY2FzZQotICAgICAgICAvLyB0aGUgYXR0YWNobWVudCB2aWV3IGlzIG5vdCB0aGUgV0tWaWV3
LgotICAgICAgICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNh
bkF0dGFjaCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWluc3BlY3Rl
ZFBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0g
aW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFdLV2ViVmll
dyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOwot
Ci0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7Ci0g
ICAgTlNSZWN0IG9sZEluc3BlY3RvclZpZXdGcmFtZSA9IGluc3BlY3RvclZpZXcuZnJhbWU7Ci0g
ICAgTlNSZWN0IG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TWmVyb1JlY3Q7Ci0gICAgTlNSZWN0
IHBhcmVudEJvdW5kcyA9IGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kczsKLSAgICBDR0Zs
b2F0IGluc3BlY3RlZFZpZXdUb3AgPSBOU01heFkoaW5zcGVjdGVkVmlld0ZyYW1lKTsKLQotICAg
IHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJv
dHRvbTogewotICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCi0gICAgICAgICAgICBjdXJy
ZW50RGltZW5zaW9uID0gTlNIZWlnaHQob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAg
ICBDR0Zsb2F0IHBhcmVudEhlaWdodCA9IE5TSGVpZ2h0KHBhcmVudEJvdW5kcyk7Ci0gICAgICAg
IENHRmxvYXQgaW5zcGVjdG9ySGVpZ2h0ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6
Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRI
ZWlnaHQpOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGlu
c3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuCi0gICAgICAgIGlu
c3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgaW5zcGVjdG9ySGVpZ2h0LCBOU1dpZHRo
KHBhcmVudEJvdW5kcyksIGluc3BlY3RlZFZpZXdUb3AgLSBpbnNwZWN0b3JIZWlnaHQpOwotICAg
ICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lkdGgoaW5z
cGVjdGVkVmlld0ZyYW1lKSwgaW5zcGVjdG9ySGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6IHsKLSAgICAgICAgaWYgKCFjdXJy
ZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TV2lkdGgob2xk
SW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudFdpZHRoID0gTlNX
aWR0aChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvcldpZHRoID0gSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRo
KGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0
aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFy
aSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKLSAgICAgICAgLy8gdG9wIHBvc2l0aW9u
IGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBzdHJldGNoIGFz
IHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUg
PSBOU01ha2VSZWN0KDAsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIGluc3BlY3Rl
ZFZpZXdUb3ApOwotICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01ha2VSZWN0KHBh
cmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChw
YXJlbnRCb3VuZHMpKTsKLQotICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9
IGluc3BlY3RvclZpZXcud2luZG93KSB7Ci0gICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91
dFJlY3QgPSBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2lu
ZG93LmNvbnRlbnRMYXlvdXRSZWN0IGZyb21WaWV3Om5pbF07Ci0gICAgICAgICAgICBuZXdJbnNw
ZWN0b3JWaWV3RnJhbWUgPSBOU0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1l
LCBjb250ZW50TGF5b3V0UmVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDogewotICAgICAgICBpZiAoIWN1cnJlbnRE
aW1lbnNpb24pCi0gICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNw
ZWN0b3JWaWV3RnJhbWUpOwotCi0gICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRo
KHBhcmVudEJvdW5kcyk7Ci0gICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3Vy
cmVudERpbWVuc2lvbiwgcGFyZW50V2lkdGgpOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0
b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0
aWxsIHdvcmsuIEJ1dCBkb24ndCB1c2UgdGhhdAotICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9y
IHRoZSBpbnNwZWN0b3IgdmlldyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lk
ZSBhcyB0aGUgaW5zcGVjdGVkIHZpZXcuCi0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5T
TWFrZVJlY3QoaW5zcGVjdG9yV2lkdGgsIDAsIHBhcmVudFdpZHRoIC0gaW5zcGVjdG9yV2lkdGgs
IGluc3BlY3RlZFZpZXdUb3ApOwotICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU01h
a2VSZWN0KDAsIDAsIGluc3BlY3RvcldpZHRoLCBOU0hlaWdodChwYXJlbnRCb3VuZHMpKTsKLQot
ICAgICAgICBpZiAoTlNXaW5kb3cgKmluc3BlY3RvcldpbmRvdyA9IGluc3BlY3RvclZpZXcud2lu
ZG93KSB7Ci0gICAgICAgICAgICBOU1JlY3QgY29udGVudExheW91dFJlY3QgPSBbaW5zcGVjdGVk
Vmlldy5zdXBlcnZpZXcgY29udmVydFJlY3Q6aW5zcGVjdG9yV2luZG93LmNvbnRlbnRMYXlvdXRS
ZWN0IGZyb21WaWV3Om5pbF07Ci0gICAgICAgICAgICBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBO
U0ludGVyc2VjdGlvblJlY3QobmV3SW5zcGVjdG9yVmlld0ZyYW1lLCBjb250ZW50TGF5b3V0UmVj
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIGlmIChO
U0VxdWFsUmVjdHMob2xkSW5zcGVjdG9yVmlld0ZyYW1lLCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUp
ICYmIE5TRXF1YWxSZWN0cyhbaW5zcGVjdGVkVmlldyBmcmFtZV0sIGluc3BlY3RlZFZpZXdGcmFt
ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgdG8g
bWFrZSBzdXJlIHRoZSBsYXllcnMgZm9yIGJvdGggdmlld3MgcmVzaXplIGluIHN5bmMuCi0gICAg
W2luc3BlY3RvclZpZXcud2luZG93IGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07Ci0K
LSAgICBbaW5zcGVjdG9yVmlldyBzZXRGcmFtZTpuZXdJbnNwZWN0b3JWaWV3RnJhbWVdOwotICAg
IFtpbnNwZWN0ZWRWaWV3IHNldEZyYW1lOmluc3BlY3RlZFZpZXdGcmFtZV07Ci19Ci0KLXVuc2ln
bmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCi17
Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JB
dHRhY2htZW50VmlldygpOwotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0
ZWRWaWV3IGZyYW1lXTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3Rl
ZFZpZXdSZWN0LnNpemUuaGVpZ2h0KTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVk
VmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBO
U1JlY3QgaW5zcGVjdGVkVmlld1JlY3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLndpZHRoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIE5T
VmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVu
dFZpZXcoKTsKLSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB3ZWJWaWV3XTsKLQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAg
ICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21faW5z
cGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0g
ICAgfQotCi0gICAgW2luc3BlY3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBD
R0Zsb2F0IGN1cnJlbnREaW1lbnNpb247Ci0gICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7
Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgotICAgICAgICBbaW5zcGVjdG9yVmll
dyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld01heFlNYXJn
aW5dOwotICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2Vz
KCkuaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01pblhNYXJnaW5dOwotICAgICAg
ICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9y
QXR0YWNoZWRXaWR0aCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpMZWZ0OgotICAgICAgICBbaW5zcGVjdG9yVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmll
d0hlaWdodFNpemFibGUgfCBOU1ZpZXdNYXhYTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVu
c2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hh
bmdlKGN1cnJlbnREaW1lbnNpb24pOwotCi0gICAgW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGFk
ZFN1YnZpZXc6aW5zcGVjdG9yVmlldyBwb3NpdGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVU
bzppbnNwZWN0ZWRWaWV3XTsKLSAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgbWFrZUZpcnN0UmVz
cG9uZGVyOmluc3BlY3RvclZpZXddOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybURldGFjaCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFn
ZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9y
VmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOwotCi0gICAgW2luc3Bl
Y3RvclZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBbaW5zcGVjdG9yVmlldyBzZXRB
dXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVd
OwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ugc2l6ZSB0aGUgaW5zcGVjdGVkIHZpZXcncyBm
cmFtZSBhZnRlciBkZXRhY2hpbmcgc28gdGhhdCBpdCB0YWtlcyB1cCB0aGUgc3BhY2UgdGhhdCB0
aGUKLSAgICAvLyBhdHRhY2hlZCBpbnNwZWN0b3IgdXNlZCB0by4gUHJlc2VydmUgdGhlIHRvcCBw
b3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwg
d29yay4KLQotICAgIGluc3BlY3RlZFZpZXcuZnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIE5TV2lk
dGgoaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcuYm91bmRzKSwgTlNNYXhZKGluc3BlY3RlZFZpZXcu
ZnJhbWUpKTsKLQotICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgbm90IHZpc2libGUuIFRo
aXMgbWVhbnMgdGhlIGluc3BlY3RvciB3YXMgY2xvc2VkIHdoaWxlIGF0dGFjaGVkCi0gICAgLy8g
YW5kIHdlIHNob3VsZCBub3QgY3JlYXRlIGFuZCBzaG93IHRoZSBpbnNwZWN0b3Igd2luZG93Lgot
ICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG9wZW4oKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZShoZWlnaHQpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQgd2lkdGgpCi17Ci0gICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSh3aWR0aCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBtX3NoZWV0UmVjdCA9IHJlY3Q7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBbbV9pbnNwZWN0b3JWaWV3Q29u
dHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOwotfQotCi1TdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQotewotICAgIE5TQnVuZGxlICpi
dW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5z
cGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxlIHBhdGhGb3JSZXNvdXJjZTpAIk1haW4iIG9m
VHlwZTpAImh0bWwiXTsKLSAgICBBU1NFUlQocGF0aCAmJiBwYXRoLmxlbmd0aCk7Ci0gICAgaWYg
KCFwYXRoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gW05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQot
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0gICAg
TlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5h
cHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVuZGxlKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QuaHRtbCBpbiBQcm9k
dWN0aW9uIGJ1aWxkcy4KLSAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291
cmNlOkAiVGVzdCIgb2ZUeXBlOkAiaHRtbCJdOwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBp
c0RpcmVjdG9yeTpOT10uYWJzb2x1dGVTdHJpbmc7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1
bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwot
ICAgIGlmICghYnVuZGxlKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmlu
ZyAqcGF0aCA9IGJ1bmRsZS5yZXNvdXJjZVBhdGg7Ci0gICAgQVNTRVJUKHBhdGggJiYgcGF0aC5s
ZW5ndGgpOwotCi0gICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVj
dG9yeTpZRVNdLmFic29sdXRlU3RyaW5nOwotfQotCi1zdGF0aWMgTlNEaWN0aW9uYXJ5ICpzeXN0
ZW1WZXJzaW9uUGxpc3QoKQotewotICAgIE5TU3RyaW5nICpzeXN0ZW1MaWJyYXJ5UGF0aCA9IFtO
U1NlYXJjaFBhdGhGb3JEaXJlY3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5T
U3lzdGVtRG9tYWluTWFzaywgWUVTKSBvYmplY3RBdEluZGV4OjBdOwotICAgIE5TU3RyaW5nICpz
eXN0ZW1WZXJzaW9uUGxpc3RQYXRoID0gW3N5c3RlbUxpYnJhcnlQYXRoIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAIkNvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0Il07Ci0g
ICAgTlNEaWN0aW9uYXJ5ICpzeXN0ZW1WZXJzaW9uSW5mbyA9IFtOU0RpY3Rpb25hcnkgZGljdGlv
bmFyeVdpdGhDb250ZW50c09mRmlsZTpzeXN0ZW1WZXJzaW9uUGxpc3RQYXRoXTsKLSAgICByZXR1
cm4gc3lzdGVtVmVyc2lvbkluZm87Ci19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0
b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgpCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpw
bGlzdCA9IHN5c3RlbVZlcnNpb25QbGlzdCgpOwotCi0gICAgRGVidWdnYWJsZUluZm9EYXRhIHJl
c3VsdDsKLSAgICByZXN1bHQuZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlOjpXZWJQYWdlOwotICAgIHJlc3VsdC50YXJnZXRQbGF0Zm9ybU5hbWUgPSAibWFjT1MiX3M7
Ci0gICAgcmVzdWx0LnRhcmdldEJ1aWxkVmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVjdEJ1aWxkVmVy
c2lvbiJdOwotICAgIHJlc3VsdC50YXJnZXRQcm9kdWN0VmVyc2lvbiA9IHBsaXN0W0AiUHJvZHVj
dFVzZXJWaXNpYmxlVmVyc2lvbiJdOwotICAgIHJlc3VsdC50YXJnZXRJc1NpbXVsYXRvciA9IGZh
bHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmYmVlNWNkZmYzOC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCi0jaW5jbHVkZSAi
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0g
ICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JD
bGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNw
ZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQotICAgICAgICA6IG1fcHJveHko
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQotICAgICAgICAsIG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0
aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkKLSAgICAgICAgLCBtX2RlYnVn
Z2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xp
ZW50KHRoaXMpOwotICAgIH0KLQotICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94eSgpCi0gICAgewot
ICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIG1fcHJveHktPmlu
dmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGxvYWQoKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1v
cmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KLSAgICAgICAgUmVmPEFQSTo6
RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3Jl
YXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7Ci0gICAgICAgIGRlYnVnZ2FibGVJbmZv
LT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVnZ2FibGVUeXBlKTsKLSAgICAgICAgbV9wcm94eS0+
bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENv
bW1hbmRzVVJMKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBt
X3Byb3h5LT5zaG93KCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9p
bnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFy
Z2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRl
bmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBS
ZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7Ci0gICAgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLSAgICBDb25uZWN0aW9uSUQgbV9jb25uZWN0aW9u
SUQ7Ci0gICAgVGFyZ2V0SUQgbV90YXJnZXRJRDsKLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlIG1fZGVidWdnYWJsZVR5cGU7Ci19OwotCi1SZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90
ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2
ZXIpCi0gICAgOiBtX29ic2VydmVyKG9ic2VydmVyKQotewotICAgIGlmICghdXJsLmhvc3QoKSB8
fCAhdXJsLnBvcnQoKSkgewotICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgaW5zcGVjdG9yIHVy
bDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb25JRCA9IGNvbm5lY3RJbmV0KHVybC5ob3N0KCkudXRmOCgp
LmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgpKTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbklEKSB7
Ci0gICAgICAgIExPR19FUlJPUigiSW5zcGVjdG9yIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0
byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKTsKLX0KLQotUmVtb3RlSW5zcGVj
dG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkKLXsKLX0KLQotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fY29ubmVjdGlv
bklELmhhc1ZhbHVlKCkpOwotICAgIGF1dG8gbWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKLSAgICBz
ZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2FnZS5sZW5ndGgoKSk7Ci19Ci0KLUhhc2hNYXA8U3Ry
aW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5k
bGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaXNwYXRjaE1hcCgpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFw
ID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPih7Ci0gICAgICAgIHsgIkJhY2tlbmRDb21t
YW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OnNldEJhY2tlbmRDb21tYW5kcykgfSwKLSAgICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgc3Rh
dGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExp
c3QpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8
Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCkgfSwKLSAgICB9KTsKLQotICAgIHJldHVybiBkaXNwYXRjaE1hcDsKLX0KLQotdm9pZCBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKQotewotICAgIGF1
dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGV2ZW50LT5zZXRTdHJpbmco
ImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JDbGllbnQiX3MpOwotICAgIHNlbmRXZWJJbnNwZWN0
b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3Rv
ckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgpCi17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0g
ICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVhcigpOwotICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlv
bkNsb3NlZCgqdGhpcyk7Ci0gICAgbV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7
Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpkaWRDbG9zZShDb25uZWN0aW9uSUQp
Ci17Ci0gICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewotICAgICAgICBjb25uZWN0aW9uQ2xv
c2VkKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6
OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0
YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZV0g
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMs
IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVUeXBlKTsKLSAgICB9KTsKLQotICAg
IGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+c2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzZXR1
cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRTdHJp
bmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOwotICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoImNv
bm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2Vy
KCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChzZXR1
cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LT5sb2FkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRv
QmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGF1dG8gYmFja2VuZEV2ZW50ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBiYWNrZW5kRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJT
ZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJj
b25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRJbnRl
Z2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5n
KCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKLSAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoYmFja2Vu
ZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0
YXJnZXRJRCkKLXsKLSAgICBhdXRvIGNsb3NlZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBjbG9zZWRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIkZyb250ZW5kRGlkQ2xv
c2UiX3MpOwotICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNv
bm5lY3Rpb25JRCk7Ci0gICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0
YXJnZXRJRCk7Ci0gICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KGNsb3NlZEV2ZW50LT50b0pTT05T
dHJpbmcoKSk7Ci0KLSAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFp
cihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICgh
ZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2ph
dmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVuY29kZShldmVudC5tZXNzYWdlLT51dGY4KCkpKTsK
LX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZl
bnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNz
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1
ZSgpLCBtZXNzYWdlVmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNz
YWdlQXJyYXkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRM
aXN0OwotICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OwotICAgICAgICBpZiAoIWl0ZW1WYWx1
ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBUYXJnZXQgdGFyZ2V0OwotICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRh
cmdldElEIl9zLCB0YXJnZXQuaWQpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3Ry
aW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5n
ZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0
LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7Ci0gICAgfQot
Ci0gICAgYXV0byBjb25uZWN0aW9uSUQgPSBldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKLQot
ICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCi0gICAgVmVjdG9yPFRh
cmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNw
ZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVj
dGlvbklEKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwotICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKLSAgICAgICAg
ICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFw
cGVuZChwYWlyLnNlY29uZCk7Ci0gICAgfQotICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJn
ZXRzVG9SZW1vdmUpCi0gICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFr
ZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLQotICAgIG1fdGFyZ2V0cy5zZXQoY29u
bmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKLSAgICBtX29ic2VydmVyLnRhcmdldExp
c3RDaGFuZ2VkKCp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKCFldmVudC5j
b25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdldElEIHx8ICFldmVudC5tZXNzYWdlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3Rk
OjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlvbklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZh
bHVlKCkpKTsKLSAgICBpZiAoIXByb3h5KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUxZDYzZGVhMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvUmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRGVidWdnYWJsZVR5cGUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ7Ci1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsKLQotY2xhc3MgUmVtb3Rl
SW5zcGVjdG9yT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgflJlbW90ZUluc3BlY3Rv
ck9ic2VydmVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90
ZUluc3BlY3RvckNsaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvbkNsb3Nl
ZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci19OwotCi11c2luZyBDb25uZWN0aW9uSUQg
PSBJbnNwZWN0b3I6OkNvbm5lY3Rpb25JRDsKLXVzaW5nIFRhcmdldElEID0gSW5zcGVjdG9yOjpU
YXJnZXRJRDsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIElu
c3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudCB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQoKTsKLXB1YmxpYzoKLSAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQoVVJM
LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYpOwotICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQo
KTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXBkYXRlIHRoZSBtZXNzYWdpbmcgcHJvdG9j
b2wgdG8gdXNlIERlYnVnZ2FibGVUeXBlIGluc3RlYWQgb2YgU3RyaW5nIGZvciB0aGUgdGFyZ2V0
IHR5cGUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NjA0NwotICAgIHN0cnVjdCBUYXJnZXQgewotICAgICAgICBUYXJnZXRJRCBpZDsKLSAgICAgICAg
U3RyaW5nIHR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcgdXJsOwot
ICAgIH07Ci0KLSAgICBjb25zdCBIYXNoTWFwPENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+
JiB0YXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9Ci0gICAgY29uc3QgU3RyaW5n
JiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VS
TDsgfQotCi0gICAgdm9pZCBpbnNwZWN0KENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIEluc3BlY3Rv
cjo6RGVidWdnYWJsZVR5cGUpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVj
dGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBjbG9zZUZyb21Gcm9u
dGVuZChDb25uZWN0aW9uSUQsIFRhcmdldElEKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PjsKLQotICAgIHZvaWQgc3Rh
cnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOwotICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZCgpOwot
Ci0gICAgdm9pZCBzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmKTsKLSAgICB2b2lkIHNldEJhY2tlbmRDb21tYW5k
cyhjb25zdCBFdmVudCYpOwotCi0gICAgdm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpIGZpbmFs
OwotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4mIGRpc3BhdGNoTWFwKCkgZmluYWw7
Ci0KLSAgICB2b2lkIHNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcmKTsKLQotICAg
IFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLSAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZl
ciYgbV9vYnNlcnZlcjsKLSAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY29ubmVjdGlvbklE
OwotICAgIEhhc2hNYXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOwot
ICAgIEhhc2hNYXA8c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1
ZV9wdHI8UmVtb3RlSW5zcGVjdG9yUHJveHk+PiBtX2luc3BlY3RvclByb3h5TWFwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0
L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDdiYzQ1NWQzZTYyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaCIKLQotI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiQVBJTG9hZGVyQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50V29y
bGQuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKLSNpbmNsdWRlICJXZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oIgotI2luY2x1ZGUgIldlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LWNsYXNzIFNjcmlwdE1lc3NhZ2VDbGllbnQgZmluYWwgOiBwdWJsaWMgV2ViU2NyaXB0TWVzc2Fn
ZUhhbmRsZXI6OkNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgU2NyaXB0TWVzc2FnZUNsaWVudChSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIm
IGluc3BlY3RvclByb3RvY29sSGFuZGxlcikKLSAgICAgICAgOiBtX2luc3BlY3RvclByb3RvY29s
SGFuZGxlcihpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpIHsgfQotCi0gICAgflNjcmlwdE1lc3Nh
Z2VDbGllbnQoKSB7IH0KLQotICAgIHZvaWQgZGlkUG9zdE1lc3NhZ2UoV2ViUGFnZVByb3h5JiBw
YWdlLCBGcmFtZUluZm9EYXRhJiYsIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2Vy
aWFsaXplZFNjcmlwdFZhbHVlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgYXV0byB0b2tlbnMg
PSBzZXJpYWxpemVkU2NyaXB0VmFsdWUudG9TdHJpbmcoKS5zcGxpdCgiOiIpOwotICAgICAgICBp
ZiAodG9rZW5zLnNpemUoKSAhPSAzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFVS
TCByZXF1ZXN0VVJMIHsgeyB9LCBwYWdlLnBhZ2VMb2FkU3RhdGUoKS51cmwoKSB9OwotICAgICAg
ICBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlci5pbnNwZWN0KHJlcXVlc3RVUkwuaG9zdEFuZFBv
cnQoKSwgdG9rZW5zWzBdLnRvVUludFN0cmljdCgpLCB0b2tlbnNbMV0udG9VSW50U3RyaWN0KCks
IHRva2Vuc1syXSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlbW90ZUluc3BlY3RvclByb3Rv
Y29sSGFuZGxlciYgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI7Ci19OwotCi1jbGFzcyBMb2Fk
ZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpMb2FkZXJDbGllbnQgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIExvYWRlckNsaWVudChGdW5jdGlvbjx2b2lk
KCk+JiYgbG9hZGVkQ2FsbGJhY2spCi0gICAgICAgIDogbV9sb2FkZWRDYWxsYmFjayB7IFdURk1v
dmUobG9hZGVkQ2FsbGJhY2spIH0geyB9Ci0KLSAgICB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFt
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIEFQSTo6TmF2
aWdhdGlvbiosIEFQSTo6T2JqZWN0KikgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fbG9hZGVkQ2Fs
bGJhY2soKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2xvYWRl
ZENhbGxiYWNrOwotfTsKLQotc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5
cGU+IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgZGVidWdnYWJs
ZVR5cGVTdHJpbmcpCi17Ci0gICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJqYXZhc2Ny
aXB0Il9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6SmF2YVNj
cmlwdDsKLSAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInBhZ2UiX3MpCi0gICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpQYWdlOwotICAgIGlmIChkZWJ1Z2dh
YmxlVHlwZVN0cmluZyA9PSAic2VydmljZS13b3JrZXIiX3MpCi0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpTZXJ2aWNlV29ya2VyOwotICAgIGlmIChkZWJ1Z2dhYmxl
VHlwZVN0cmluZyA9PSAid2ViLXBhZ2UiX3MpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRl
YnVnZ2FibGVUeXBlOjpXZWJQYWdlOwotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQot
dm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6Omluc3BlY3QoY29uc3QgU3RyaW5n
JiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0
SUQsIGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBhdXRvIGRlYnVnZ2FibGVUeXBlID0gcGFy
c2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmcodHlwZSk7Ci0gICAgaWYgKCFkZWJ1Z2dhYmxlVHlw
ZSkgewotICAgICAgICBMT0dfRVJST1IoIlVua25vd24gZGVidWdnYWJsZSB0eXBlOiBcIiVzXCIi
LCB0eXBlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KG1faW5zcGVjdG9yQ2xpZW50KQotICAgICAgICBtX2luc3BlY3RvckNsaWVudC0+aW5zcGVjdChj
b25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZS52YWx1ZSgpKTsKLX0KLQotdm9p
ZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnJ1blNjcmlwdChjb25zdCBTdHJpbmcm
IHNjcmlwdCkKLXsKLSAgICBtX3BhZ2UucnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHsgc2NyaXB0
LCBmYWxzZSwgV1RGOjpudWxsb3B0LCBmYWxzZSB9LCAKLSAgICAgICAgW10oQVBJOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWUqLCBPcHRpb25hbDxXZWJDb3JlOjpFeGNlcHRpb25EZXRhaWxzPiBleGNl
cHRpb25EZXRhaWxzLCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uRGV0YWlscykKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBydW5u
aW5nIHNjcmlwdCBcIiVzXCIiLCBleGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlLnV0ZjgoKS5kYXRh
KCkpOwotICAgIH0pOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6
dGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBjbGllbnQpCi17Ci0gICAg
U3RyaW5nQnVpbGRlciBodG1sOwotICAgIGlmIChjbGllbnQudGFyZ2V0cygpLmlzRW1wdHkoKSkK
LSAgICAgICAgaHRtbC5hcHBlbmQoIjxwPk5vIHRhcmdldHMgZm91bmQ8L3A+Il9zKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaHRtbC5hcHBlbmQoIjx0YWJsZT4iKTsKLSAgICAgICAgZm9yIChhdXRv
JiBjb25uZWN0aW9uSUQgOiBjbGllbnQudGFyZ2V0cygpLmtleXMoKSkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiB0YXJnZXQgOiBjbGllbnQudGFyZ2V0cygpLmdldChjb25uZWN0aW9uSUQpKSB7
Ci0gICAgICAgICAgICAgICAgaHRtbC5hcHBlbmQobWFrZVN0cmluZygKLSAgICAgICAgICAgICAg
ICAgICAgIjx0Ym9keT48dHI+IgotICAgICAgICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwiZGF0
YVwiPjxkaXYgY2xhc3M9XCJ0YXJnZXRuYW1lXCI+IiwgdGFyZ2V0Lm5hbWUsICI8L2Rpdj48ZGl2
IGNsYXNzPVwidGFyZ2V0dXJsXCI+IiwgdGFyZ2V0LnVybCwgIjwvZGl2PjwvdGQ+IgotICAgICAg
ICAgICAgICAgICAgICAiPHRkIGNsYXNzPVwiaW5wdXRcIj48aW5wdXQgdHlwZT1cImJ1dHRvblwi
IHZhbHVlPVwiSW5zcGVjdFwiIG9uY2xpY2s9XCJ3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy5pbnNwZWN0b3IucG9zdE1lc3NhZ2UoXFwnIiwgY29ubmVjdGlvbklELCAiOiIsIHRhcmdldC5p
ZCwgIjoiLCB0YXJnZXQudHlwZSwgIlxcJyk7XCI+PC90ZD4iCi0gICAgICAgICAgICAgICAgICAg
ICI8L3RyPjwvdGJvZHk+IgotICAgICAgICAgICAgICAgICkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGh0bWwuYXBwZW5kKCI8L3RhYmxlPiIpOwotICAgIH0KLSAgICBtX3Rh
cmdldExpc3RzSHRtbCA9IGh0bWwudG9TdHJpbmcoKTsKLSAgICBpZiAobV9wYWdlTG9hZGVkKQot
ICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyOjp1cGRhdGVUYXJnZXRMaXN0KCkKLXsKLSAgICBpZiAoIW1fdGFyZ2V0TGlz
dHNIdG1sLmlzRW1wdHkoKSkgewotICAgICAgICBydW5TY3JpcHQobWFrZVN0cmluZygidXBkYXRl
VGFyZ2V0cyhgIiwgbV90YXJnZXRMaXN0c0h0bWwsICJgKTsiKSk7Ci0gICAgICAgIG1fdGFyZ2V0
TGlzdHNIdG1sID0geyB9OwotICAgIH0KLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXI6OnBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYgcGFnZVByb3h5LCBXZWJV
UkxTY2hlbWVUYXNrJiB0YXNrKQotewotICAgIGF1dG8mIHJlcXVlc3RVUkwgPSB0YXNrLnJlcXVl
c3QoKS51cmwoKTsKLQotICAgIC8vIERlc3Ryb3kgdGhlIGNsaWVudCBiZWZvcmUgY3JlYXRpbmcg
YSBuZXcgY29ubmVjdGlvbiBzbyBpdCBjYW4gY29ubmVjdCB0byB0aGUgc2FtZSBwb3J0Ci0gICAg
bV9pbnNwZWN0b3JDbGllbnQgPSBudWxscHRyOwotICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbWFr
ZVVuaXF1ZTxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+KHJlcXVlc3RVUkwsICp0aGlzKTsKLQotICAg
IC8vIFNldHVwIHRhcmdldCBwb3N0TWVzc2FnZSBsaXN0ZW5lcgotICAgIGF1dG8gaGFuZGxlciA9
IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpjcmVhdGUobWFrZVVuaXF1ZTxTY3JpcHRNZXNzYWdl
Q2xpZW50PigqdGhpcyksICJpbnNwZWN0b3IiLCBBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1h
bFdvcmxkKCkpOwotICAgIHBhZ2VQcm94eS5wYWdlR3JvdXAoKS51c2VyQ29udGVudENvbnRyb2xs
ZXIoKS5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIoaGFuZGxlci5nZXQoKSk7Ci0KLSAgICAv
LyBTZXR1cCBsb2FkZXIgY2xpZW50IHRvIGdldCBub3RpZmllZCBvZiBwYWdlIGxvYWQKLSAgICBt
X3BhZ2Uuc2V0TG9hZGVyQ2xpZW50KG1ha2VVbmlxdWU8TG9hZGVyQ2xpZW50PihbdGhpc10gewot
ICAgICAgICBtX3BhZ2VMb2FkZWQgPSB0cnVlOwotICAgICAgICB1cGRhdGVUYXJnZXRMaXN0KCk7
Ci0gICAgfSkpOwotICAgIG1fcGFnZUxvYWRlZCA9IGZhbHNlOwotCi0gICAgU3RyaW5nQnVpbGRl
ciBodG1sQnVpbGRlcjsKLSAgICBodG1sQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICI8aHRtbD48
aGVhZD48dGl0bGU+UmVtb3RlIEluc3BlY3RvcjwvdGl0bGU+IgotICAgICAgICAiPG1ldGEgaHR0
cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRm
LThcIiAvPiIKLSAgICAgICAgIjxzdHlsZT4iCi0gICAgICAgICIgIGgxIHsgY29sb3I6ICNiYWJk
YjY7IHRleHQtc2hhZG93OiAwIDFweCAwIHdoaXRlOyBtYXJnaW4tYm90dG9tOiAwOyB9IgotICAg
ICAgICAiICBodG1sIHsgZm9udC1mYW1pbHk6IC13ZWJraXQtc3lzdGVtLWZvbnQ7IGZvbnQtc2l6
ZTogMTFwdDsgY29sb3I6ICMyZTM0MzY7IHBhZGRpbmc6IDIwcHggMjBweCAwIDIwcHg7IGJhY2tn
cm91bmQtY29sb3I6ICNmNmY2ZjQ7ICIKLSAgICAgICAgIiAgICAgICAgIGJhY2tncm91bmQtaW1h
Z2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9y
LXN0b3AoMCwgI2VlZWVlYyksIGNvbG9yLXN0b3AoMSwgI2Y2ZjZmNCkpOyIKLSAgICAgICAgIiAg
ICAgICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSA1ZW07IGJhY2tncm91bmQtcmVwZWF0OiBuby1y
ZXBlYXQ7IH0iCi0gICAgICAgICIgIHRhYmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlci1jb2xsYXBz
ZTogY29sbGFwc2U7IHRhYmxlLWxheW91dDogZml4ZWQ7IH0iCi0gICAgICAgICIgIHRhYmxlLCB0
ZCB7IGJvcmRlcjogMXB4IHNvbGlkICNkM2Q3Y2Y7IGJvcmRlci1sZWZ0OiBub25lOyBib3JkZXIt
cmlnaHQ6IG5vbmU7IH0iCi0gICAgICAgICIgIHAgeyBtYXJnaW4tYm90dG9tOiAzMHB4OyB9Igot
ICAgICAgICAiICB0ZCB7IHBhZGRpbmc6IDE1cHg7IH0iCi0gICAgICAgICIgIHRkLmRhdGEgeyB3
aWR0aDogMjAwcHg7IH0iCi0gICAgICAgICIgIC50YXJnZXRuYW1lIHsgZm9udC13ZWlnaHQ6IGJv
bGQ7IG92ZXJmbG93OiBoaWRkZW47IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxvdzog
ZWxsaXBzaXM7IH0iCi0gICAgICAgICIgIC50YXJnZXR1cmwgeyBjb2xvcjogI2JhYmRiNjsgYmFj
a2dyb3VuZDogI2VlZTsgd29yZC13cmFwOiBicmVhay13b3JkOyBvdmVyZmxvdy13cmFwOiBicmVh
ay13b3JkOyB9IgotICAgICAgICAiICB0ZC5pbnB1dCB7IHdpZHRoOiA2NHB4OyB9IgotICAgICAg
ICAiICBpbnB1dCB7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiA4cHg7IH0iCi0gICAgICAgICI8L3N0
eWxlPiIKLSAgICAgICAgIjwvaGVhZD48Ym9keT48aDE+SW5zcGVjdGFibGUgdGFyZ2V0czwvaDE+
IgotICAgICAgICAiPGRpdiBpZD1cInRhcmdldGxpc3RcIj48cD5ObyB0YXJnZXRzIGZvdW5kPC9w
PjwvZGl2PjwvYm9keT4iCi0gICAgICAgICI8c2NyaXB0PiIKLSAgICAgICAgImZ1bmN0aW9uIHVw
ZGF0ZVRhcmdldHMoc3RyKSB7IgotICAgICAgICAgICAgImxldCB0YXJnZXREaXYgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0bGlzdCcpOyIKLSAgICAgICAgICAgICJ0YXJnZXREaXYu
aW5uZXJIVE1MID0gc3RyOyIKLSAgICAgICAgIn0iCi0gICAgICAgICI8L3NjcmlwdD4iKTsKLSAg
ICBodG1sQnVpbGRlci5hcHBlbmQoIjwvaHRtbD4iKTsKLQotICAgIGF1dG8gaHRtbCA9IGh0bWxC
dWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwotICAgIGF1dG8gZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGh0bWwuZGF0YSgpLCBodG1sLmxlbmd0aCgpKTsKLSAgICBSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L2h0bWwiX3MsIGh0bWwubGVuZ3RoKCksICJVVEYt
OCJfcyk7Ci0gICAgdGFzay5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOwotICAgIHRhc2su
ZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRhKSk7Ci0gICAgdGFzay5kaWRDb21wbGV0ZShSZXNv
dXJjZUVycm9yKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjYwMGVmZGVkNC4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAi
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxlci5o
IgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFVSTDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYlVSTFNjaGVtZVRhc2s7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3Rv
Y29sSGFuZGxlciBmaW5hbCA6IHB1YmxpYyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciwgcHVibGlj
IFdlYlVSTFNjaGVtZUhhbmRsZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyPiBjcmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihwYWdlKSk7IH0K
LQotICAgIHZvaWQgaW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9u
SUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpOwotCi1wcml2YXRlOgotICAgIFJlbW90
ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgICAgIDog
bV9wYWdlKHBhZ2UpIHsgfQotCi0gICAgLy8gUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKLSAgICB2
b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOwotICAg
IHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0K
LQotICAgIC8vIFdlYlVSTFNjaGVtZUhhbmRsZXIKLSAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNr
KFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbDsKLSAgICB2b2lkIHBsYXRm
b3JtU3RvcFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQot
ICAgIHZvaWQgcGxhdGZvcm1UYXNrQ29tcGxldGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7
IH0KLQotICAgIHZvaWQgdXBkYXRlVGFyZ2V0TGlzdCgpOwotCi0gICAgdm9pZCBydW5TY3JpcHQo
Y29uc3QgU3RyaW5nJik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xp
ZW50PiBtX2luc3BlY3RvckNsaWVudDsKLSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAgICBi
b29sIG1fcGFnZUxvYWRlZCB7IGZhbHNlIH07Ci0gICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNIdG1s
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzOTBjMmI5NGYyZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCi0KLSNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIExQQ1RTVFIgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IFRFWFQoIlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5UG9pbnRlciIpOwotY29uc3QgTFBDV1NUUiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNz
TmFtZSA9IEwiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7Ci0KLUxSRVNVTFQgQ0FMTEJB
Q0sgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSo+
KDo6R2V0UHJvcChod25kLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7Ci0K
LSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgcmV0dXJuIGNs
aWVudC0+c2l6ZUNoYW5nZSgpOwotICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAgIHJldHVybiBj
bGllbnQtPm9uQ2xvc2UoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwot
fQotCi1zdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNzKCkKLXsKLSAgICBzdGF0aWMgYm9v
bCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3Rl
cmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3
Y2V4OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwotICAgIHdjZXguc3R5
bGUgICAgICAgICAgPSAwOwotICAgIHdjZXgubHBmblduZFByb2MgICAgPSBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6V25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gMDsKLSAg
ICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9h
ZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOwotICAg
IHdjZXgubHBzek1lbnVOYW1lICAgPSAwOwotICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0g
MDsKLQotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotICAgIHJldHVybiA6
OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLUxSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNpemVDaGFuZ2UoKQotewotICAgIGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhh
bmRsZSwgJnJlY3QpOwotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlldy0+d2luZG93KCksIDAs
IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9t
IC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUxSRVNVTFQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9uQ2xvc2UoKQotewotICAgIDo6U2hvd1dpbmRvdyht
X2Zyb250ZW5kSGFuZGxlLCBTV19ISURFKTsKLSAgICBmcm9udGVuZERpZENsb3NlKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLVdlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBSZWZQdHI8V2ViUHJl
ZmVyZW5jZXM+IHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwg
IldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0gICAgcHJlZmVyZW5jZXMtPnNldEFsbG93RmlsZUFj
Y2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKLQotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAg
ICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAgICBwcmVm
ZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7
Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCA9IFdlYlBhZ2VH
cm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKG51bGxwdHIp
KTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9u
OjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3Bl
Y3RvclByb2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFnZShudWxscHRyKSkpOwotICAgIHBh
Z2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSk7Ci0gICAg
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkpOwotCi0gICAg
V2ViQ29yZTo6SW50UmVjdCByZWN0KDYwLCAyMDAsIDE1MDAsIDEwMDApOwotICAgIHJlZ2lzdGVy
V2luZG93Q2xhc3MoKTsKLSAgICBtX2Zyb250ZW5kSGFuZGxlID0gOjpDcmVhdGVXaW5kb3dFeCgw
LCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRP
VywKLSAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCksIDAsIDAsIDAsIDApOwotCi0gICAgOjpTZXRQcm9wKG1fZnJvbnRlbmRIYW5kbGUsIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0
aGlzKSk7Ci0gICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19TSE9XKTsKLQotICAg
IFJFQ1QgcjsKLSAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwgJnIpOwotICAg
IG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJhdGlvbiwgbV9mcm9u
dGVuZEhhbmRsZSk7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Ci12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
dGFydFdpbmRvd0RyYWcoKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvJikgeyB9Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250
ZW5kSGFuZGxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyZGVhYzk3MzE3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJB
UElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIK
LSNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgotI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0
aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2luLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5z
dGFuY2VIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rl
ci5oPgotI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2UuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRl
IDx3dGYvY2YvQ0ZVUkxFeHRyYXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IEwiV2Vi
SW5zcGVjdG9yUHJveHlQb2ludGVyIjsKLXN0YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3Rv
clByb3h5Q2xhc3NOYW1lID0gTCJXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKLQotc3RydWN0IElu
c3BlY3RlZFdpbmRvd0luZm8gewotICAgIGludCBsZWZ0OwotICAgIGludCB0b3A7Ci0gICAgaW50
IHZpZXdXaWR0aDsKLSAgICBpbnQgdmlld0hlaWdodDsKLSAgICBpbnQgcGFyZW50V2lkdGg7Ci0g
ICAgaW50IHBhcmVudEhlaWdodDsKLX07Ci0KLXN0YXRpYyBJbnNwZWN0ZWRXaW5kb3dJbmZvIGdl
dEluc3BlY3RlZFdpbmRvd0luZm8oSFdORCBpbnNwZWN0ZWRXaW5kb3csIEhXTkQgcGFyZW50V2lu
ZG93KQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QoaW5zcGVjdGVkV2lu
ZG93LCAmcmVjdCk7Ci0gICAgOjpNYXBXaW5kb3dQb2ludHMoaW5zcGVjdGVkV2luZG93LCBwYXJl
bnRXaW5kb3csIChMUFBPSU5UKSZyZWN0LCAyKTsKLQotICAgIFJFQ1QgcGFyZW50UmVjdDsKLSAg
ICA6OkdldENsaWVudFJlY3QocGFyZW50V2luZG93LCAmcGFyZW50UmVjdCk7Ci0gICAgcmV0dXJu
IHsgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcCwgcGFyZW50UmVjdC5yaWdodCAtIHBhcmVudFJlY3QubGVmdCwgcGFyZW50
UmVjdC5ib3R0b20gLSBwYXJlbnRSZWN0LnRvcCB9OwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNLCBM
UEFSQU0gbFBhcmFtKQotewotICAgIHN3aXRjaCAobXNnKSB7Ci0gICAgY2FzZSBXTV9XSU5ET1dQ
T1NDSEFOR0lORzogewotICAgICAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBhdXRvIHdpbmRvd1BvcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0lORE9X
UE9TKj4obFBhcmFtKTsKLQotICAgICAgICBpZiAod2luZG93UG9zLT5mbGFncyAmIFNXUF9OT1NJ
WkUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgSFdORCBwYXJlbnQgPSBHZXRQYXJl
bnQoaHduZCk7Ci0gICAgICAgIFJFQ1QgcGFyZW50UmVjdDsKLSAgICAgICAgR2V0Q2xpZW50UmVj
dChwYXJlbnQsICZwYXJlbnRSZWN0KTsKLQotICAgICAgICBSRUNUIGluc3BlY3RvclJlY3Q7Ci0g
ICAgICAgIEdldENsaWVudFJlY3QobV9pbnNwZWN0b3JWaWV3V2luZG93LCAmaW5zcGVjdG9yUmVj
dCk7Ci0KLSAgICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgICAgIGNhc2Ug
QXR0YWNobWVudFNpZGU6OkJvdHRvbTogewotICAgICAgICAgICAgdW5zaWduZWQgaW5zcGVjdG9y
SGVpZ2h0ID0gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWlu
ZWRBdHRhY2hlZFdpbmRvd0hlaWdodChpbnNwZWN0b3JSZWN0LmJvdHRvbSAtIGluc3BlY3RvclJl
Y3QudG9wLCB3aW5kb3dQb3MtPmN5KTsKLSAgICAgICAgICAgIHdpbmRvd1Bvcy0+Y3kgLT0gaW5z
cGVjdG9ySGVpZ2h0OwotICAgICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3
V2luZG93LCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdp
bmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVSKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0g
ICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnNwZWN0b3JXaWR0aCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChpbnNwZWN0b3JSZWN0LnJpZ2h0IC0gaW5z
cGVjdG9yUmVjdC5sZWZ0LCB3aW5kb3dQb3MtPmN4KTsKLSAgICAgICAgICAgIHdpbmRvd1Bvcy0+
Y3ggLT0gaW5zcGVjdG9yV2lkdGg7Ci0gICAgICAgICAgICA6OlNldFdpbmRvd1BvcyhtX2luc3Bl
Y3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCArIHdpbmRvd1Bvcy0+Y3gsIHdpbmRvd1Bv
cy0+eSwgaW5zcGVjdG9yV2lkdGgsIHdpbmRvd1Bvcy0+Y3ksIFNXUF9OT1pPUkRFUik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JQ
cm94eTo6d25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSByZWludGVycHJldF9j
YXN0PFdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQcm9wKGh3bmQsIFdlYkluc3BlY3RvclByb3h5
UG9pbnRlclByb3ApKTsKLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2UgV01fU0laRToKLSAg
ICAgICAgOjpTZXRXaW5kb3dQb3MoY2xpZW50LT5tX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIDAs
IDAsIExPV09SRChsUGFyYW0pLCBISVdPUkQobFBhcmFtKSwgU1dQX05PWk9SREVSKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAgY2xpZW50LT5jbG9zZSgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsK
LX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cmVnaXN0ZXJXaW5kb3dDbGFzcygpCi17Ci0g
ICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwotCi0gICAg
aWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0gICAgV05EQ0xBU1NFWCB3Y2V4
OwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwotICAgIHdjZXguc3R5bGUg
PSAwOwotICAgIHdjZXgubHBmblduZFByb2MgPSB3bmRQcm9jOwotICAgIHdjZXguY2JDbHNFeHRy
YSA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSA9IFdl
YkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0gICAgd2NleC5oSWNvbiA9IDA7Ci0gICAgd2NleC5o
Q3Vyc29yID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJyQmFja2dyb3Vu
ZCA9IDA7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgPSAwOwotICAgIHdjZXgubHBzekNsYXNzTmFt
ZSA9IFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lOwotICAgIHdjZXguaEljb25TbSA9IDA7Ci0g
ICAgcmV0dXJuIDo6UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQotc3RhdGljIHZvaWQgZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0
aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJl
ZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAg
IC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KLSAgICBBUEk6
OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNv
dXJjZUZyYW1lKCk7Ci0gICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWlu
RnJhbWUoKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNw
ZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50
SW5mbyk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLQotICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1
ZXN0KCk7Ci0KLSAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxl
LgotICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShy
ZXF1ZXN0LnVybCgpKSkgewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNl
IGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KLSAgICB0b0ltcGwobGlzdGVu
ZXJSZWYpLT5pZ25vcmUoKTsKLQotICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGlu
c3BlY3RlZCBwYWdlLgotICAgIHdlYkluc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxv
YWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJQcm9jZXNz
RGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIFdlYklu
c3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3Rv
clByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwotICAgIEFTU0VSVCh3ZWJJ
bnNwZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsK
LX0KLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotCi0gICAgYXV0byBw
cmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIs
ICJXZWJLaXQyLiIpOwotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAgICAvLyBBbGxvdyBk
ZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdp
dGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4
dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNU
b1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgcHJlZmVyZW5jZXMtPnNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0
SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7IH0pOwotICAgIGF1dG8gcGFnZUdyb3VwID0gV2ViUGFn
ZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoaW5zcGVj
dGVkUGFnZSgpKSk7Ci0gICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9v
bCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdGlvbkxldmVsKCkpKTsKLSAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOwotICAgIHBhZ2VD
b25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKLQotICAgIFdLUGFn
ZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAsIHRo
aXMgfSwKLSAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAgICAg
bnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAgIG51
bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxw
dHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8g
ZGlkQ29tbWl0TmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0
aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxw
dHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxwdHIs
IC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlk
Q2hhbmdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlCi0gICAgICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwgLy8g
Y29weVdlYkNyeXB0b01hc3RlcktleQotCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2
aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0
dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9Owot
Ci0gICAgUkVDVCByID0geyAwLCAwLCBzdGF0aWNfY2FzdDxMT05HPihpbml0aWFsV2luZG93V2lk
dGgpLCBzdGF0aWNfY2FzdDxMT05HPihpbml0aWFsV2luZG93SGVpZ2h0KSB9OwotICAgIGF1dG8g
cGFnZSA9IGluc3BlY3RlZFBhZ2UoKTsKLSAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cgPSBwYWdl
LT52aWV3V2lkZ2V0KCk7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gOjpHZXRQ
YXJlbnQobV9pbnNwZWN0ZWRWaWV3V2luZG93KTsKLSAgICBhdXRvIHZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7
Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gJnZpZXcubGVha1JlZigpOwotICAgIGF1dG8gaW5zcGVj
dG9yUGFnZSA9IG1faW5zcGVjdG9yVmlldy0+cGFnZSgpOwotICAgIG1faW5zcGVjdG9yVmlld1dp
bmRvdyA9IGluc3BlY3RvclBhZ2UtPnZpZXdXaWRnZXQoKTsKLSAgICBXS1BhZ2VTZXRQYWdlTmF2
aWdhdGlvbkNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJm5hdmlnYXRpb25DbGllbnQuYmFz
ZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgV2ViQ29y
ZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZp
ZXdXaW5kb3csIHRoaXMpOwotICAgIG1faW5zcGVjdG9yVmlldyA9IG51bGxwdHI7Ci0gICAgbV9p
bnNwZWN0b3JQYWdlID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3V2luZG93KSB7
Ci0gICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvclZpZXdXaW5kb3cpOwotICAgICAg
ICBtX2luc3BlY3RvclZpZXdXaW5kb3cgPSBudWxscHRyOwotICAgIH0KLSAgICBpZiAobV9pbnNw
ZWN0b3JEZXRhY2hXaW5kb3cpIHsKLSAgICAgICAgOjpSZW1vdmVQcm9wKG1faW5zcGVjdG9yRGV0
YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKTsKLSAgICAgICAgOjpEZXN0
cm95V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3cgPSBudWxscHRyOwotICAgIH0KLSAgICBtX2luc3BlY3RlZFZpZXdXaW5kb3cg
PSBudWxscHRyOwotICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyA9IG51bGxwdHI7Ci19
Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0jaWYg
VVNFKENGKQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZC
dW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJNYWlu
IiksIENGU1RSKCJodG1sIiksIENGU1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7Ci0gICAgcmV0dXJu
IENGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9
OwotI2VuZGlmCi19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBh
Z2VVUkwoKQotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxS
ZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRs
ZSgpLCBDRlNUUigiVGVzdCIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUki
KSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6
Omluc3BlY3RvckJhc2VVUkwoKQotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZWY+IGJhc2VVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6
OndlYktpdEJ1bmRsZSgpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSwgbnVsbHB0ciwgbnVsbHB0
cikpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhiYXNlVVJMUmVmLmdldCgpKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5z
cGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIC8vIEZJWE1FIDxo
dHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1
bCBkYXRhLgotICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Ci19Ci0KLXVu
c2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgp
Ci17Ci0gICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdX
aW5kb3csICZyZWN0KTsKLSAgICByZXR1cm4gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKLX0KLQot
dW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgo
KQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0ZWRWaWV3
V2luZG93LCAmcmVjdCk7Ci0gICAgcmV0dXJuIHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKLXsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLQotICAgIGlmIChtX2luc3Bl
Y3RvckRldGFjaFdpbmRvdyAmJiA6OkdldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5kb3cpID09
IG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAgICAgIDo6U2V0UGFyZW50KG1faW5zcGVj
dG9yVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICAgICAgOjpT
aG93V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBTV19ISURFKTsKLSAgICB9Ci0KLSAg
ICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OmFkZExpc3RlbmVyKG1faW5zcGVj
dGVkVmlld1dpbmRvdywgdGhpcyk7Ci0KLSAgICBpZiAobV9hdHRhY2htZW50U2lkZSA9PSBBdHRh
Y2htZW50U2lkZTo6Qm90dG9tKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhl
aWdodCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkgKiAzIC8gNDsKLSAgICAgICAg
cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQsIHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZEhlaWdo
dCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRXaWR0
aCA9IHBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKSAqIDMgLyA0OwotICAgICAgICBwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgoc3RkOjptYXgobWluaW11bUF0dGFjaGVkV2lkdGgs
IHN0ZDo6bWluKGRlZmF1bHRBdHRhY2hlZFNpemUsIG1heGltdW1BdHRhY2hlZFdpZHRoKSkpOwot
ICAgIH0KLSAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2luZG93LCBTV19TSE9XKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIGlm
ICghaW5zcGVjdGVkUGFnZSgpLT5oYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAgICAgIHJlZ2lzdGVy
V2luZG93Q2xhc3MoKTsKLSAgICAgICAgbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgPSA6OkNyZWF0
ZVdpbmRvd0V4KDAsIFdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVE
V0lORE9XLAotICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgQ1dfVVNFREVGQVVMVCwgaW5pdGlh
bFdpbmRvd1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0LAotICAgICAgICAgICAgMCwgMCwgV2Vi
Q29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0gICAgICAgIDo6U2V0UHJvcChtX2luc3BlY3Rv
ckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRf
Y2FzdDxIQU5ETEU+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdl
QnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7
Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yRGV0YWNo
V2luZG93LCAmcmVjdCk7Ci0gICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93
SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7
Ci0gICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RvckRldGFj
aFdpbmRvdyk7Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCAw
LCAwLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1Bf
Tk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwg
d2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAt
IHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRv
cCwgU1dQX05PWk9SREVSKTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSkKLSAgICAgICAgOjpTaG93
V2luZG93KG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBTV19TSE9XKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBo
ZWlnaHQpCi17Ci0gICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyht
X2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7Ci0gICAg
OjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQs
IHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gaGVpZ2h0LCB3aW5kb3dJbmZvLnBhcmVudFdpZHRo
IC0gd2luZG93SW5mby5sZWZ0LCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRXaW5k
b3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0lu
Zm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJ
bmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5z
aWduZWQgd2lkdGgpCi17Ci0gICAgYXV0byB3aW5kb3dJbmZvID0gZ2V0SW5zcGVjdGVkV2luZG93
SW5mbyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7
Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZv
LnBhcmVudFdpZHRoIC0gd2lkdGgsIHdpbmRvd0luZm8udG9wLCB3aWR0aCwgd2luZG93SW5mby5w
YXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdp
bmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93
SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRv
d0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIC8qIHVybCAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJD
b3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBib29sLCBib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgLyogYXZhaWxhYmxl
ICovKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQotewotICAgIHBsYXRmb3JtRGV0YWNo
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFz
aCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODRiMDkwZmRjNzIuLjk1ODJjY2VlMzJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ0
MjEsOCArNDQyMSw4IEBACiAJCUE1MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdlSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MThCNUQwMUZF
MUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0luc3BlY3RvcldLV2ViVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4
QjVEMTFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS0luc3BlY3RvcldLV2ViVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTU0MjkzQTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNo
R2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0Mjkz
QTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25p
emVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJl
Y29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1NDI5M0EyMTk1QTQz
QzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyog
V0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8qIFdlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBNTQzRTMwNjIxNUFEMTJFMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjY1NCwxMCArNjY1NCw2IEBACiAJCQkJRjREQjU0RTUyMzE5RTczMzAwOUUz
MTU1IC8qIFdLSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCiAJCQkJ
OTMzREY4MkQxQjNCQzA5MDAwQUVBOUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIu
aCAqLywKIAkJCQk5MzNERjgyRjFCM0JDMEI0MDBBRUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3
Q29udHJvbGxlci5tbSAqLywKLQkJCQkwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3LmggKi8sCi0JCQkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8q
IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSAqLywKLQkJCQlBNTQyOTNBMjE5NUE0M0M2MDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKLQkJ
CQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIubW0gKi8sCiAJCQkJMkRENUUxMjcyMTBBREM3QTAwREI2MDEyIC8qIFdLS2V5
Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5oICovLAogCQkJCTJERDVFMTI2MjEwQURDN0EwMERCNjAx
MiAvKiBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0gKi8sCiAJCQkJMkRCOTQyOTcyMzRF
N0E3RjAwRTc3NkFEIC8qIFdLTW91c2VHZXN0dXJlUmVjb2duaXplci5oICovLApAQCAtNzk4Myw2
ICs3OTc5LDk5IEBACiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OworCQk5MUQ5NzBENDIzREE2RDI1MDA1N0RCQzMgLyogSW5zcGVjdG9yICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk5MUQ5NzBENTIzREE2RDUw
MDA1N0RCQzMgLyogQWdlbnRzICovLAorCQkJCTkxRDk3MEQ3MjNEQTZENUIwMDU3REJDMyAvKiBp
b3MgKi8sCisJCQkJOTFEOTcwRDYyM0RBNkQ1NTAwNTdEQkMzIC8qIG1hYyAqLywKKwkJCQlBNUUz
OTFGQjIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwICovLAorCQkJ
CUE1RTM5MUZDMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQcm94eS5oICovLAor
CQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5j
cHAgKi8sCisJCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmggKi8sCisJCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JE
MCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCisJCQkJMUM4RTI4MzIxMjc1RDczODAwQkM3
QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmggKi8sCisJCQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3
NDJGIC8qIFdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCUE1NUJBODI3MUJB
MzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwICovLAorCQkJCUE1NUJB
ODI4MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLywKKwkJCQlB
NUVDNkFEMjIxNTFCRDY5MDA2NzdEMTcgLyogV2ViUGFnZURlYnVnZ2FibGUuY3BwICovLAorCQkJ
CUE1RUM2QUQzMjE1MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdlRGVidWdnYWJsZS5oICovLAorCQkJ
CUE1MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAgKi8sCisJCQkJQTUxM0Y1M0UyMTU0QTVDQzAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IEluc3BlY3RvcjsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTkxRDk3MEQ1MjNEQTZENTAwMDU3REJDMyAvKiBBZ2Vu
dHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJKTsKKwkJ
CXBhdGggPSBBZ2VudHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5
NzBENjIzREE2RDU1MDA1N0RCQzMgLyogbWFjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCisJCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8q
IFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAorCQkJCTk5NEJBREYxMUY3RDc3RUEwMEI1NzFF
NyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggKi8sCisJCQkJOTk0QkFERjIxRjdENzdF
QjAwQjU3MUU3IC8qIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0gKi8sCisJCQkJQTUxOEI1
RDAxRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3LmggKi8sCisJCQkJQTUx
OEI1RDExRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tICovLAorCQkJ
KTsKKwkJCXBhdGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5
MUQ5NzBENzIzREE2RDVCMDA1N0RCQzMgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3LmggKi8sCisJCQkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8q
IFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSAqLywKKwkJCQlBNTQyOTNBMjE5NUE0M0M2MDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKKwkJ
CQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVy
ZVJlY29nbml6ZXIubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CisJCTkxRDk3MEUwMjNEQTZGQjEwMDU3REJDMyAvKiBJbnNwZWN0
b3IgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTkxRDk3
MEU1MjNEQTcwNDcwMDU3REJDMyAvKiBtYWMgKi8sCisJCQkJQTU1QkE4MTIxQkEyM0UwNTAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmNwcCAqLywKKwkJCQlBNTVCQTgxMzFCQTIzRTA1
MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAqLywKKwkJCQlBNTVCQTgxNDFCQTIz
RTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCisJCQkJ
MUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAgKi8sCisJCQkJMUM4
RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5oICovLAorCQkJCTFDOEUyQTFD
MTI3NzgzM0YwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8sCisJCQkJQkMx
MTFBNTkxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkluc3BlY3RvckNsaWVudC5jcHAgKi8sCisJCQkJ
QkMwMzJENkQxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkluc3BlY3RvckNsaWVudC5oICovLAorCQkJ
CUE1NUJBODMyMUJBM0U2RkEwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuY3BwICovLAorCQkJCUE1NUJBODMzMUJBM0U2RkEwMDdDRDMzRCAvKiBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCAqLywKKwkJCQlGRUU0M0ZEMDFFNjdBRkM2MDA3N0Q2
RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJRkVFNDNG
RDExRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCAq
LywKKwkJCQlGRUU0M0ZEMjFFNjdBRkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiAqLywKKwkJCQkxQzg5MUQ2MjE5QjEyNEZGMDBCQTc5REQg
LyogV2ViSW5zcGVjdG9yVUkuY3BwICovLAorCQkJCTFDODkxRDYzMTlCMTI0RkYwMEJBNzlERCAv
KiBXZWJJbnNwZWN0b3JVSS5oICovLAorCQkJCTFDODkxRDY0MTlCMTI0RkYwMEJBNzlERCAvKiBX
ZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLywKKwkJCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgKi8sCisJCQkJQTU0M0UzMDgyMTVDOEE4
MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLywKKwkJCQlBNTQzRTMwOTIx
NUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICov
LAorCQkJCUE1NDNFMzBCMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlci5oICovLAorCQkJCUE1NDNFMzA2MjE1QUQxMkUwMDI3OUNEOSAvKiBXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcCAqLywKKwkJCQlBNTQzRTMwNTIxNUFE
MTJEMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBJbnNwZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQk5MUQ5NzBFNTIzREE3MDQ3MDA1N0RCQzMgLyogbWFjICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQzhFMkRBRDEyNzhDNUIyMDBCQzdC
RDAgLyogV2ViSW5zcGVjdG9yVUlNYWMubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1hYzsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTkzOTI4OEUwMjE0MDRERjAwMEVCQkEz
MyAvKiBJbmRleGVkREIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtODE5Niw2ICs4Mjg1LDcgQEAKIAkJCQlCQzBFNUZDQjEyRDY5NkREMDAxMkE3MkEgLyog
R2VvbG9jYXRpb24gKi8sCiAJCQkJMkQ3RTQzQkYyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVSAqLywK
IAkJCQlCQzIwNEVERjExQzgzRTcyMDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGUgKi8sCisJCQkJ
OTFEOTcwRTAyM0RBNkZCMTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLywKIAkJCQkzM0QzQTNCRDEz
Mzk2MDk4MDA3MDlCRTQgLyogTWVkaWFDYWNoZSAqLywKIAkJCQk0QTQxMEY0MTE5QUY3QjI3MDAy
RUJBQjUgLyogTWVkaWFTdHJlYW0gKi8sCiAJCQkJNTEwNUIwRDIxNjJGN0E1RTAwRTI3NzA5IC8q
IE5ldHdvcmsgKi8sCkBAIC04MjQ2LDggKzgzMzYsNiBAQAogCQkJCUJDMDMyRDZBMTBGNDM3OEQw
MDU4QzE1QSAvKiBXZWJGcmFtZUxvYWRlckNsaWVudC5oICovLAogCQkJCUJDMUJFMURGMTJENTRB
NDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgKi8sCiAJCQkJQkMxQkUxREUx
MkQ1NEE0MTAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uQ2xpZW50LmggKi8sCi0JCQkJQkMxMTFB
NTkxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkluc3BlY3RvckNsaWVudC5jcHAgKi8sCi0JCQkJQkMw
MzJENkQxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTUx
M0ZGQjhFMjAxNDU5QzIwMDI1OTZFQSAvKiBXZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5j
cHAgKi8sCiAJCQkJNTEzRkZCOEYyMDE0NTlDMjAwMjU5NkVBIC8qIFdlYk1lc3NhZ2VQb3J0Q2hh
bm5lbFByb3ZpZGVyLmggKi8sCiAJCQkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5v
dGlmaWNhdGlvbkNsaWVudC5jcHAgKi8sCkBAIC04Mjk2LDkgKzgzODQsNiBAQAogCQkJCTFBOTBD
MUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovLAogCQkJCTdDMzg3NDMz
MTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1
QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAotCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdD
RDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgKi8sCi0JCQkJQTU1QkE4MTMxQkEyM0Uw
NTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi8sCi0JCQkJQTU1QkE4MTQxQkEy
M0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAogCQkJ
CTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
LmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5oICovLAogCQkJCTJEODE5QjlCMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2VzLmluICovLApAQCAtODMxOCwxNyArODQw
Myw2IEBACiAJCQkJMUE1QjFDNTMxODk4N0VERjAwNEZDRjlCIC8qIFdlYkRvY3VtZW50TG9hZGVy
LmggKi8sCiAJCQkJQkMxMTFBREMxMTJGNUI5MzAwMzM3QkFCIC8qIFdlYkZyYW1lLmNwcCAqLywK
IAkJCQlCQzAzMkQ4OTEwRjQzN0EwMDA1OEMxNUEgLyogV2ViRnJhbWUuaCAqLywKLQkJCQkxQzhF
MjgxRjEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmNwcCAqLywKLQkJCQkxQzhFMjgx
RTEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmggKi8sCi0JCQkJMUM4RTJBMUMxMjc3
ODMzRjAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiAqLywKLQkJCQlBNTVCQTgz
MjFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNw
cCAqLywKLQkJCQlBNTVCQTgzMzFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyLmggKi8sCi0JCQkJRkVFNDNGRDAxRTY3QUZDNjAwNzdENkQxIC8qIFdl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwICovLAotCQkJCUZFRTQzRkQxMUU2N0FG
QzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggKi8sCi0JCQkJ
RkVFNDNGRDIxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYklu
c3BlY3RvclVJLmNwcCAqLywKLQkJCQkxQzg5MUQ2MzE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5z
cGVjdG9yVUkuaCAqLywKLQkJCQkxQzg5MUQ2NDE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVj
dG9yVUkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQkM4NTdGODQxMkI4MkQwQjAwRURFQjJFIC8qIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcCAqLywKIAkJCQlCQzg1N0Y4MzEyQjgyRDBCMDBF
REVCMkUgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCAqLywKIAkJCQlCQzk2M0Q2QTEx
M0REMTkyMDA1NzRCRTIgLyogV2ViUGFnZS5jcHAgKi8sCkBAIC04MzM2LDEyICs4NDEwLDYgQEAK
IAkJCQlDMENFNzI1ODEyNDdFNERBMDBCQzBFQzQgLyogV2ViUGFnZS5tZXNzYWdlcy5pbiAqLywK
IAkJCQlCQzdCNjIxNDEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuY3BwICov
LAogCQkJCUJDN0I2MjEzMTJBNDIxOUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5oICov
LAotCQkJCUE1NDNFMzBBMjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
LmNwcCAqLywKLQkJCQlBNTQzRTMwODIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5oICovLAotCQkJCUE1NDNFMzA5MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgKi8sCi0JCQkJQTU0M0UzMEIyMTVDOEE4NDAwMjc5
Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggKi8sCi0JCQkJQTU0M0Uz
MDYyMTVBRDEyRTAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwuY3BwICovLAotCQkJCUE1NDNFMzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggKi8sCiAJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjND
NUMxIC8qIFdlYlBhZ2VPdmVybGF5LmNwcCAqLywKIAkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1
QzEgLyogV2ViUGFnZU92ZXJsYXkuaCAqLywKIAkJCQlCQ0EwRUY3RTEyMzMxRTc4MDA3RDNDRkIg
LyogV2ViVW5kb1N0ZXAuY3BwICovLApAQCAtODM2NSw2ICs4NDMzLDcgQEAKIAkJCQkxQUI3RDRD
NzEyODhBQTlBMDBDRkQwOEMgLyogRG93bmxvYWRzICovLAogCQkJCTUxNUJFMTdCMUQ1NEVGNUEw
MEREN0M2OCAvKiBHYW1lcGFkICovLAogCQkJCTJEN0U0M0JCMjM3NTJDQzQwMEVBNUNBMCAvKiBH
UFUgKi8sCisJCQkJOTFEOTcwRDQyM0RBNkQyNTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLywKIAkJ
CQkyREE5NDRBODE4ODRFOUFCMDBFRDg2REIgLyogaW9zICovLAogCQkJCUJDMTExQjE4MTEyRjVG
QjQwMDMzN0JBQiAvKiBMYXVuY2hlciAqLywKIAkJCQlCQ0NGMDg1QzExM0YzQjc1MDBDNjUwQzUg
LyogbWFjICovLApAQCAtODM5NCw4ICs4NDYzLDYgQEAKIAkJCQkyREQ1QTcyQTFFQkYwOUE3MDA5
QkE1OTcgLyogSGlkZGVuUGFnZVRocm90dGxpbmdBdXRvSW5jcmVhc2VzQ291bnRlci5oICovLAog
CQkJCTgzOUEyRjJGMUUyMDY3MzkwMDM5MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1Vz
YWdlU2FtcGxlci5jcHAgKi8sCiAJCQkJODM5QTJGMzAxRTIwNjczOTAwMzkwNTdFIC8qIEhpZ2hQ
ZXJmb3JtYW5jZUdyYXBoaWNzVXNhZ2VTYW1wbGVyLmggKi8sCi0JCQkJQTVFMzkxRkIyMTgzQzFF
OTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmNwcCAqLywKLQkJCQlBNUUzOTFGQzIx
ODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCAqLywKIAkJCQk1Q0VBQkEy
QjIzMzMyNTE0MDA3OTc3OTcgLyogTGVnYWN5R2xvYmFsU2V0dGluZ3MuY3BwICovLAogCQkJCTVD
RUFCQTJBMjMzMzI0NzcwMDc5Nzc5NyAvKiBMZWdhY3lHbG9iYWxTZXR0aW5ncy5oICovLAogCQkJ
CTMxNjA3RjM4MTk2MjcwMDIwMDlCODdEQSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCAq
LywKQEAgLTg0MTEsOSArODQ3OCw2IEBACiAJCQkJODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8q
IFByb2Nlc3NUaHJvdHRsZXJDbGllbnQuaCAqLywKIAkJCQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3
QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwICovLAogCQkJCTQ2ODM1NjlBMjFFODFDQzcw
MDZFMjdBMyAvKiBQcm92aXNpb25hbFBhZ2VQcm94eS5oICovLAotCQkJCUE1NUJBODFCMUJBMjVC
MUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJQTU1QkE4
MTkxQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJ
QTU1QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3Nh
Z2VzLmluICovLAogCQkJCUJDMTExQjA4MTEyRjVFM0MwMDMzN0JBQiAvKiBSZXNwb25zaXZlbmVz
c1RpbWVyLmNwcCAqLywKIAkJCQkxQTMwMDY2QzExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2
ZW5lc3NUaW1lci5oICovLAogCQkJCTVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJv
d3NpbmdXYXJuaW5nLmggKi8sCkBAIC04NDkzLDExICs4NTU3LDYgQEAKIAkJCQlCQzFCRTFGMTEy
RDU0REJEMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlci5jcHAgKi8sCiAJCQkJQkMx
QkUxRjAxMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLywKIAkJ
CQk1MUM4RTE5QjFGMjE2MTcyMDBCRjczMUIgLyogV2ViSWNvbkRhdGFiYXNlLmggKi8sCi0JCQkJ
MUM4RTI4MzMxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmNwcCAqLywKLQkJ
CQkxQzhFMjgzMjEyNzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLywKLQkJ
CQkxQzc3QzE5NTEyODhBODcyMDA2QTc0MkYgLyogV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4gKi8sCi0JCQkJQTU1QkE4MjcxQkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxp
dGllcy5jcHAgKi8sCi0JCQkJQTU1QkE4MjgxQkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3Rv
clV0aWxpdGllcy5oICovLAogCQkJCUM5OEM0OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRp
YVNlc3Npb25Gb2N1c01hbmFnZXIuY3BwICovLAogCQkJCUM5OEM0OEE0MUI2RkQ0QzMwMDE0NTEw
MyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuaCAqLywKIAkJCQlDOUMxODMzNzFCNzNG
RDZBMDA3MDM2QTcgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyQ2xpZW50LmNwcCAqLywK
QEAgLTg1MDgsMTYgKzg1NjcsMTIgQEAKIAkJCQk3Q0NDQzhGOTFBNUY1MEZEMDA4RkIwREEgLyog
V2ViTmF2aWdhdGlvblN0YXRlLmggKi8sCiAJCQkJQkMxREZFQTMxMkIzMUY4NzAwNURGNzMwIC8q
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwICovLAogCQkJCUJDMURGRUEyMTJC
MzFGODcwMDVERjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggKi8sCi0J
CQkJQTVFQzZBRDIyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLywK
LQkJCQlBNUVDNkFEMzIxNTFCRDY5MDA2NzdEMTcgLyogV2ViUGFnZURlYnVnZ2FibGUuaCAqLywK
IAkJCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmNwcCAqLywKIAkJCQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8sCiAJCQkJQkM3QjYyMDUxMjlBMEE2NzAwRDE3NEE0
IC8qIFdlYlBhZ2VHcm91cC5jcHAgKi8sCiAJCQkJQkM3QjYyMDQxMjlBMEE2NzAwRDE3NEE0IC8q
IFdlYlBhZ2VHcm91cC5oICovLAogCQkJCTJEOUVBMzEwMUE5NkQ5RUIwMDJEMjgwNyAvKiBXZWJQ
YWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwICovLAogCQkJCTJEOUVBMzBFMUE5NkNCRkYwMDJE
MjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCAqLywKLQkJCQlBNTEzRjUzRjIx
NTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJ
CUE1MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5o
ICovLAogCQkJCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICov
LAogCQkJCUJDMDMyRENCMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCAqLywKIAkJ
CQlCQ0JEMzhGQTEyNUJBQjlBMDBEMkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICov
LApAQCAtOTE4Myw3ICs5MjM4LDYgQEAKIAkJCQk3QzZEMzdGQTE3MkY1NTVGMDA5RDI4NDcgLyog
UGFnZUJhbm5lck1hYy5tbSAqLywKIAkJCQkxQUFGMjYzNzE0Njg3QzM5MDA0QTFFOEEgLyogVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCAqLywKIAkJCQkxQUFGMjYzNjE0Njg3QzM5MDA0
QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gKi8sCi0JCQkJMUM4RTJE
QUQxMjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJTWFjLm1tICovLAogCQkJCUJDOTYz
RDZEMTEzREQxQTUwMDU3NEJFMiAvKiBXZWJQYWdlTWFjLm1tICovLAogCQkJCTI5Q0Q1NUE4MTI4
RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oICovLAog
CQkJCTI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2Jq
ZWN0QmFzZS5tbSAqLywKQEAgLTkyNjAsNyArOTMxNCw2IEBACiAJCQkJMUFGREU2NUIxOTU0RThE
NTAwQzQ4RkZBIC8qIExlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZy5jcHAgKi8sCiAJCQkJMEZDQjRF
NTgxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLmggKi8sCiAJCQkJMEZDQjRF
NTkxOEJCRTNEOTAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsTWFjLm1tICovLAotCQkJCUE1RDM1
MDREMUQ3OEYwRDIwMDUxMjRBOSAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAqLywK
IAkJCQlFMThFNjkwOTE2OUI1NjNGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5jcHAgKi8s
CiAJCQkJRTE4RTY5MEExNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCAqLywK
IAkJCQlFMThFNjkwRDE2OUI1N0RGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5tZXNzYWdl
cy5pbiAqLywKQEAgLTkyODEsNyArOTMzNCw2IEBACiAJCQkJRjZENjMyQkExMzNEMTgxQjAwNzQz
RDc3IC8qIFdlYkNvb2tpZU1hbmFnZXJQcm94eU1hYy5tbSAqLywKIAkJCQlFNTY4QjkyMDIwQTNB
QzZBMDBFM0M4NTYgLyogV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLmggKi8sCiAJ
CQkJRTU2OEI5MjEyMEEzQUM2QTAwRTNDODU2IC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9w
ZG93bk1hYy5tbSAqLywKLQkJCQkxQ0E4QjkzNTEyN0M3NzRFMDA1NzZDMkIgLyogV2ViSW5zcGVj
dG9yUHJveHlNYWMubW0gKi8sCiAJCQkJQkM4NTdFODUxMkI3MUVCQjAwRURFQjJFIC8qIFdlYlBh
Z2VQcm94eU1hYy5tbSAqLywKIAkJCQlCQzU3NTA5NTEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9w
dXBNZW51UHJveHlNYWMuaCAqLywKIAkJCQlCQzU3NTA5NjEyNjhGM0M2MDA2RjBGMTIgLyogV2Vi
UG9wdXBNZW51UHJveHlNYWMubW0gKi8sCkBAIC05MjkyLDEwICs5MzQ0LDYgQEAKIAkJCQlDRENB
ODVDNjEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAq
LywKIAkJCQk5MzIxRDU4NTFBMzhFRTNDMDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLmggKi8sCiAJCQkJOTMyMUQ1ODcxQTM4RUU3NDAwODA1MkJFIC8qIFdLSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbSAqLywKLQkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyog
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovLAotCQkJCTk5NEJBREYyMUY3RDc3RUIwMEI1
NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tICovLAotCQkJCUE1MThCNUQwMUZF
MUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5oICovLAotCQkJCUE1MThCNUQx
MUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5tbSAqLywKIAkJCQkwRkNC
NEU1QzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcuaCAqLywKIAkJCQkwRkNCNEU1
RDE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gKi8sCiAJCQkJNTEzRTQ2MkIx
QUQ4Mzc1NjAwMTYyMzRBIC8qIFdLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZS5oICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJ
bnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90
ZVdlYkluc3BlY3RvclVJLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNTU4ZDhmMGMyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcApAQCAtMCwwICsxLDIzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNw
ZWN0b3JVSS5oIgorCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3Js
ZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCisj
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKyNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVmPFJlbW90ZVdlYkluc3BlY3Rv
clVJPiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yVUkocGFnZSkpOworfQorCitS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkK
KyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkK
K3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5pdGlhbGl6ZShEZWJ1Z2dhYmxl
SW5mb0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNV
UkwpCit7CisgICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwor
ICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOworCisgICAgbV9w
YWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCh0aGlzKTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Cisg
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5h
dmFpbGFibGUiX3MsIHRydWUpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRT
YXZlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2Fn
ZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICBpZiAobV9mcm9udGVuZEhvc3QpCisgICAg
ICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7CisKKyAgICBtX2Zyb250ZW5k
SG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFn
ZSgpKTsKKyAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVu
ZExvYWRlZCgpOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJzZXRJc1Zpc2libGUiX3MsIHRydWUpOworCisgICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0
UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30K
Kwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0
IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJv
bWUoKS53aW5kb3dSZWN0KCk7CisgICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7CisgICAgbV9wYWdl
LmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKK30KKworV2Vi
Q29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFn
ZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigp
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQoreworICAg
IG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQobnVsbHB0cik7CisKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKK3sKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigp
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYgdXJsKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpPcGVu
SW5OZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJh
c2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIC8vIERvIG5vdGhpbmcuIFRoZSByZW1vdGUgc2lk
ZSBjYW4ga25vdyBpZiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2VkLgorfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBj
ZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsK
K30KKworSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGVi
dWdnYWJsZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLmRlYnVn
Z2FibGVUeXBlOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRm
b3JtTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxh
dGZvcm1OYW1lOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxk
VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVp
bGRWZXJzaW9uOworfQorCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1
Y3RWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQ
cm9kdWN0VmVyc2lvbjsKK30KKworYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0SXNT
aW11bGF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldElz
U2ltdWxhdG9yOworfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCitib29sIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkKK3sKKyAgICBy
ZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFi
bGVkKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50
OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCit7CisgICAgbV9wYWdlLmNvcmVQYWdlKCkt
PmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVE
aWN0aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdu
b3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFp
bGFibGUpCit7CisgICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBz
aG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJs
ZWQuCisgICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygp
KTsKKyAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOworCisgICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Cit9CisjZW5k
aWYKKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShX
SU4pCitTdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI0YWUxYzFkYWExCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNw
ZWN0b3JVSS5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJEZWJ1Z2dhYmxlSW5mb0RhdGEuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXIuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworY2xhc3MgRmxvYXRS
ZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3Mg
UmVtb3RlV2ViSW5zcGVjdG9yVUkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVXZWJJ
bnNwZWN0b3JVST4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciwgcHVibGljIFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90
ZVdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYpOworCisgICAgLy8gSW1wbGVtZW50ZWQg
aW4gZ2VuZXJhdGVkIFJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAorICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisKKyAgICAvLyBDYWxsZWQgYnkgUmVtb3RlV2ViSW5zcGVjdG9yVUkgbWVzc2Fn
ZXMKKyAgICB2b2lkIGluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRhJiYsIGNvbnN0IFN0cmlu
ZyYgYmFja2VuZENvbW1hbmRzVVJMKTsKKyAgICB2b2lkIGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1
cmwpOworICAgIHZvaWQgZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIHNl
bmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmKTsKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfVEVMRU1FVFJZKQorICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9v
bCk7CisjZW5kaWYKKworICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Cisg
ICAgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVu
ZExvYWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2hhbmdlU2hlZXRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgb3ZlcnJpZGU7
CisKKyAgICBib29sIGlzUmVtb3RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5n
IGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZENvbW1h
bmRzVVJMOyB9CisgICAgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgU3RyaW5nIHRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCB0YXJnZXRJc1NpbXVsYXRvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlb3BlbigpIG92ZXJy
aWRlOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBvcGVuSW5O
ZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOworICAgIHZvaWQgc2F2ZShjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlQXMpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBzdXBwb3J0c0RpYWdub3N0aWNMb2dn
aW5nKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7IH0KKyAgICB2b2lk
IGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgV2ViQ29y
ZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJyaWRlOwor
I2VuZGlmCisKKyAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdW5z
aWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMTsgfQorICAg
IHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZSB7IH0KKyAgICB2b2lk
IGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KKyAgICB2
b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJyaWRlIHsgfQorCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IFJlbW90ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmKTsKKwor
ICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNo
ZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7CisgICAgRGVidWdnYWJsZUluZm9EYXRhIG1f
ZGVidWdnYWJsZUluZm87CisgICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOworCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBtX2RpYWdub3N0aWNMb2dnaW5n
QXZhaWxhYmxlIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdl
Ykluc3BlY3RvclVJLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMmJmN2U0Yzg3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3Nh
Z2VzLmluCkBAIC0wLDAgKzEsMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JVSSB7CisgICAgSW5p
dGlhbGl6ZShzdHJ1Y3QgV2ViS2l0OjpEZWJ1Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8s
IFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwpCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVN
RVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkK
KyNlbmRpZgorCisgICAgRGlkU2F2ZShTdHJpbmcgdXJsKQorICAgIERpZEFwcGVuZChTdHJpbmcg
dXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3Iu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMzIyNWQxM2RkMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yLmNwcApAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgorCisjaW5jbHVkZSAi
V2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
YXZpZ2F0aW9uQWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJv
bGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KKworc3RhdGljIGNv
bnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKK3N0YXRpYyBjb25zdCBmbG9h
dCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7CitzdGF0aWMgY29uc3QgZmxvYXQg
bWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxXZWJJbnNwZWN0b3I+IFdlYkluc3BlY3Rvcjo6Y3Jl
YXRlKFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVj
dG9yKHBhZ2UpKTsKK30KKworV2ViSW5zcGVjdG9yOjpXZWJJbnNwZWN0b3IoV2ViUGFnZSogcGFn
ZSkKKyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCitXZWJJbnNwZWN0b3I6On5XZWJJbnNwZWN0
b3IoKQoreworICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikKKyAgICAgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5M
b2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChjYW5BdHRhY2hXaW5k
b3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYklu
c3BlY3Rvcjo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBlbmNvZGVkQ29u
bmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgLy8gV2UgbWlnaHQgcmVjZWl2ZSBtdWx0aXBsZSB1
cGRhdGVzIGlmIHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBwZWQgaW50byBhIFdlYlBhZ2VQcm94
eQorICAgIC8vIHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGVzdGFibGlzaGVkIHRoZSBj
b25uZWN0aW9uLgorICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX2Zyb250ZW5kQ29ubmVj
dGlvbiA9IG51bGxwdHI7CisgICAgfQorCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisg
ICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29k
ZWRDb25uZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKSk7CisjZWxpZiBP
UyhEQVJXSU4pCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVu
dGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOworI2VsaWYgT1MoV0lO
RE9XUykKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZp
ZXIoZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpKTsKKyNlbHNlCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm47CisjZW5kaWYKKworICAgIGlmICghSVBDOjpDb25u
ZWN0aW9uOjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRlbnRpZmllcikpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpj
cmVhdGVDbGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7CisgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKKworICAgIGZvciAoYXV0byYgY2FsbGJhY2sg
OiBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCisgICAgICAgIGNhbGxiYWNrKCk7CisgICAg
bV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yOjpjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKKworICAgIC8vIElm
IHdlIHRyaWVkIHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZvcmUgaXQgd2FzIGNyZWF0ZWQsIHRo
ZW4gbm8gY29ubmVjdGlvbiBleGlzdHMgeWV0LgorICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlv
bikgeworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgICAg
ICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgbV9mcm9udGVu
ZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7CisKKyAgICBtX2F0dGFjaGVkID0gZmFsc2U7Cisg
ICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6
YnJpbmdUb0Zyb250KCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdU
b0Zyb250KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6
OndoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYgY2Fs
bGJhY2spCit7CisgICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0aW9uKSB7CisgICAgICAgIGNhbGxi
YWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Zyb250ZW5kQ29ubmVjdGlv
bkFjdGlvbnMuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworLy8gQ2FsbGVkIGJ5IFdl
Ykluc3BlY3RvciBtZXNzYWdlcwordm9pZCBXZWJJbnNwZWN0b3I6OnNob3coKQoreworICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yOjpjbG9zZSgpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIENsb3NlIGNvdWxkIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBk
dXJpbmcgdGVhcmRvd24uCisgICAgaWYgKCFtX2Zyb250ZW5kQ29ubmVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3I6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfTsK
KworICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7CisgICAgaWYg
KCFpbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSYgaW5zcGVjdGVk
TWFpbkZyYW1lID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7CisgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBp
bnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VS
ZXF1ZXN0IHsgdXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExvY2tIaXN0b3J5OjpObywgTG9ja0Jh
Y2tGb3J3YXJkTGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0lu
dmFsaWRVUkw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBTaG91bGRPcGVuRXh0
ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVu
a25vd24gfTsKKworICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uIHsgKmluc3BlY3RlZE1haW5G
cmFtZS5kb2N1bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBmcmFt
ZUxvYWRSZXF1ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCksIE5hdmlnYXRpb25UeXBlOjpMaW5r
Q2xpY2tlZCB9OworICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNwZWN0ZWRQYWdlLT5jaHJvbWUoKS5j
cmVhdGVXaW5kb3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LCB7IH0sIGFj
dGlvbik7CisgICAgaWYgKCFuZXdQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBuZXdQYWdl
LT5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmlu
ZyYgc2NyaXB0KQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5ldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kKHNjcmlwdCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpz
aG93Q29uc29sZSgpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNo
b3coKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlNob3dDb25zb2xlKCksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hv
d1Jlc291cmNlcygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNo
b3coKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlNob3dSZXNvdXJjZXMoKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpz
aG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRl
bnRpZmllcikKK3sKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisK
KyAgICBTdHJpbmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVyID0gbV9wYWdlLT5jb3JlUGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFnZW50KCkuZnJhbWVJZChmcmFtZS0+
Y29yZUZyYW1lKCkpOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9
XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGluc3BlY3RvckZyYW1lSWRlbnRpZmll
ciksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c3RhcnRQYWdlUHJvZmls
aW5nKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwor
CisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1f
ZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RhcnRQ
YWdlUHJvZmlsaW5nKCksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c3Rv
cFBhZ2VQcm9maWxpbmcoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsK
KyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpTdG9wUGFnZVByb2ZpbGluZygpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3I6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQ
YWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3Rh
Ymxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCAwKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBp
ZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hlbkZyb250
ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0
aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcEVsZW1lbnRTZWxlY3Rpb24o
KSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjplbGVtZW50U2VsZWN0aW9u
Q2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
RWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0
aXZlKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpUaW1lbGluZVJlY29yZGlu
Z0NoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYklu
c3BlY3Rvcjo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJv
b2w+IGVuYWJsZWQpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldE1vY2tD
YXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKSwgbV9wYWdlLT5pZGVudGlmaWVy
KCkpOworfQorCitib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0YWNoV2luZG93KCkKK3sKKyAgICBp
ZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
RG9uJ3QgYWxsb3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5zcGVjdG9yIC0tIHR3byBpbnNwZWN0
b3JzIGluIG9uZSB3aW5kb3cgaXMgdG9vIG11Y2ghCisgICAgaWYgKG1fcGFnZS0+aXNJbnNwZWN0
b3JQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHdlIGFyZSBhbHJl
YWR5IGF0dGFjaGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4gdG8gYWxsb3cgc3dpdGNoaW5nIHNp
ZGVzLgorICAgIGlmIChtX2F0dGFjaGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwg
dG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIHNpemUuCisgICAgdW5zaWduZWQg
aW5zcGVjdGVkUGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZVdpZHRoID0g
bV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVXaWR0aCgpOwor
ICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IGluc3BlY3RlZFBhZ2VIZWlnaHQg
KiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKKyAgICByZXR1cm4gbWluaW11bUF0dGFjaGVk
SGVpZ2h0IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8
PSBpbnNwZWN0ZWRQYWdlV2lkdGg7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2Nr
aW5nQXZhaWxhYmlsaXR5KCkKK3sKKyAgICBpZiAobV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlzLT5jYW5BdHRhY2hXaW5kb3coKTsK
KyAgICBpZiAobV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5BdHRhY2hXaW5kb3cpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7CisK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2
Yjg5ZTUyMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3IuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0b3IgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVJbnNwZWN0b3I+LCBwcml2YXRlIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3Rv
cj4gY3JlYXRlKFdlYlBhZ2UqKTsKKworICAgIFdlYlBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2U7IH0KKworICAgIHZvaWQgdXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpOworCisg
ICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3Rvck1lc3NhZ2VSZWNlaXZl
ci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKKyAg
ICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQor
ICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZSgp
OyB9CisKKyAgICB2b2lkIHNob3coKTsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICB2b2lkIG9w
ZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisKKyAgICB2b2lkIGNhbkF0dGFj
aFdpbmRvdyhib29sJiByZXN1bHQpOworCisgICAgdm9pZCBzaG93Q29uc29sZSgpOworICAgIHZv
aWQgc2hvd1Jlc291cmNlcygpOworCisgICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9yRnJhbWUo
V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyKTsKKworICAgIHZvaWQgc2V0QXR0YWNoZWQoYm9vbCBh
dHRhY2hlZCkgeyBtX2F0dGFjaGVkID0gYXR0YWNoZWQ7IH0KKworICAgIHZvaWQgZXZhbHVhdGVT
Y3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKKworICAgIHZvaWQgc3RhcnRQYWdl
UHJvZmlsaW5nKCk7CisgICAgdm9pZCBzdG9wUGFnZVByb2ZpbGluZygpOworCisgICAgdm9pZCBz
dGFydEVsZW1lbnRTZWxlY3Rpb24oKTsKKyAgICB2b2lkIHN0b3BFbGVtZW50U2VsZWN0aW9uKCk7
CisgICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIHRpbWVs
aW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKTsKKyAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNl
c0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPik7CisKKyAgICB2b2lkIHNldEZyb250ZW5k
Q29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQpOworCisgICAgdm9pZCBkaXNjb25uZWN0RnJvbVBh
Z2UoKSB7IGNsb3NlKCk7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViSW5zcGVj
dG9yQ2xpZW50OworCisgICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yKFdlYlBhZ2UqKTsKKyAgICB2
aXJ0dWFsIH5XZWJJbnNwZWN0b3IoKTsKKworICAgIGJvb2wgY2FuQXR0YWNoV2luZG93KCk7CisK
KyAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3JDbGllbnQKKyAgICB2b2lkIG9wZW5Mb2Nh
bEluc3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KTsKKyAgICB2b2lkIGNsb3NlRnJvbnRl
bmRDb25uZWN0aW9uKCk7CisKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworCisgICAgdm9pZCB3
aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmKTsKKwor
ICAgIFdlYlBhZ2UqIG1fcGFnZTsKKworICAgIFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IG1fZnJv
bnRlbmRDb25uZWN0aW9uOworICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+PiBtX2Zyb250ZW5k
Q29ubmVjdGlvbkFjdGlvbnM7CisKKyAgICBib29sIG1fYXR0YWNoZWQgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9wcmV2aW91c0NhbkF0dGFjaCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmRhZjc0YjVlNmIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KQEAgLTAsMCAr
MSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitt
ZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3IgeworICAgIFNob3coKQorICAgIENsb3NlKCkKKworICAg
IFNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpCisKKyAgICBTaG93Q29uc29sZSgpCisgICAgU2hv
d1Jlc291cmNlcygpCisKKyAgICBTaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJh
bWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikKKworICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcg
dXJsKQorCisgICAgU3RhcnRQYWdlUHJvZmlsaW5nKCkKKyAgICBTdG9wUGFnZVByb2ZpbGluZygp
CisKKyAgICBTdGFydEVsZW1lbnRTZWxlY3Rpb24oKQorICAgIFN0b3BFbGVtZW50U2VsZWN0aW9u
KCkKKworICAgIFNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlv
bklkZW50aWZpZXIpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjBiMDY4MDE5ZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0wLDAg
KzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheS5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIFJlcGFpbnRJbmRp
Y2F0b3JMYXllckNsaWVudCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBSZXBhaW50SW5kaWNhdG9y
TGF5ZXJDbGllbnQoV2ViSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQpCisgICAgICAg
IDogbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgIHsKKyAgICB9CisgICAg
dmlydHVhbCB+UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KCkgeyB9Citwcml2YXRlOgorICAg
IHZvaWQgbm90aWZ5QW5pbWF0aW9uRW5kZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsIGNv
bnN0IFN0cmluZyYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5h
bmltYXRpb25FbmRlZEZvckxheWVyKGxheWVyKTsKKyAgICB9CisgICAgCisgICAgV2ViSW5zcGVj
dG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKK307CisKK1dlYkluc3BlY3RvckNsaWVudDo6
V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAg
ICAsIG1faGlnaGxpZ2h0T3ZlcmxheShudWxscHRyKQoreworfQorCitXZWJJbnNwZWN0b3JDbGll
bnQ6On5XZWJJbnNwZWN0b3JDbGllbnQoKQoreworICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX3Bh
aW50UmVjdExheWVycykKKyAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAK
KyAgICBtX3BhaW50UmVjdExheWVycy5jbGVhcigpOworCisgICAgaWYgKG1fcGFpbnRSZWN0T3Zl
cmxheSAmJiBtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQoreworICAgIGlmIChXZWJJbnNw
ZWN0b3IqIGluc3BlY3RvciA9IG1fcGFnZS0+aW5zcGVjdG9yKFdlYlBhZ2U6OkxhenlDcmVhdGlv
blBvbGljeTo6VXNlRXhpc3RpbmdPbmx5KSkKKyAgICAgICAgaW5zcGVjdG9yLT5jbG9zZSgpOwor
CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpmcm9udGVu
ZENvdW50Q2hhbmdlZCh1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBtX3BhZ2UtPmluc3BlY3RvckZy
b250ZW5kQ291bnRDaGFuZ2VkKGNvdW50KTsKK30KKworSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwqIFdlYkluc3BlY3RvckNsaWVudDo6b3BlbkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJv
bGxlciogY29udHJvbGxlcikKK3sKKyAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5vcGVuTG9jYWxJ
bnNwZWN0b3JGcm9udGVuZChjb250cm9sbGVyLT5pc1VuZGVyVGVzdCgpKTsKKworICAgIHJldHVy
biBudWxscHRyOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YnJpbmdGcm9udGVuZFRv
RnJvbnQoKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2Ut
Pmluc3BlY3RvcigpLT5icmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmRpZFJlc2l6ZU1haW5GcmFtZShGcmFtZSopCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVj
dG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnVwZGF0ZURvY2tpbmdBdmFpbGFi
aWxpdHkoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgpCit7Cisg
ICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKKyAgICAgICAgYXV0byBoaWdobGln
aHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7CisgICAgICAgIG1faGlnaGxp
Z2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJsYXkucHRyKCk7CisgICAgICAgIG1fcGFnZS0+Y29y
ZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5KFdURk1v
dmUoaGlnaGxpZ2h0T3ZlcmxheSksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisgICAg
ICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigpOworICAg
ICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworICAgIH0KKyNlbHNl
CisgICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5
OjpDb29yZGluYXRlU3lzdGVtOjpEb2N1bWVudCk7CisgICAgbV9wYWdlLT5zaG93SW5zcGVjdG9y
SGlnaGxpZ2h0KGhpZ2hsaWdodCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmhpZGVIaWdobGlnaHQoKQoreworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlm
IChtX2hpZ2hsaWdodE92ZXJsYXkpCisgICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92
ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1faGlnaGxpZ2h0T3Zlcmxh
eSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKKyNlbHNlCisgICAgbV9wYWdlLT5oaWRl
SW5zcGVjdG9ySGlnaGxpZ2h0KCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9w
YWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5KSB7Cisg
ICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMsIFBh
Z2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOworICAgICAgICBtX3BhZ2UtPmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgqbV9wYWlu
dFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CisgICAgfQor
CisgICAgaWYgKCFtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCisgICAgICAgIG1fcGFpbnRJ
bmRpY2F0b3JMYXllckNsaWVudCA9IG1ha2VVbmlxdWU8UmVwYWludEluZGljYXRvckxheWVyQ2xp
ZW50PigqdGhpcyk7CisKKyAgICBhdXRvIHBhaW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqbV9wYWlu
dEluZGljYXRvckxheWVyQ2xpZW50KTsKKyAgICAKKyAgICBwYWludExheWVyLT5zZXROYW1lKCJw
YWludCByZWN0Iik7CisgICAgcGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNE
KCkpOworICAgIHBhaW50TGF5ZXItPnNldFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7CisgICAg
cGFpbnRMYXllci0+c2V0U2l6ZShyZWN0LnNpemUoKSk7CisgICAgcGFpbnRMYXllci0+c2V0QmFj
a2dyb3VuZENvbG9yKENvbG9yKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKKworICAgIEtleWZy
YW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOworICAg
IGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMCwg
MSkpOworCisgICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlv
blZhbHVlPigwLjI1LCAwKSk7CisgICAgCisgICAgYXV0byBvcGFjaXR5QW5pbWF0aW9uID0gQW5p
bWF0aW9uOjpjcmVhdGUoKTsKKyAgICBvcGFjaXR5QW5pbWF0aW9uLT5zZXREdXJhdGlvbigwLjI1
KTsKKworICAgIHBhaW50TGF5ZXItPmFkZEFuaW1hdGlvbihmYWRlS2V5ZnJhbWVzLCBGbG9hdFNp
emUoKSwgb3BhY2l0eUFuaW1hdGlvbi5wdHIoKSwgIm9wYWNpdHkiX3MsIDApOworICAgIAorICAg
IEdyYXBoaWNzTGF5ZXImIHJhd0xheWVyID0gcGFpbnRMYXllci5nZXQoKTsKKyAgICBtX3BhaW50
UmVjdExheWVycy5hZGQoV1RGTW92ZShwYWludExheWVyKSk7CisKKyAgICBHcmFwaGljc0xheWVy
JiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5sYXllcigpOworICAgIG92
ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocmF3TGF5ZXIpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6YW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBsYXll
cikKK3sKKyAgICBHcmFwaGljc0xheWVyKiBub25Db25zdExheWVyID0gY29uc3RfY2FzdDxHcmFw
aGljc0xheWVyKj4obGF5ZXIpOworICAgIG5vbkNvbnN0TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKKyAgICBtX3BhaW50UmVjdExheWVycy5yZW1vdmUoKm5vbkNvbnN0TGF5ZXIpOworfQorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93SW5z
cGVjdG9ySW5kaWNhdGlvbigpCit7CisgICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySW5kaWNhdGlv
bigpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUluc3BlY3RvckluZGljYXRp
b24oKQoreworICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
KQoreworICAgIGlmIChlbmFibGVkKQorICAgICAgICBtX3BhZ2UtPmVuYWJsZUluc3BlY3Rvck5v
ZGVTZWFyY2goKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGFnZS0+ZGlzYWJsZUluc3BlY3Rvck5v
ZGVTZWFyY2goKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZWxlbWVu
dFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVj
dG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmVsZW1lbnRTZWxlY3Rpb25DaGFu
Z2VkKGFjdGl2ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkp
CisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChh
Y3RpdmUpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0TW9ja0NhcHR1cmVEZXZp
Y2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCit7CisgICAgaWYgKG1f
cGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnNldE1vY2tD
YXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFnZSkKK3sK
KyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIHBhZ2Ugb3Zlcmxh
eSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCisgICAgQVNTRVJU
KG1faGlnaGxpZ2h0T3ZlcmxheSk7CisgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gbnVsbHB0cjsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkm
LCBQYWdlKikKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0KFBhZ2VP
dmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQoreworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7Cit9CisKK2Jvb2wgV2Vi
SW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjI3YzNlZTE0MmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMCwwICsxLDk0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNs
aWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CitjbGFzcyBHcmFwaGljc0xheWVyOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBhZ2VPdmVybGF5
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudDsKKworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVi
bGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2ZyaWVuZCBjbGFzcyBS
ZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CitwdWJsaWM6CisgICAgV2ViSW5zcGVjdG9yQ2xp
ZW50KFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKKworcHJp
dmF0ZToKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQKKyAgICB2b2lkIGluc3BlY3Rl
ZFBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGZyb250ZW5kQ291bnRDaGFuZ2Vk
KHVuc2lnbmVkKSBvdmVycmlkZTsKKworICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBv
cGVuTG9jYWxGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGU7
CisgICAgdm9pZCBicmluZ0Zyb250ZW5kVG9Gcm9udCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
UmVzaXplTWFpbkZyYW1lKFdlYkNvcmU6OkZyYW1lKikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGhp
Z2hsaWdodCgpIG92ZXJyaWRlOworICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJyaWRlOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0
aW9uKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJy
aWRlOworCisgICAgdm9pZCBkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wpIG92ZXJyaWRlOwor
I2VuZGlmCisKKyAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpIG92ZXJyaWRl
OworICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOworCisg
ICAgYm9vbCBvdmVycmlkZXNTaG93UGFpbnRSZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2b2lkIHNob3dQYWludFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVy
cmlkZShPcHRpb25hbDxib29sPikgZmluYWw7CisKKyAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50
CisgICAgdm9pZCB3aWxsTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UmVjdChXZWJD
b3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsK
KworICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKik7CisKKyAgICBXZWJQYWdlKiBtX3BhZ2U7CisgICAgV2ViQ29yZTo6UGFnZU92ZXJs
YXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKKyAgICAKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92
ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwYWludElu
ZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CisgICAgSGFz
aFNldDxSZWY8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4+IG1fcGFpbnRSZWN0TGF5ZXJzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMx
ODllOTgyNWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEs
MTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgorCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcmlw
dENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdl
KHBhZ2UpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpy
ZXNldCgpCit7CisgICAgbV9mcm9udGVuZExvYWRlZCA9IGZhbHNlOworICAgIG1fc3VzcGVuZGVk
ID0gZmFsc2U7CisgICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlcjo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIG1fZnJvbnRlbmRM
b2FkZWQgPSB0cnVlOworCisgICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOworfQorCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCit7CisgICAg
QVNTRVJUKG1fZnJvbnRlbmRMb2FkZWQpOworICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOworICAg
IEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBtX3N1c3BlbmRlZCA9IHRydWU7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQor
eworICAgIEFTU0VSVChtX3N1c3BlbmRlZCk7CisKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwor
CisgICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3Bl
Y3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOworfQorCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBldmFs
dWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRp
c3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQo
Y29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KQoreworICAgIGV2YWx1YXRlT3JR
dWV1ZUV4cHJlc3Npb24obWFrZVN0cmluZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2go
W1wiIiwgY29tbWFuZCwgIlwiLCAiLCBhcmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIp
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNo
TWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBldmFsdWF0ZU9yUXVl
dWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVz
c2FnZUFzeW5jKCIsIG1lc3NhZ2UsICIpIikpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24pCit7CisgICAgaWYgKCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVk
KSB7CisgICAgICAgIG1fcXVldWUuYXBwZW5kKGV4cHJlc3Npb24pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUKG1fcXVldWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1f
cGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKKyAgICBt
X3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9y
aW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpCit7CisgICAgaWYgKG1f
cXVldWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiA6IG1fcXVldWUpIHsKKyAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7CisgICAgICAgIG1fcGFnZS5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNl
cHRpb24oZXhwcmVzc2lvbik7CisgICAgfQorCisgICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNWM0MjRlMmQ4
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIg
eworcHVibGljOgorICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdl
Jik7CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisg
ICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCB1bnN1c3BlbmQoKTsKKworICAgIHZvaWQgZGlz
cGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCk7CisgICAgdm9pZCBkaXNwYXRjaENv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KTsKKyAg
ICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGJvb2wgYXJndW1l
bnQpOworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlQXN5bmMoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24oY29uc3Qg
U3RyaW5nJik7CisgICAgdm9pZCBldmFsdWF0ZVF1ZXVlZEV4cHJlc3Npb25zKCk7CisKKyAgICBX
ZWJQYWdlJiBtX3BhZ2U7CisgICAgRGVxdWU8U3RyaW5nPiBtX3F1ZXVlOworICAgIGJvb2wgbV9m
cm9udGVuZExvYWRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3N1c3BlbmRlZCB7IGZhbHNlIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5j
MDE3ODUxZjY4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgiCisKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tbW9uVk0uaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlcj4gV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKTsK
K30KKworV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6V2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcigpCisgICAgOiBtX3F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBw
bGUuV2ViS2l0LldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIiKSkKK3sKK30KKworV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6fldlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIoKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Omlu
aXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKK3sKKyAgICBj
b25uZWN0aW9uLT5hZGRXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9xdWV1ZS5n
ZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6
bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQoreworICAgIC8vIElmIHRoZSB3ZWIgcHJvY2VzcyBo
YXMgbm90IGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgeWV0LCB0aGVuIHRoZXJlCisgICAgLy8gaXMg
bm8gVk0gdG8gYmUgbm90aWZpZWQgYW5kIHRodXMgbm8gaW5maW5pdGUgbG9vcCB0byBicmVhay4g
QmFpbCBvdXQuCisgICAgaWYgKCFXZWJDb3JlOjpjb21tb25WTU9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBKU0M6OlZNJiB2bSA9IFdlYkNvcmU6OmNvbW1vblZNKCk7CisgICAgdm0u
bm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5kOGY2YmQwMjBhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3Jr
UXVldWVNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVj
dG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gY3JlYXRlKCk7CisgICAgfldlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQ
Qzo6Q29ubmVjdGlvbiopOworICAgIAorcHJpdmF0ZToKKyAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyKCk7CisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdl
UmVjZWl2ZXIuCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dl
ckJyZWFrKCk7CisgICAgCisgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45ODcwZTUyYjczYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpA
QCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIgeworICAgIE5vdGlm
eU5lZWREZWJ1Z2dlckJyZWFrKCkKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjFmYWE2ZjZlZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTAsMCArMSw0
MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JVSS5oIgorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK1JlZjxXZWJJbnNwZWN0b3JVST4gV2ViSW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdl
JiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclVJKHBhZ2Up
KTsKK30KKworV2ViSW5zcGVjdG9yVUk6OldlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCisg
ICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCisg
ICAgLCBtX2RlYnVnZ2FibGVJbmZvKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSkKK3sKKyAg
ICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEluc3BlY3RvckFk
ZGl0aW9uc0VuYWJsZWQodHJ1ZSk7CisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5zZXRJbWFnZUJpdG1hcEVuYWJsZWQodHJ1ZSk7CisjaWYgRU5BQkxFKFdFQkdM
MikKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkdM
MkVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZXN0YWJs
aXNoQ29ubmVjdGlvbihXZWJQYWdlUHJveHlJZGVudGlmaWVyIGluc3BlY3RlZFBhZ2VJZGVudGlm
aWVyLCBjb25zdCBEZWJ1Z2dhYmxlSW5mb0RhdGEmIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVy
VGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQoreworICAgIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIgPSBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllcjsKKyAgICBtX2RlYnVnZ2FibGVJbmZv
ID0gZGVidWdnYWJsZUluZm87CisgICAgbV91bmRlclRlc3QgPSB1bmRlclRlc3Q7CisgICAgbV9p
bnNwZWN0aW9uTGV2ZWwgPSBpbnNwZWN0aW9uTGV2ZWw7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5yZXNldCgpOworCisgICAgbV9mcm9udGVuZENvbnRyb2xsZXIgPSAmbV9wYWdlLmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBtX2Zyb250ZW5kQ29udHJvbGxl
ci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7CisKKyAgICB1cGRhdGVDb25uZWN0
aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnVwZGF0ZUNvbm5lY3Rpb24oKQorewor
ICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7
CisgICAgfQorCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgSVBDOjpDb25uZWN0
aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRm
b3JtQ29ubmVjdGlvbigpOworICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0
aW9uSWRlbnRpZmllcihzb2NrZXRQYWlyLnNlcnZlcik7CisgICAgSVBDOjpBdHRhY2htZW50IGNv
bm5lY3Rpb25DbGllbnRQb3J0KHNvY2tldFBhaXIuY2xpZW50KTsKKyNlbGlmIE9TKERBUldJTikK
KyAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7CisgICAgaWYg
KG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVD
RUlWRSwgJmxpc3RlbmluZ1BvcnQpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgQ1JBU0goKTsK
KworICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGxpc3Rl
bmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSAhPSBLRVJO
X1NVQ0NFU1MpCisgICAgICAgIENSQVNIKCk7CisKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCk7CisgICAgSVBDOjpBdHRh
Y2htZW50IGNvbm5lY3Rpb25DbGllbnRQb3J0KGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVf
TU9WRV9TRU5EKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGllbnQ7CisgICAgSVBDOjpDb25u
ZWN0aW9uOjpjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhjb25uZWN0aW9uSWRlbnRp
ZmllciwgY29ubkNsaWVudCk7CisgICAgSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25DbGllbnRQ
b3J0KGNvbm5DbGllbnQpOworI2Vsc2UKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
bjsKKyNlbmRpZgorCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9TKERBUldJTikg
fHwgUExBVEZPUk0oV0lOKQorICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rp
b246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzKTsK
KyAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5vcGVuKCk7CisjZW5kaWYKKworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbkNsaWVu
dFBvcnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQor
ICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOworCisgICAgbV9mcm9u
dGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29y
ZVBhZ2UoKSk7CisgICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29y
bGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpm
cm9udGVuZExvYWRlZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRM
b2FkZWQoKTsKKworICAgIC8vIFRlbGwgdGhlIG5ldyBmcm9udGVuZCBhYm91dCB0aGUgY3VycmVu
dCBkb2NrIHN0YXRlLiBJZiB0aGUgd2luZG93IG9iamVjdAorICAgIC8vIGNsZWFyZWQgZHVlIHRv
IGEgcmVsb2FkLCB0aGUgZG9jayBzdGF0ZSB3b24ndCBiZSByZXNlbnQgZnJvbSBVSVByb2Nlc3Mu
CisgICAgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKG1fZG9ja2luZ1VuYXZhaWxhYmxlKTsKKyAgICBz
ZXREb2NrU2lkZShtX2RvY2tTaWRlKTsKKyAgICBzZXRJc1Zpc2libGUobV9pc1Zpc2libGUpOwor
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kTG9hZGVkKCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOworCisgICAgYnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCit7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0
IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJv
bWUoKS53aW5kb3dSZWN0KCk7CisgICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7CisgICAgbV9wYWdl
LmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRvdygpCit7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OworCisgICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29u
bmVjdGlvbi0+aW52YWxpZGF0ZSgpOworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9mcm9udGVuZENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIp
OworICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9IG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENs
aWVudCgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllciA9IHsgfTsKKyAgICBtX3Vu
ZGVyVGVzdCA9IGZhbHNlOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpyZW9wZW4oKQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZW9wZW4oKSwgbV9pbnNwZWN0ZWRQYWdl
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlc2V0U3RhdGUoKQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpSZXNldFN0YXRlKCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOworfQorCitXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uIFdlYkluc3BlY3RvclVJOjp1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVxdWVzdFNldERvY2tTaWRlKERv
Y2tTaWRlIHNpZGUpCit7CisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpOworICAgIHN3aXRjaCAoc2lkZSkgeworICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2Vk
OgorICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEZXRhY2goKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgorICAgICAg
ICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKKyAgICAgICAgd2Vi
UHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6QXR0YWNoTGVmdCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2NrU2lkZTo6Qm90dG9tOgorICAgICAgICB3ZWJQcm9j
ZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpBdHRhY2hCb3R0b20oKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja1NpZGUo
RG9ja1NpZGUgc2lkZSkKK3sKKyAgICBBU0NJSUxpdGVyYWwgc2lkZVN0cmluZyB7IEFTQ0lJTGl0
ZXJhbDo6bnVsbCgpIH07CisKKyAgICBzd2l0Y2ggKHNpZGUpIHsKKyAgICBjYXNlIERvY2tTaWRl
OjpVbmRvY2tlZDoKKyAgICAgICAgc2lkZVN0cmluZyA9ICJ1bmRvY2tlZCJfczsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKKyAgICAgICAgc2lkZVN0cmluZyA9
ICJyaWdodCJfczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERvY2tTaWRlOjpMZWZ0Ogor
ICAgICAgICBzaWRlU3RyaW5nID0gImxlZnQiX3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBEb2NrU2lkZTo6Qm90dG9tOgorICAgICAgICBzaWRlU3RyaW5nID0gImJvdHRvbSJfczsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9kb2NrU2lkZSA9IHNpZGU7CisKKyAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERvY2tTaWRlIl9zLCBTdHJp
bmcoc2lkZVN0cmluZykpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NraW5nVW5h
dmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkKK3sKKyAgICBtX2RvY2tpbmdVbmF2YWlsYWJsZSA9
IHVuYXZhaWxhYmxlOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21t
YW5kKCJzZXREb2NraW5nVW5hdmFpbGFibGUiX3MsIHVuYXZhaWxhYmxlKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSTo6c2V0SXNWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBtX2lzVmlz
aWJsZSA9IHZpc2libGU7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNldElzVmlzaWJsZSJfcywgdmlzaWJsZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6
OmNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCit7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdl
U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6U2V0U2hlZXRSZWN0KHJlY3QpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYg
dXJsKQoreworICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7CisgICAgICAgIG1fYmFja2Vu
ZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6T3BlbkluTmV3VGFiKHVy
bCksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdJbnNwZWN0
ZWRQYWdlVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNl
U2F2ZUFzKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1l
LCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjphcHBlbmQoY29uc3QgV1RGOjpT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCkKK3sKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50KSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6Omluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9U
RUxFTUVUUlkpCitib29sIFdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5n
KCkKK3sKKyAgICByZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3Rp
Y0xvZ2dpbmdFbmFibGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0
aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQ6OlZhbHVlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKK3sKKyAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhW
YWx1ZURpY3Rpb25hcnkoZXZlbnROYW1lLCAiV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9z
dGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQor
eworICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5l
dmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgorICAg
IEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7CisgICAg
bV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKKworICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOworfQorI2VuZGlmCisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDb25zb2xlKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dDb25zb2xlIl9zKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2hvd1Jlc291cmNlcygpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93UmVzb3VyY2VzIl9zKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGNvbnN0IFN0cmluZyYgZnJhbWVJZGVu
dGlmaWVyKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgi
c2hvd01haW5SZXNvdXJjZUZvckZyYW1lIl9zLCBmcmFtZUlkZW50aWZpZXIpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJOjpzdGFydFBhZ2VQcm9maWxpbmcoKQoreworICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVk
Il9zLCB0cnVlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RvcFBhZ2VQcm9maWxpbmco
KQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0VGlt
ZWxpbmVQcm9maWxpbmdFbmFibGVkIl9zLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
VUk6OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJfcywgdHJ1ZSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldEVsZW1lbnRTZWxl
Y3Rpb25FbmFibGVkIl9zLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmRpZFNh
dmUoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlz
cGF0Y2hDb21tYW5kKCJzYXZlZFVSTCJfcywgdXJsKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgiYXBwZW5kZWRUb1VSTCJfcywgdXJsKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaE1lc3NhZ2VBc3lu
YyhtZXNzYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVBhdXNlZCgpCit7Cisg
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuc3VzcGVuZCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjpwYWdlVW5wYXVzZWQoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnVu
c3VzcGVuZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsK
K30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Cit9CisKKyNp
ZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorYm9v
bCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3Ry
aW5nc1VSTCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKK30KKyNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RL
KSAmJiAhUExBVEZPUk0oV0lOKQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjM5ZjIxYzliNjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJ
LmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgor
I2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUg
IldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRl
YnVnZ2FibGVUeXBlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBDZXJ0aWZp
Y2F0ZUluZm87CitjbGFzcyBGbG9hdFJlY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYkluc3BlY3RvclVJPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGlj
IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYpOworCisgICAgLy8gSW1wbGVtZW50
ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CisKKyAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAorICAgIHZvaWQgZGlkQ2xv
c2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyAvKiBEbyBub3RoaW5nLCB0aGUgaW5zcGVj
dGVkIHBhZ2UgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkIGFuZCBtYXkgYmUgZ2V0dGluZyByZXBs
YWNlZC4gKi8gfQorICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJp
ZGUgeyBjbG9zZVdpbmRvdygpOyB9CisKKyAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkg
bWVzc2FnZXMKKyAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRp
ZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiwg
Ym9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7CisgICAgdm9pZCB1cGRh
dGVDb25uZWN0aW9uKCk7CisKKyAgICB2b2lkIHNob3dDb25zb2xlKCk7CisgICAgdm9pZCBzaG93
UmVzb3VyY2VzKCk7CisKKyAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBT
dHJpbmcmIGZyYW1lSWRlbnRpZmllcik7CisKKyAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygp
OworICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKKworICAgIHZvaWQgc3RhcnRFbGVtZW50
U2VsZWN0aW9uKCk7CisgICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOworCisgICAgdm9p
ZCBhdHRhY2hlZEJvdHRvbSgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkJvdHRvbSk7IH0KKyAg
ICB2b2lkIGF0dGFjaGVkUmlnaHQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpSaWdodCk7IH0K
KyAgICB2b2lkIGF0dGFjaGVkTGVmdCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9
CisgICAgdm9pZCBkZXRhY2hlZCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsg
fQorCisgICAgdm9pZCBzZXREb2NrU2lkZShEb2NrU2lkZSk7CisgICAgdm9pZCBzZXREb2NraW5n
VW5hdmFpbGFibGUoYm9vbCk7CisKKyAgICB2b2lkIHNldElzVmlzaWJsZShib29sKTsKKworICAg
IHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBkaWRBcHBlbmQoY29u
c3QgU3RyaW5nJiB1cmwpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJik7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICB2b2lkIHNl
dERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhbGlhYmxlKTsKKyNlbmRpZgorCisg
ICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKKyAgICB2b2lkIHdpbmRvd09i
amVjdENsZWFyZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOworICAgIHZvaWQgbW92
ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlbW90
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIGxvY2FsaXplZFN0
cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJM
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBJbnNwZWN0b3I6OkRlYnVn
Z2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsgfQorICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5h
bWUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9pbnNwZWN0aW9uTGV2ZWw7IH0KKworICAgIHZvaWQgYnJpbmdUb0Zyb250KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBjbG9zZVdpbmRvdygpIG92ZXJyaWRlOworICAgIHZvaWQgcmVv
cGVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXNldFN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICBX
ZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRl
KERvY2tTaWRlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgo
dW5zaWduZWQpIG92ZXJyaWRlOworCisgICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25z
dCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7
CisgICAgdm9pZCBhcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJp
bmcmIGNvbnRlbnQpIG92ZXJyaWRlOworCisgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNv
bnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOworCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9URUxFTUVUUlkpCisgICAgYm9vbCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7IH0KKyAgICB2b2lkIGxvZ0RpYWdub3N0
aWNFdmVudChjb25zdCBXVEY6OlN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisjZW5kaWYK
KworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHBhZ2VQYXVzZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhZ2VVbnBhdXNl
ZCgpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fdW5kZXJUZXN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yVUko
V2ViUGFnZSYpOworCisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsKKyAgICBSZWZQdHI8
SVBDOjpDb25uZWN0aW9uPiBtX2JhY2tlbmRDb25uZWN0aW9uOworCisgICAgLy8gS2VlcCBhIHBv
aW50ZXIgdG8gdGhlIGZyb250ZW5kJ3MgaW5zcGVjdG9yIGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4g
Z29pbmcgdGhyb3VnaAorICAgIC8vIGNvcmVQYWdlKCksIHNpbmNlIHdlIG1heSBuZWVkIGl0IGFm
dGVyIHRoZSBmcm9udGVuZCdzIHBhZ2UgaGFzIHN0YXJ0ZWQgZGVzdHJ1Y3Rpb24uCisgICAgV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogbV9mcm9udGVuZENvbnRyb2xsZXIgeyBudWxscHRy
IH07CisKKyAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVyIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXI7CisgICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNlIH07CisgICAgRGVidWdnYWJsZUluZm9E
YXRhIG1fZGVidWdnYWJsZUluZm87CisgICAgYm9vbCBtX2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9URUxFTUVUUlkpCisgICAgYm9vbCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsg
ZmFsc2UgfTsKKyNlbmRpZgorCisgICAgRG9ja1NpZGUgbV9kb2NrU2lkZSB7IERvY2tTaWRlOjpV
bmRvY2tlZCB9OworICAgIHVuc2lnbmVkIG1faW5zcGVjdGlvbkxldmVsIHsgMSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTRmMTM4NWQ0ODkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1l
c3NhZ2VzLmluCkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yVUkgeworICAgIEVzdGFi
bGlzaENvbm5lY3Rpb24oV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyIGluc3BlY3RlZFBh
Z2VJZGVudGlmaWVyLCBzdHJ1Y3QgV2ViS2l0OjpEZWJ1Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJs
ZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCisgICAgVXBk
YXRlQ29ubmVjdGlvbigpCisKKyAgICBBdHRhY2hlZEJvdHRvbSgpCisgICAgQXR0YWNoZWRSaWdo
dCgpCisgICAgQXR0YWNoZWRMZWZ0KCkKKyAgICBEZXRhY2hlZCgpCisgICAgU2V0RG9ja2luZ1Vu
YXZhaWxhYmxlKGJvb2wgdW5hdmFpbGFibGUpCisgICAgU2V0SXNWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIFNldERpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQorI2VuZGlmCisKKyAgICBTaG93Q29uc29s
ZSgpCisgICAgU2hvd1Jlc291cmNlcygpCisKKyAgICBTaG93TWFpblJlc291cmNlRm9yRnJhbWUo
U3RyaW5nIGZyYW1lSWRlbnRpZmllcikKKworICAgIFN0YXJ0UGFnZVByb2ZpbGluZygpCisgICAg
U3RvcFBhZ2VQcm9maWxpbmcoKQorCisgICAgU3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKKyAgICBT
dG9wRWxlbWVudFNlbGVjdGlvbigpCisKKyAgICBEaWRTYXZlKFN0cmluZyB1cmwpCisgICAgRGlk
QXBwZW5kKFN0cmluZyB1cmwpCisKKyAgICBTZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nIG1l
c3NhZ2UpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYTcwZjZmZDUyMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6
OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdl
KQoreworfQorCitTdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6aWRlbnRpZmllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRvVGFyZ2V0SUQobV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisK
K3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCit7CisgICAgaWYgKG1fY2hh
bm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2hhbm5lbCA9IG1ha2VVbmlxdWU8V2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbD4obV9wYWdlLCBpZGVudGlmaWVyKCksIGNv
bm5lY3Rpb25UeXBlKTsKKyAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCisgICAgICAgIG1fcGFn
ZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCptX2No
YW5uZWwpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmRpc2Nvbm5lY3QoKQor
eworICAgIGlmICghbV9jaGFubmVsKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fcGFnZS5j
b3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKKyAgICBtX2NoYW5uZWwucmVzZXQo
KTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpzZW5kTWVzc2FnZVRvVGFyZ2V0
QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fcGFnZS5jb3JlUGFn
ZSgpKQorICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRp
c3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKworU3RyaW5nIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQ6OnRvVGFyZ2V0SUQoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgcGFnZUlE
KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJwYWdlLSIsIHBhZ2VJRC50b1VJbnQ2NCgpKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZjYmQ3ZmFkNWZmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWw7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQpOworcHVibGljOgor
ICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYpOworICAgIH5XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KKworICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3Qg
ZmluYWw7CisKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNv
bm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJy
aWRlOworCisgICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyKTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjkw
MTdjNGVkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDkx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgorI2luY2x1ZGUg
IldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXIoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9wYWdlVGFyZ2V0
KHBhZ2UpCit7CisgICAgLy8gRG8gbm90IHNlbmQgdGhlIHBhZ2UgdGFyZ2V0IHRvIHRoZSBVSVBy
b2Nlc3MsIHRoZSBXZWJQYWdlUHJveHkgd2lsbCBtYW5hZ2VyIHRoaXMgZm9yIHVzLgorICAgIG1f
dGFyZ2V0cy5zZXQobV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgJm1fcGFnZVRhcmdldCk7Cit9
CisKK1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjp+V2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXIoKQoreworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyOjphZGRUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKK3sK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdGFyZ2V0cy5zZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwg
JnRhcmdldCk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKKworICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZUlu
c3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRpZmllcigpLCB0YXJnZXQudHlwZSgpKSk7Cit9CisK
K3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnJlbW92ZVRhcmdldChJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldCYgdGFyZ2V0KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UodGFyZ2V0LmlkZW50aWZpZXIoKSAhPSBtX3BhZ2VUYXJnZXQuaWRlbnRpZmllcigpLCAiU2hv
dWxkIG5ldmVyIHJlbW92ZSB0aGUgbWFpbiB0YXJnZXQuIik7CisKKyAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZXN0cm95SW5zcGVjdG9yVGFyZ2V0KHRhcmdldC5pZGVu
dGlmaWVyKCkpKTsKKworICAgIG1fdGFyZ2V0cy5yZW1vdmUodGFyZ2V0LmlkZW50aWZpZXIoKSk7
Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmNvbm5lY3RJbnNw
ZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQoreworICAgIGF1dG8gdGFyZ2V0ID0gbV90
YXJnZXRzLmdldCh0YXJnZXRJZCk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybjsK
KworICAgIHRhcmdldC0+Y29ubmVjdChjb25uZWN0aW9uVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0
SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPmRp
c2Nvbm5lY3QoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6
c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIGF1dG8gdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJn
ZXRJZCk7CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIHRhcmdldC0+
c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YzkzMWRhZDFjOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CitjbGFzcyBJbnNwZWN0b3JUYXJnZXQ7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
Q29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoV2ViUGFnZSYpOworICAgIH5XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcigpOworCisgICAgdm9pZCBhZGRUYXJnZXQoSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKKyAgICB2b2lkIHJlbW92ZVRhcmdldChJbnNwZWN0b3I6
Okluc3BlY3RvclRhcmdldCYpOworCisgICAgdm9pZCBjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSk7CisgICAgdm9pZCBkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQp
OworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlJiBt
X3BhZ2U7CisgICAgV2ViUGFnZUluc3BlY3RvclRhcmdldCBtX3BhZ2VUYXJnZXQ7CisgICAgSGFz
aE1hcDxTdHJpbmcsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Kj4gbV90YXJnZXRzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZTFiNWY3MTM3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3Bw
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgorCisjaW5jbHVk
ZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV90YXJnZXRJ
ZCh0YXJnZXRJZCkKKyAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpCit7Cit9
CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQobV90
YXJnZXRJZCwgbWVzc2FnZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgxODRhYzViZGEyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNz
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwpOworcHVibGljOgorICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwoV2ViUGFnZSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsOjpDb25uZWN0aW9uVHlwZSk7CisgICAgdmlydHVhbCB+V2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbCgpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKKyAgICBDb25uZWN0
aW9uVHlwZSBjb25uZWN0aW9uVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29ubmVj
dGlvblR5cGU7IH0KKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIG92ZXJyaWRlOworCisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIFN0cmluZyBt
X3RhcmdldElkOworICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlw
ZSBtX2Nvbm5lY3Rpb25UeXBlIHsgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rp
b25UeXBlOjpSZW1vdGUgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlH
dGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVj
dG9yVUlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYjRm
OTdmZThkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkluc3BlY3RvclVJLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKwor
I2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJ
bnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBX
ZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9l
bi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Cit9CisKK1N0cmluZyBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmlu
ZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvTG9jYWxpemF0aW9ucy9lbi5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVj
dG9yVUlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJ
bnNwZWN0b3JVSU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
OWU1NWYzZDU4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQpAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJ
LmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgorCisjaWYgUExBVEZPUk0oTUFD
KQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgp
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTdHJpbmcgd2ViSW5zcGVjdG9yVUlM
b2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxl
IGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAg
aWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5nICpw
YXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5cGU6
QCJqcyJdOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAor
ICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFi
c29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmlu
Z3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiB3ZWJJbnNwZWN0b3JVSUxvY2FsaXplZFN0cmlu
Z3NVUkwoKTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJp
bmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJp
bmdzVVJMKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMGIwNjgwMTllZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yQ2xpZW50LmgiCi0KLSNpbmNsdWRlICJE
cmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgotI2luY2x1ZGUgIldlYlBh
Z2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJv
bGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JPdmVybGF5Lmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY2xhc3Mg
UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50IGZpbmFsIDogcHVibGljIEdyYXBoaWNzTGF5ZXJD
bGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudChXZWJJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNsaWVu
dCkKLSAgICAgICAgOiBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCi0gICAgewot
ICAgIH0KLSAgICB2aXJ0dWFsIH5SZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQoKSB7IH0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBub3RpZnlBbmltYXRpb25FbmRlZChjb25zdCBHcmFwaGljc0xheWVy
KiBsYXllciwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVj
dG9yQ2xpZW50LmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIobGF5ZXIpOwotICAgIH0KLSAgICAKLSAg
ICBXZWJJbnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OwotfTsKLQotV2ViSW5zcGVj
dG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViUGFnZSogcGFnZSkKLSAgICA6IG1fcGFn
ZShwYWdlKQotICAgICwgbV9oaWdobGlnaHRPdmVybGF5KG51bGxwdHIpCi17Ci19Ci0KLVdlYklu
c3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCi17Ci0gICAgZm9yIChhdXRvJiBs
YXllciA6IG1fcGFpbnRSZWN0TGF5ZXJzKQotICAgICAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOwotICAgIAotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9w
YWludFJlY3RPdmVybGF5ICYmIG1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLT5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgq
bV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCi17Ci0gICAg
aWYgKFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gbV9wYWdlLT5pbnNwZWN0b3IoV2ViUGFnZTo6
TGF6eUNyZWF0aW9uUG9saWN5OjpVc2VFeGlzdGluZ09ubHkpKQotICAgICAgICBpbnNwZWN0b3It
PmNsb3NlKCk7Ci0KLSAgICBkZWxldGUgdGhpczsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkIGNvdW50KQotewotICAgIG1fcGFnZS0+
aW5zcGVjdG9yRnJvbnRlbmRDb3VudENoYW5nZWQoY291bnQpOwotfQotCi1JbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbCogV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuTG9jYWxGcm9udGVuZChJbnNw
ZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQotewotICAgIG1fcGFnZS0+aW5zcGVjdG9yKCkt
Pm9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGNvbnRyb2xsZXItPmlzVW5kZXJUZXN0KCkpOwot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpicmlu
Z0Zyb250ZW5kVG9Gcm9udCgpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAg
ICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6ZGlkUmVzaXplTWFpbkZyYW1lKEZyYW1lKikKLXsKLSAgICBpZiAobV9w
YWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+dXBkYXRlRG9j
a2luZ0F2YWlsYWJpbGl0eSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxp
Z2h0KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIW1faGlnaGxpZ2h0T3ZlcmxheSkgewotICAgICAgICBh
dXRvIGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzKTsKLSAgICAg
ICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3ZlcmxheS5wdHIoKTsKLSAgICAgICAg
bV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92
ZXJsYXkoV1RGTW92ZShoaWdobGlnaHRPdmVybGF5KSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpG
YWRlKTsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnN0b3BGYWRlT3V0QW5pbWF0
aW9uKCk7Ci0gICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0g
ICAgfQotI2Vsc2UKLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmdldEhpZ2hsaWdodChoaWdobGlnaHQsIEluc3Bl
Y3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OkRvY3VtZW50KTsKLSAgICBtX3BhZ2UtPnNo
b3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCi17Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgaWYgKG1faGlnaGxpZ2h0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFn
ZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgqbV9oaWdo
bGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwotI2Vsc2UKLSAgICBt
X3BhZ2UtPmhpZGVJbnNwZWN0b3JIaWdobGlnaHQoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BhaW50UmVjdE92
ZXJsYXkpIHsKLSAgICAgICAgbV9wYWludFJlY3RPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0
ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgICAgIG1f
cGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVy
bGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RGYWRl
KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCkKLSAgICAg
ICAgbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50ID0gbWFrZVVuaXF1ZTxSZXBhaW50SW5kaWNh
dG9yTGF5ZXJDbGllbnQ+KCp0aGlzKTsKLQotICAgIGF1dG8gcGFpbnRMYXllciA9IEdyYXBoaWNz
TGF5ZXI6OmNyZWF0ZShtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCksICptX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpOwotICAgIAotICAgIHBhaW50TGF5ZXIt
PnNldE5hbWUoInBhaW50IHJlY3QiKTsKLSAgICBwYWludExheWVyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50M0QoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0UG9zaXRpb24ocmVjdC5sb2NhdGlv
bigpKTsKLSAgICBwYWludExheWVyLT5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBwYWludExh
eWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC4yZikpOwot
Ci0gICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmFkZUtleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSk7Ci0gICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlv
blZhbHVlPigwLCAxKSk7Ci0KLSAgICBmYWRlS2V5ZnJhbWVzLmluc2VydChtYWtlVW5pcXVlPEZs
b2F0QW5pbWF0aW9uVmFsdWU+KDAuMjUsIDApKTsKLSAgICAKLSAgICBhdXRvIG9wYWNpdHlBbmlt
YXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIG9wYWNpdHlBbmltYXRpb24tPnNldER1
cmF0aW9uKDAuMjUpOwotCi0gICAgcGFpbnRMYXllci0+YWRkQW5pbWF0aW9uKGZhZGVLZXlmcmFt
ZXMsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5QW5pbWF0aW9uLnB0cigpLCAib3BhY2l0eSJfcywgMCk7
Ci0gICAgCi0gICAgR3JhcGhpY3NMYXllciYgcmF3TGF5ZXIgPSBwYWludExheWVyLmdldCgpOwot
ICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmFkZChXVEZNb3ZlKHBhaW50TGF5ZXIpKTsKLQotICAgIEdy
YXBoaWNzTGF5ZXImIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxheWVy
KCk7Ci0gICAgb3ZlcmxheVJvb3RMYXllci5hZGRDaGlsZChyYXdMYXllcik7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRpb25FbmRlZEZvckxheWVyKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIG5vbkNvbnN0TGF5ZXIgPSBjb25z
dF9jYXN0PEdyYXBoaWNzTGF5ZXIqPihsYXllcik7Ci0gICAgbm9uQ29uc3RMYXllci0+cmVtb3Zl
RnJvbVBhcmVudCgpOwotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLnJlbW92ZSgqbm9uQ29uc3RMYXll
cik7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkKLXsKLSAgICBtX3BhZ2UtPnNob3dJbnNwZWN0
b3JJbmRpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSW5zcGVj
dG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShi
b29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIG1fcGFnZS0+ZW5hYmxl
SW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYWdlLT5kaXNhYmxl
SW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAobV9w
YWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+ZWxlbWVudFNl
bGVjdGlvbkNoYW5nZWQoYWN0aXZlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnRp
bWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAobV9wYWdlLT5p
bnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+dGltZWxpbmVSZWNvcmRp
bmdDaGFuZ2VkKGFjdGl2ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLXsK
LSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3Io
KS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKGVuYWJsZWQpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQYWdl
KiBwYWdlKQotewotICAgIGlmIChwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUg
cGFnZSBvdmVybGF5IGlzIG1vdmluZyBhd2F5IGZyb20gdGhlIHdlYiBwYWdlLCByZXNldCBpdC4K
LSAgICBBU1NFUlQobV9oaWdobGlnaHRPdmVybGF5KTsKLSAgICBtX2hpZ2hsaWdodE92ZXJsYXkg
PSBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkTW92ZVRvUGFnZShQ
YWdlT3ZlcmxheSYsIFBhZ2UqKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZHJh
d1JlY3QoUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlSZWN0Ki8pCi17Ci0gICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKLX0K
LQotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDI3YzNlZTE0MmUxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZU92ZXJsYXkuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotY2xh
c3MgSW50UmVjdDsKLWNsYXNzIFBhZ2VPdmVybGF5OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKLQot
Y2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLWZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7
Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFs
IH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBXZWJDb3JlOjpJbnNw
ZWN0b3JDbGllbnQKLSAgICB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkKSBvdmVycmlkZTsKLQotICAg
IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBvcGVuTG9jYWxGcm9udGVuZChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBicmluZ0Zyb250ZW5kVG9G
cm9udCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVzaXplTWFpbkZyYW1lKFdlYkNvcmU6OkZy
YW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGhpZ2hsaWdodCgpIG92ZXJyaWRlOwotICAgIHZv
aWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRTZXRTZWFy
Y2hpbmdGb3JOb2RlKGJvb2wpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIGVsZW1lbnRT
ZWxlY3Rpb25DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRp
bmdDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBvdmVycmlkZXNTaG93UGFpbnRS
ZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHNob3dQYWlu
dFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNl
dE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPikgZmluYWw7
Ci0KLSAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdm9pZCB3aWxsTW92ZVRvUGFnZShX
ZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYW5pbWF0aW9uRW5kZWRG
b3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0KLSAgICBXZWJQYWdlKiBt
X3BhZ2U7Ci0gICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsKLSAg
ICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3ZlcmxheTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PiBtX3BhaW50
SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0gICAgSGFzaFNldDxSZWY8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4+IG1fcGFpbnRSZWN0TGF5ZXJzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNw
ZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJ
bnNwZWN0b3JVSS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ4ZjBjMjQ2
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVXZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0
b3JVSS5oIgotCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotCi0jaWYg
IVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJ
PiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1SZW1v
dGVXZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAg
ICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKLXsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5m
b0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwp
Ci17Ci0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwotICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOwotCi0gICAgbV9wYWdl
LmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCh0aGlzKTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Ci0gICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFp
bGFibGUiX3MsIHRydWUpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRTYXZl
KGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3Bh
dGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hN
ZXNzYWdlQXN5bmMobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNl
bmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSks
IG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjp3
aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAg
IG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5kSG9z
dCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgp
KTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmZy
b250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExv
YWRlZCgpOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJz
ZXRJc1Zpc2libGUiX3MsIHRydWUpOwotCi0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVj
dChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQot
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkp
Ci17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUo
KS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLmNv
cmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKLX0KLQotV2ViQ29y
ZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS5j
b3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQotewotICAgIG1f
cGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQobnVsbHB0cik7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmlu
ZyYgdXJsKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpPcGVuSW5O
ZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi17Ci0gICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2
NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQotewotICAgIC8vIERvIG5vdGhpbmcuIFRoZSByZW1vdGUgc2lkZSBj
YW4ga25vdyBpZiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2VkLgotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNo
b3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0K
LQotSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGVidWdn
YWJsZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLmRlYnVnZ2Fi
bGVUeXBlOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3Jt
TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZv
cm1OYW1lOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVy
c2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRW
ZXJzaW9uOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1Y3RW
ZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9k
dWN0VmVyc2lvbjsKLX0KLQotYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0SXNTaW11
bGF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldElzU2lt
dWxhdG9yOwotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi1ib29sIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkKLXsKLSAgICByZXR1
cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVk
KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChj
b25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpW
YWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCi17Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0
aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0
aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFi
bGUpCi17Ci0gICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91
bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQu
Ci0gICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsK
LSAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotCi0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2lu
Z0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Ci19Ci0jZW5kaWYK
LQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4p
Ci1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19
Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JN
KFdJTikKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjRhZTFjMWRhYTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
Ci0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRpZmljYXRlSW5mbzsKLWNsYXNzIEZsb2F0UmVjdDsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFJlbW90
ZVdlYkluc3BlY3RvclVJIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5zcGVj
dG9yVUk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVXZWJJ
bnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKLQotICAgIC8vIEltcGxlbWVudGVkIGluIGdl
bmVyYXRlZCBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKLSAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOwotCi0gICAgLy8gQ2FsbGVkIGJ5IFJlbW90ZVdlYkluc3BlY3RvclVJIG1lc3NhZ2VzCi0g
ICAgdm9pZCBpbml0aWFsaXplKERlYnVnZ2FibGVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcmIGJh
Y2tlbmRDb21tYW5kc1VSTCk7Ci0gICAgdm9pZCBkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKTsK
LSAgICB2b2lkIGRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wpOwot
I2VuZGlmCi0KLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudAotICAgIHZv
aWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJvbnRlbmRMb2Fk
ZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5nZVNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRl
OwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOwotCi0g
ICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBTdHJp
bmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBiYWNr
ZW5kQ29tbWFuZHNVUkwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VS
TDsgfQotICAgIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
dGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFdlYkNvcmU6OlVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBicmluZ1RvRnJvbnQoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsb3NlV2luZG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW9wZW4oKSBvdmVycmlkZTsK
LSAgICB2b2lkIHJlc2V0U3RhdGUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgb3BlbkluTmV3VGFi
KGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2b2lkIHNhdmUoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZv
cmNlU2F2ZUFzKSBvdmVycmlkZTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGluc3BlY3RlZFVSTENo
YW5nZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93Q2VydGlmaWNhdGUo
Y29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5k
TWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygp
IG92ZXJyaWRlOwotICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVycmlk
ZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9Ci0gICAgdm9pZCBsb2dE
aWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFdlYkNvcmU6OkRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmKSBvdmVycmlkZTsKLSNlbmRp
ZgotCi0gICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIGJv
b2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHVuc2lnbmVk
IGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDE7IH0KLSAgICB2b2lk
IHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjaGFu
Z2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBj
aGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBSZW1vdGVXZWJJbnNwZWN0b3JVSShXZWJQYWdlJik7Ci0KLSAgICBX
ZWJQYWdlJiBtX3BhZ2U7Ci0gICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OwotICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVn
Z2FibGVJbmZvOwotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVj
dG9yVUkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmJmN2U0Yzg3OGQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwK
QEAgLTEsMzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0j
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclVJIHsKLSAgICBJbml0aWFsaXpl
KHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJbmZvRGF0YSBkZWJ1Z2dhYmxlSW5mbywgU3RyaW5n
IGJhY2tlbmRDb21tYW5kc1VSTCkKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQot
ICAgIFNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotI2VuZGlm
Ci0KLSAgICBEaWRTYXZlKFN0cmluZyB1cmwpCi0gICAgRGlkQXBwZW5kKFN0cmluZyB1cmwpCi0K
LSAgICBTZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nIG1lc3NhZ2UpCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMjVkMTNkZDMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgotCi0jaW5jbHVkZSAiV2ViRnJhbWUu
aCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0aW9u
QWN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KLQotc3RhdGljIGNvbnN0IGZsb2F0
IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVt
QXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0
dGFjaGVkV2lkdGggPSA1MDA7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0b3I+IFdlYkluc3BlY3Rvcjo6Y3JlYXRlKFdlYlBh
Z2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yKHBhZ2Up
KTsKLX0KLQotV2ViSW5zcGVjdG9yOjpXZWJJbnNwZWN0b3IoV2ViUGFnZSogcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotewotfQotCi1XZWJJbnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQotewot
ICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbEluc3Bl
Y3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwgdW5k
ZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6
c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIpCi17Ci0gICAgLy8gV2UgbWlnaHQgcmVjZWl2ZSBtdWx0aXBsZSB1cGRhdGVzIGlm
IHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBwZWQgaW50byBhIFdlYlBhZ2VQcm94eQotICAgIC8v
IHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGVzdGFibGlzaGVkIHRoZSBjb25uZWN0aW9u
LgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51
bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0
aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKSk7Ci0jZWxpZiBPUyhEQVJXSU4p
Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVu
Y29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5jb2Rl
ZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpKTsKLSNlbHNlCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjpp
ZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGll
bnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7Ci0gICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPm9wZW4oKTsKLQotICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Zyb250
ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgbV9mcm9udGVu
ZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpjbG9z
ZUZyb250ZW5kQ29ubmVjdGlvbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLQotICAgIC8vIElmIHdlIHRyaWVk
IHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZvcmUgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gbm8gY29u
bmVjdGlvbiBleGlzdHMgeWV0LgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zyb250
ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9mcm9udGVuZENvbm5lY3Rp
b25BY3Rpb25zLmNsZWFyKCk7Ci0KLSAgICBtX2F0dGFjaGVkID0gZmFsc2U7Ci0gICAgbV9wcmV2
aW91c0NhbkF0dGFjaCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zy
b250KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCks
IG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OndoZW5Gcm9u
dGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCi17
Ci0gICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMu
YXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3Rv
ciBtZXNzYWdlcwotdm9pZCBXZWJJbnNwZWN0b3I6OnNob3coKQotewotICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpj
bG9zZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIENsb3NlIGNvdWxkIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGVh
cmRvd24uCi0gICAgaWYgKCFtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6
Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfTsKLQotICAgIFBh
Z2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFpbnNwZWN0
ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSYgaW5zcGVjdGVkTWFpbkZyYW1l
ID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBpbnNwZWN0ZWRN
YWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0IHsg
dXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJk
TGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6
OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsK
LQotICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uIHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1
bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBmcmFtZUxvYWRSZXF1
ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCksIE5hdmlnYXRpb25UeXBlOjpMaW5rQ2xpY2tlZCB9
OwotICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNwZWN0ZWRQYWdlLT5jaHJvbWUoKS5jcmVhdGVXaW5k
b3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LCB7IH0sIGFjdGlvbik7Ci0g
ICAgaWYgKCFuZXdQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdQYWdlLT5tYWluRnJh
bWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0
KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKHNjcmlwdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93Q29uc29s
ZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQot
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dDb25z
b2xlKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291cmNl
cygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQot
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dSZXNv
dXJjZXMoKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFpblJl
c291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikK
LXsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFt
ZShmcmFtZUlkZW50aWZpZXIpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICBTdHJp
bmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFnZW50KCkuZnJhbWVJZChmcmFtZS0+Y29yZUZyYW1l
KCkpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAg
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGluc3BlY3RvckZyYW1lSWRlbnRpZmllciksIDApOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKLXsK
LSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
YWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgd2hl
bkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRD
b25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RhcnRQYWdlUHJvZmls
aW5nKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3RvcFBhZ2VQcm9m
aWxpbmcoKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7
Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdG9w
UGFnZVByb2ZpbGluZygpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0
YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChb
PV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1fcGFn
ZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVj
dGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVudFNl
bGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotewot
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQo
YWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6
c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJs
ZWQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldE1vY2tDYXB0dXJlRGV2
aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQot
Ci1ib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIW1fcGFn
ZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3QgYWxs
b3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5zcGVjdG9yIC0tIHR3byBpbnNwZWN0b3JzIGluIG9u
ZSB3aW5kb3cgaXMgdG9vIG11Y2ghCi0gICAgaWYgKG1fcGFnZS0+aXNJbnNwZWN0b3JQYWdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0dGFj
aGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4gdG8gYWxsb3cgc3dpdGNoaW5nIHNpZGVzLgotICAg
IGlmIChtX2F0dGFjaGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERvbid0IGFs
bG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21t
b2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIHNpemUuCi0gICAgdW5zaWduZWQgaW5zcGVjdGVk
UGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNp
YmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZVdpZHRoID0gbV9wYWdlLT5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVXaWR0aCgpOwotICAgIHVuc2ln
bmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVt
QXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9
IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBpbnNwZWN0
ZWRQYWdlV2lkdGg7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxh
YmlsaXR5KCkKLXsKLSAgICBpZiAobV9hdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ym9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlzLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICBpZiAo
bV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5BdHRhY2hXaW5kb3cpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7Ci0KLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRh
Y2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiODllNTIyNzcuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkNvbm5lY3Rp
b24uaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
UGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6
Ok9iamVjdDo6VHlwZTo6QnVuZGxlSW5zcGVjdG9yPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246
OkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3I+IGNyZWF0ZShX
ZWJQYWdlKik7Ci0KLSAgICBXZWJQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9
Ci0KLSAgICB2b2lkIHVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKLQotICAgIC8vIEltcGxl
bWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBv
dmVycmlkZTsKLQotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRD
bG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KLSAgICB2b2lkIGRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQotCi0gICAg
dm9pZCBzaG93KCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBvcGVuSW5OZXdUYWIo
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotCi0gICAgdm9pZCBjYW5BdHRhY2hXaW5kb3coYm9v
bCYgcmVzdWx0KTsKLQotICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKLSAgICB2b2lkIHNob3dSZXNv
dXJjZXMoKTsKLQotICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIHNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQpIHsg
bV9hdHRhY2hlZCA9IGF0dGFjaGVkOyB9Ci0KLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0Rm9yVGVz
dChjb25zdCBTdHJpbmcmIHNjcmlwdCk7Ci0KLSAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygp
OwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKLQotICAgIHZvaWQgc3RhcnRFbGVtZW50
U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOwotICAgIHZvaWQg
ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCB0aW1lbGluZVJlY29yZGlu
Z0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3Zl
cnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rpb24o
SVBDOjpBdHRhY2htZW50KTsKLQotICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBjbG9z
ZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkluc3BlY3RvckNsaWVudDsK
LQotICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvcihXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+V2Vi
SW5zcGVjdG9yKCk7Ci0KLSAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpOwotCi0gICAgLy8gQ2Fs
bGVkIGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50Ci0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChib29sIHVuZGVyVGVzdCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kQ29ubmVjdGlv
bigpOwotCi0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLQotICAgIHZvaWQgd2hlbkZyb250ZW5k
Q29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZvaWQoKT4mJik7Ci0KLSAgICBXZWJQYWdl
KiBtX3BhZ2U7Ci0KLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Zyb250ZW5kQ29ubmVj
dGlvbjsKLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV9mcm9udGVuZENvbm5lY3Rpb25B
Y3Rpb25zOwotCi0gICAgYm9vbCBtX2F0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcHJl
dmlvdXNDYW5BdHRhY2ggeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3Iu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZjc0YjVlNmIw
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3IubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
Ci0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
Ci0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdl
Ykluc3BlY3RvciB7Ci0gICAgU2hvdygpCi0gICAgQ2xvc2UoKQotCi0gICAgU2V0QXR0YWNoZWQo
Ym9vbCBhdHRhY2hlZCkKLQotICAgIFNob3dDb25zb2xlKCkKLSAgICBTaG93UmVzb3VyY2VzKCkK
LQotICAgIFNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIg
ZnJhbWVJZGVudGlmaWVyKQotCi0gICAgT3BlbkluTmV3VGFiKFN0cmluZyB1cmwpCi0KLSAgICBT
dGFydFBhZ2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdlUHJvZmlsaW5nKCkKLQotICAgIFN0YXJ0
RWxlbWVudFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQotCi0gICAgU2V0
RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjMTg5ZTk4MjVhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRj
aGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpyZXNldCgpCi17Ci0gICAgbV9mcm9udGVu
ZExvYWRlZCA9IGZhbHNlOwotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgbV9xdWV1ZS5j
bGVhcigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZnJv
bnRlbmRMb2FkZWQoKQotewotICAgIG1fZnJvbnRlbmRMb2FkZWQgPSB0cnVlOwotCi0gICAgZXZh
bHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCi17Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmRMb2FkZWQp
OwotICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwotICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHko
KSk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQotewotICAgIEFTU0VSVChtX3N1c3BlbmRl
ZCk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgZXZhbHVhdGVRdWV1ZWRFeHBy
ZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCkKLXsKLSAgICBldmFsdWF0ZU9y
UXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNo
KFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29u
c3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1h
a2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJc
IiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBi
b29sIGFyZ3VtZW50KQotewotICAgIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24obWFrZVN0cmlu
ZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wiIiwgY29tbWFuZCwgIlwiLCAiLCBh
cmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmco
Ikluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVzc2FnZUFzeW5jKCIsIG1lc3NhZ2UsICIp
IikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVh
dGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCi17Ci0gICAgaWYg
KCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7Ci0gICAgICAgIG1fcXVldWUuYXBw
ZW5kKGV4cHJlc3Npb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1f
cXVldWUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24p
OwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVhdGVR
dWV1ZWRFeHByZXNzaW9ucygpCi17Ci0gICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiA6IG1fcXVldWUp
IHsKLSAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0
KCkuaXNQYXVzZWQoKSk7Ci0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5z
Y3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNlcHRpb24oZXhwcmVzc2lvbik7Ci0gICAg
fQotCi0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGY1YzQyNGUyZDg3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBXZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCByZXNldCgpOwot
ICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLQotICAgIHZvaWQgc3VzcGVuZCgpOwotICAgIHZv
aWQgdW5zdXNwZW5kKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmQpOwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7Ci0gICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsKLSAgICB2b2lkIGRpc3BhdGNoTWVz
c2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBl
dmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZXZhbHVh
dGVRdWV1ZWRFeHByZXNzaW9ucygpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIERlcXVl
PFN0cmluZz4gbV9xdWV1ZTsKLSAgICBib29sIG1fZnJvbnRlbmRMb2FkZWQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjMDE3ODUxZjY4Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCIK
LQotI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21tb25W
TS5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVJlZjxXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyPiBXZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIpOwotfQotCi1XZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCkKLSAgICA6IG1fcXVl
dWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlciIpKQotewotfQotCi1XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
Ojp+V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCi17Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25u
ZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24tPmFkZFdvcmtRdWV1ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0aGlzKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpCi17
Ci0gICAgLy8gSWYgdGhlIHdlYiBwcm9jZXNzIGhhcyBub3QgYmVlbiBmdWxseSBpbml0aWFsaXpl
ZCB5ZXQsIHRoZW4gdGhlcmUKLSAgICAvLyBpcyBubyBWTSB0byBiZSBub3RpZmllZCBhbmQgdGh1
cyBubyBpbmZpbml0ZSBsb29wIHRvIGJyZWFrLiBCYWlsIG91dC4KLSAgICBpZiAoIVdlYkNvcmU6
OmNvbW1vblZNT3JOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTQzo6Vk0mIHZtID0g
V2ViQ29yZTo6Y29tbW9uVk0oKTsKLSAgICB2bS5ub3RpZnlOZWVkRGVidWdnZXJCcmVhaygpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhmNmJkMDIwYTIuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIgOiBw
dWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gY3JlYXRl
KCk7Ci0gICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKTsKLSAgICAKLSAgICB2
b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiopOwotICAgIAotcHJpdmF0
ZToKLSAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7Ci0gICAgLy8gSVBDOjpD
b25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAgICAK
LSAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7Ci0gICAgCi0gICAgUmVmPFdvcmtR
dWV1ZT4gbV9xdWV1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk4NzBlNTJiNzNiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1l
c3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyIHsKLSAgICBOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYWE2ZjZlZGU1Li4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCi0KLSNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdl
LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNh
dGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPFdlYkluc3BlY3RvclVJPiBXZWJJbnNw
ZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViSW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1XZWJJbnNwZWN0b3JVSTo6V2ViSW5zcGVj
dG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVu
ZEFQSURpc3BhdGNoZXIocGFnZSkKLSAgICAsIG1fZGVidWdnYWJsZUluZm8oRGVidWdnYWJsZUlu
Zm9EYXRhOjplbXB0eSgpKQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuc2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCh0cnVlKTsKLSAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEltYWdlQml0bWFwRW5hYmxlZCh0
cnVlKTsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuc2V0V2ViR0wyRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotfQotCi12b2lk
IFdlYkluc3BlY3RvclVJOjplc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYgZGVi
dWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCi17
Ci0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllciA9IGluc3BlY3RlZFBhZ2VJZGVudGlmaWVy
OwotICAgIG1fZGVidWdnYWJsZUluZm8gPSBkZWJ1Z2dhYmxlSW5mbzsKLSAgICBtX3VuZGVyVGVz
dCA9IHVuZGVyVGVzdDsKLSAgICBtX2luc3BlY3Rpb25MZXZlbCA9IGluc3BlY3Rpb25MZXZlbDsK
LQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Ci0KLSAgICBtX2Zyb250ZW5k
Q29udHJvbGxlciA9ICZtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwot
ICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlz
KTsKLQotICAgIHVwZGF0ZUNvbm5lY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
dXBkYXRlQ29ubmVjdGlvbigpCi17Ci0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKLSAg
ICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2JhY2tl
bmRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5fU09D
S0VUUykKLSAgICBJUEM6OkNvbm5lY3Rpb246OlNvY2tldFBhaXIgc29ja2V0UGFpciA9IElQQzo6
Q29ubmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9uKCk7Ci0gICAgSVBDOjpDb25uZWN0
aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKHNvY2tldFBhaXIuc2VydmVyKTsK
LSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQoc29ja2V0UGFpci5jbGll
bnQpOwotI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF90IGxpc3RlbmluZ1BvcnQgPSBN
QUNIX1BPUlRfTlVMTDsKLSAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxm
KCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmbGlzdGVuaW5nUG9ydCkgIT0gS0VSTl9TVUND
RVNTKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQo
bWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9NU0df
VFlQRV9NQUtFX1NFTkQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgQ1JBU0goKTsKLQotICAg
IElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihsaXN0ZW5p
bmdQb3J0KTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQobGlzdGVu
aW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpOwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciwgY29u
bkNsaWVudDsKLSAgICBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50
aWZpZXJzKGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25uQ2xpZW50KTsKLSAgICBJUEM6OkF0dGFj
aG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQoY29ubkNsaWVudCk7Ci0jZWxzZQotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSNpZiBVU0UoVU5JWF9ET01BSU5f
U09DS0VUUykgfHwgT1MoREFSV0lOKSB8fCBQTEFURk9STShXSU4pCi0gICAgbV9iYWNrZW5kQ29u
bmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0
aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPm9wZW4oKTsK
LSNlbmRpZgotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEZyb250ZW5kQ29u
bmVjdGlvbihjb25uZWN0aW9uQ2xpZW50UG9ydCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAg
ICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0
Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6
Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+YWRk
U2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOwotCi0gICAgLy8gVGVsbCB0aGUgbmV3IGZy
b250ZW5kIGFib3V0IHRoZSBjdXJyZW50IGRvY2sgc3RhdGUuIElmIHRoZSB3aW5kb3cgb2JqZWN0
Ci0gICAgLy8gY2xlYXJlZCBkdWUgdG8gYSByZWxvYWQsIHRoZSBkb2NrIHN0YXRlIHdvbid0IGJl
IHJlc2VudCBmcm9tIFVJUHJvY2Vzcy4KLSAgICBzZXREb2NraW5nVW5hdmFpbGFibGUobV9kb2Nr
aW5nVW5hdmFpbGFibGUpOwotICAgIHNldERvY2tTaWRlKG1fZG9ja1NpZGUpOwotICAgIHNldElz
VmlzaWJsZShtX2lzVmlzaWJsZSk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0KLSAgICBicmlu
Z1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKCkK
LXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjptb3Zl
V2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBGbG9hdFJlY3QgZnJhbWVSZWN0ID0g
bV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLndpbmRvd1JlY3QoKTsKLSAgICBmcmFtZVJlY3Qu
bW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkuc2V0V2luZG93UmVj
dChmcmFtZVJlY3QpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2lu
ZG93KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0KLSAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlvbikg
ewotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIG1f
YmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2Zyb250ZW5k
Q29udHJvbGxlcikgewotICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIG1fZnJvbnRlbmRDb250cm9sbGVyID0g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJv
bnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyID0geyB9OwotICAgIG1fdW5kZXJUZXN0ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yVUk6OnJlb3BlbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJl
b3BlbigpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JVSTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJl
c2V0U3RhdGUoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLVdlYkNvcmU6OlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+
dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJ
OjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKLXsKLSAgICBhdXRvJiB3ZWJQcm9j
ZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgc3dpdGNoIChzaWRlKSB7Ci0gICAg
Y2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRldGFjaCgp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBE
b2NrU2lkZTo6UmlnaHQ6Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvY2tT
aWRlOjpMZWZ0OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hMZWZ0KCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvY2tTaWRlOjpC
b3R0b206Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFdlYklu
c3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQotewotICAgIEFTQ0lJTGl0ZXJh
bCBzaWRlU3RyaW5nIHsgQVNDSUlMaXRlcmFsOjpudWxsKCkgfTsKLQotICAgIHN3aXRjaCAoc2lk
ZSkgewotICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2VkOgotICAgICAgICBzaWRlU3RyaW5nID0g
InVuZG9ja2VkIl9zOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0
OgotICAgICAgICBzaWRlU3RyaW5nID0gInJpZ2h0Il9zOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgRG9ja1NpZGU6OkxlZnQ6Ci0gICAgICAgIHNpZGVTdHJpbmcgPSAibGVmdCJfczsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpCb3R0b206Ci0gICAgICAgIHNpZGVT
dHJpbmcgPSAiYm90dG9tIl9zOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2RvY2tT
aWRlID0gc2lkZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFu
ZCgic2V0RG9ja1NpZGUiX3MsIFN0cmluZyhzaWRlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yVUk6OnNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVuYXZhaWxhYmxlKQotewotICAg
IG1fZG9ja2luZ1VuYXZhaWxhYmxlID0gdW5hdmFpbGFibGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERvY2tpbmdVbmF2YWlsYWJsZSJfcywgdW5h
dmFpbGFibGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXRJc1Zpc2libGUoYm9vbCB2
aXNpYmxlKQotewotICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKLQotICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9zLCB2aXNpYmxlKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodChoZWlnaHQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25l
ZCB3aWR0aCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpvcGVu
SW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rp
b24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpPcGVuSW5OZXdUYWIodXJsKSwgMCk7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpCcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2F2ZShjb25zdCBX
VEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJh
c2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2
ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6OmFwcGVuZChjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3RyaW5n
JiBjb250ZW50KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmls
ZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGVkVVJMQ2hhbmdl
ZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlm
aWNhdGVJbmZvKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlm
aWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLWJvb2wgV2ViSW5zcGVjdG9yVUk6OnN1
cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKQotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6bG9nRGlhZ25vc3RpY0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBj
b25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5
KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxv
Z0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5hbWUsICJXZWIgSW5z
cGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6
Ok5vKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBs
b2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGlu
ZyBpcyBhbHNvIGVuYWJsZWQuCi0gICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFn
bm9zdGljTG9nZ2luZygpKTsKLSAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZh
aWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJz
ZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd0NvbnNvbGUoKQot
ewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd0NvbnNv
bGUiX3MpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzaG93UmVzb3VyY2VzKCkKLXsKLSAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dSZXNvdXJjZXMi
X3MpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93TWFpblJlc291cmNlRm9yRnJhbWUiX3MsIGZyYW1l
SWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0UGFnZVByb2ZpbGlu
ZygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRU
aW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3MsIHRydWUpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpzdG9wUGFnZVByb2ZpbGluZygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3MsIGZhbHNlKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldEVsZW1lbnRTZWxl
Y3Rpb25FbmFibGVkIl9zLCB0cnVlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RvcEVs
ZW1lbnRTZWxlY3Rpb24oKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNo
Q29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVuYWJsZWQiX3MsIGZhbHNlKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNhdmVkVVJMIl9zLCB1cmwpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCi17
Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRv
VVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpwYWdlUGF1c2VkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5zdXNwZW5k
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VVbnBhdXNlZCgpCi17Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIudW5zdXNwZW5kKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6
OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUlu
Zm8udGFyZ2V0UGxhdGZvcm1OYW1lOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdl
dEJ1aWxkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFy
Z2V0QnVpbGRWZXJzaW9uOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1
Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQ
cm9kdWN0VmVyc2lvbjsKLX0KLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEsp
ICYmICFQTEFURk9STShXSU4pCi1ib29sIFdlYkluc3BlY3RvclVJOjpjYW5TYXZlKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIFdlYklu
c3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotI2VuZGlmIC8vICFQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOWYyMWM5YjYyLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkRl
YnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEluc3BlY3RvckNvbnRy
b2xsZXI7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJJbnNwZWN0b3JV
SSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkluc3BlY3RvclVJPiwgcHJpdmF0ZSBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYp
OwotCi0gICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3RvclVJTWVzc2Fn
ZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNs
aWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyAvKiBE
byBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBhZ2UgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkIGFu
ZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4gKi8gfQotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZVdpbmRvdygpOyB9Ci0KLSAgICAvLyBDYWxs
ZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKLSAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rp
b24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3Qg
RGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25M
ZXZlbCk7Ci0gICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uKCk7Ci0KLSAgICB2b2lkIHNob3dDb25z
b2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0KLSAgICB2b2lkIHNob3dNYWluUmVz
b3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcik7Ci0KLSAgICB2b2lk
IHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKLQot
ICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRWxlbWVudFNl
bGVjdGlvbigpOwotCi0gICAgdm9pZCBhdHRhY2hlZEJvdHRvbSgpIHsgc2V0RG9ja1NpZGUoRG9j
a1NpZGU6OkJvdHRvbSk7IH0KLSAgICB2b2lkIGF0dGFjaGVkUmlnaHQoKSB7IHNldERvY2tTaWRl
KERvY2tTaWRlOjpSaWdodCk7IH0KLSAgICB2b2lkIGF0dGFjaGVkTGVmdCgpIHsgc2V0RG9ja1Np
ZGUoRG9ja1NpZGU6OkxlZnQpOyB9Ci0gICAgdm9pZCBkZXRhY2hlZCgpIHsgc2V0RG9ja1NpZGUo
RG9ja1NpZGU6OlVuZG9ja2VkKTsgfQotCi0gICAgdm9pZCBzZXREb2NrU2lkZShEb2NrU2lkZSk7
Ci0gICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCk7Ci0KLSAgICB2b2lkIHNldElz
VmlzaWJsZShib29sKTsKLQotICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Ci0g
ICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOwotCi0gICAgdm9pZCBzZW5kTWVz
c2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZh
bGlhYmxlKTsKLSNlbmRpZgotCi0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQKLSAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZy
b250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92
ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRl
OwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJp
bmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RyaW5nKCk7IH0K
LSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsgfQotICAgIFN0
cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFy
Z2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldFByb2R1
Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdW5zaWduZWQgaW5zcGVjdGlvbkxl
dmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbnNwZWN0aW9uTGV2ZWw7IH0KLQotICAg
IHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygpIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldFN0YXRl
KCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZv
aWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5n
ZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5n
ZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjaGFu
Z2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IGNhblNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIHVy
bCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBm
b3JjZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcm
IHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hv
d0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOwot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgYm9vbCBzdXBwb3J0c0RpYWdu
b3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7IH0K
LSAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBXVEY6OlN0cmluZyYgZXZlbnROYW1l
LCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5
Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBhZ2VQYXVzZWQoKSBvdmVycmlkZTsK
LSAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1VuZGVyVGVz
dCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdlOwot
ICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlzcGF0
Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250
ZW5kSG9zdDsKLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2JhY2tlbmRDb25uZWN0aW9u
OwotCi0gICAgLy8gS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGZyb250ZW5kJ3MgaW5zcGVjdG9yIGNv
bnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaAotICAgIC8vIGNvcmVQYWdlKCksIHNp
bmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRoZSBmcm9udGVuZCdzIHBhZ2UgaGFzIHN0YXJ0ZWQg
ZGVzdHJ1Y3Rpb24uCi0gICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogbV9mcm9udGVu
ZENvbnRyb2xsZXIgeyBudWxscHRyIH07Ci0KLSAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVyIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7Ci0gICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNlIH07
Ci0gICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87Ci0gICAgYm9vbCBtX2Rv
Y2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNl
IH07Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgYm9vbCBtX2RpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0gICAgRG9ja1NpZGUgbV9k
b2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tlZCB9OwotICAgIHVuc2lnbmVkIG1faW5zcGVjdGlv
bkxldmVsIHsgMSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1lc3Nh
Z2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGYxMzg1ZDQ4OS4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYkluc3Bl
Y3RvclVJIHsKLSAgICBFc3RhYmxpc2hDb25uZWN0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5SWRl
bnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgc3RydWN0IFdlYktpdDo6RGVidWdnYWJs
ZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVj
dGlvbkxldmVsKQotICAgIFVwZGF0ZUNvbm5lY3Rpb24oKQotCi0gICAgQXR0YWNoZWRCb3R0b20o
KQotICAgIEF0dGFjaGVkUmlnaHQoKQotICAgIEF0dGFjaGVkTGVmdCgpCi0gICAgRGV0YWNoZWQo
KQotICAgIFNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVuYXZhaWxhYmxlKQotICAgIFNldElz
VmlzaWJsZShib29sIHZpc2libGUpCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkK
LSAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLSNlbmRp
ZgotCi0gICAgU2hvd0NvbnNvbGUoKQotICAgIFNob3dSZXNvdXJjZXMoKQotCi0gICAgU2hvd01h
aW5SZXNvdXJjZUZvckZyYW1lKFN0cmluZyBmcmFtZUlkZW50aWZpZXIpCi0KLSAgICBTdGFydFBh
Z2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdlUHJvZmlsaW5nKCkKLQotICAgIFN0YXJ0RWxlbWVu
dFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQotCi0gICAgRGlkU2F2ZShT
dHJpbmcgdXJsKQotICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQotCi0gICAgU2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwZjZmZDUyMDkuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotV2ViUGFn
ZUluc3BlY3RvclRhcmdldDo6V2ViUGFnZUluc3BlY3RvclRhcmdldChXZWJQYWdlJiBwYWdlKQot
ICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLVN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
OjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdG9UYXJnZXRJRChtX3BhZ2UuaWRl
bnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0KElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkK
LXsKLSAgICBpZiAobV9jaGFubmVsKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jaGFubmVsID0g
bWFrZVVuaXF1ZTxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPihtX3BhZ2Us
IGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpOwotICAgIGlmIChtX3BhZ2UuY29yZVBhZ2Uo
KSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25u
ZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdl
dDo6ZGlzY29ubmVjdCgpCi17Ci0gICAgaWYgKCFtX2NoYW5uZWwpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOwotICAg
IG1fY2hhbm5lbC5yZXNldCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBp
ZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwotfQot
Ci1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBwYWdlSUQpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInBhZ2UtIiwgcGFn
ZUlELnRvVUludDY0KCkpOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2JkN2ZhZDVmZi4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWw7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQpOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFn
ZSYpOwotICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0OwotCi0gICAgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KLQotICAgIFN0cmluZyBpZGVu
dGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9u
dGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nvbm5l
Y3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlJiBtX3BhZ2U7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+
IG1fY2hhbm5lbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
OTAxN2M0ZWRhZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiV2Vi
UGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwu
aCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAs
IG1fcGFnZVRhcmdldChwYWdlKQotewotICAgIC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRhcmdl
dCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2ViUGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlzIGZv
ciB1cy4KLSAgICBtX3RhcmdldHMuc2V0KG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZtX3Bh
Z2VUYXJnZXQpOwotfQotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCkKLXsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
JiB0YXJnZXQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdldC5p
ZGVudGlmaWVyKCksICZ0YXJnZXQpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0LnR5
cGUoKSkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1v
dmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKLXsKLSAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVudGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0LmlkZW50
aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1vdmUgdGhlIG1haW4gdGFyZ2V0LiIpOwotCi0gICAg
bV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRhcmdl
dCh0YXJnZXQuaWRlbnRpZmllcigpKSk7Ci0KLSAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdldC5p
ZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
Ojpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAgICBhdXRv
IHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOwotfQot
Ci12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVj
dG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3Rhcmdl
dHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IG1fdGFy
Z2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2UpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzkzMWRhZDFjOS4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3RvclRhcmdldDsKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcihXZWJQYWdlJik7Ci0g
ICAgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIGFkZFRh
cmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYpOwotICAgIHZvaWQgcmVtb3ZlVGFyZ2V0
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Jik7Ci0KLSAgICB2b2lkIGNvbm5lY3RJbnNwZWN0
b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNv
bm5lY3Rpb25UeXBlKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBT
dHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAg
IFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IG1fcGFnZVRhcmdl
dDsKLSAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQqPiBtX3Rh
cmdldHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENo
YW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUxYjVmNzEzNzMzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgot
Ci0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgi
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBh
Z2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwg
bV90YXJnZXRJZCh0YXJnZXRJZCkKLSAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5
cGUpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBtX3Bh
Z2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJv
bnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODE4NGFjNWJkYTIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwot
Ci1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVi
bGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsKTsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0gICAg
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2Nvbm5lY3Rpb25UeXBlOyB9Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBT
dHJpbmcgbV90YXJnZXRJZDsKLSAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZTo6UmVtb3RlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0
b3JVSUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5z
cGVjdG9yVUlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjRmOTdmZThk
MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYkluc3BlY3RvclVJR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5o
IgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1ib29s
IFdlYkluc3BlY3RvclVJOjpjYW5TYXZlKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3Ry
aW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRp
b25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKLX0KLQotU3RyaW5nIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25zL2Vu
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5z
cGVjdG9yVUlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
SW5zcGVjdG9yVUlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNTVmM2Q1
OGExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkluc3BlY3Rv
clVJLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaWYgUExBVEZPUk0o
TUFDKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2
ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgd2ViSW5zcGVjdG9y
VUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0g
ICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5n
ICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5
cGU6QCJqcyJdOwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IAotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9d
LmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0
cmluZ3NVUkwoKSBjb25zdAotewotICAgIHJldHVybiB3ZWJJbnNwZWN0b3JVSUxvY2FsaXplZFN0
cmluZ3NVUkwoKTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRT
dHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRT
dHJpbmdzVVJMKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQo=
</data>
<flag name="review"
          id="404368"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388658</attachid>
            <date>2020-01-23 23:44:46 -0800</date>
            <delta_ts>2020-01-26 23:14:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>206721.diff</filename>
            <type>text/plain</type>
            <size>777311</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYmUzODkzYjBiNDYuLjgyZGRiNTJmNTdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDkwIEBACisyMDIwLTAxLTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjb25zb2xpZGF0ZSBVSVByb2Nlc3MvV2ViUHJvY2VzcyBm
aWxlcyBpbnRvIEluc3BlY3RvciBmb2xkZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY3MjEKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENo
cmlzdGVuc2VuLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
LmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50
eHQ6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0luc3Bl
Y3RvclRhcmdldFByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3JUYXJnZXRQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvSW5z
cGVjdG9yVGFyZ2V0UHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbi4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmguCisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAuCisgICAgICAgICogVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
bGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwLgorICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eUd0ay5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5z
cGVjdG9yUHJveHlHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVj
dG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmguCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93Lmgu
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tLgorICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbTog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVT
ZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9y
L21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3LmguCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW06IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0u
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMu
bW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9j
b2xIYW5kbGVyLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNz
YWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oLgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmNw
cC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMu
aW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3IubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3IuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElE
aXNwYXRjaGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmguCisgICAgICAgICog
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5oLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLmNwcC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Lmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oLgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYkluc3BlY3RvclVJ
TWFjLm1tLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JV
SVdpbi5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dp
bi9XZWJJbnNwZWN0b3JVSVdpbi5tbS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQXR0
YWNobWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGlu
Zy5tbToKKyAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBpbmNsdWRlcy4KKwogMjAyMC0wMS0xNyAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBSZW1v
dmUgdGhlIElPSElERXZlbnRTZXJ2aWNlRmFzdFBhdGhVc2VyQ2xpZW50IElPS2l0IGNsYXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9D
TWFrZUxpc3RzLnR4dAppbmRleCA1MzI2NzhmMzc2MC4uNGRkOTlhMDhiMDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxp
c3RzLnR4dApAQCAtNTYsNiArNTYsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvRG93bmxvYWRzIgogICAgICIke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9HYW1lcGFkIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9HUFUi
CisgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3RvciIKICAgICAiJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3MvTGF1bmNoZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL05l
dHdvcmsiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzIgpAQCAtODUsNiArODYsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSSIKICAgICAiJHtX
RUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jIgogICAgICIke1dFQktJ
VF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NIgorICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvSW5zcGVjdG9yIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvTGF1
bmNoaW5nIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvTWVkaWFDYWNoZSIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL01lZGlhU3RyZWFtIgpAQCAtMTQ4LDEyICsxNTAsMTAg
QEAgc2V0KFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwogICAgIFNoYXJlZC9QbHVnaW5zL05QT2Jq
ZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbgotICAgIFVJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLm1lc3NhZ2VzLmlu
CiAgICAgVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJ
UHJvY2Vzcy9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9j
ZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCi0gICAgVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMu
aW4KICAgICBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KQEAgLTE2Myw2ICsx
NjMsOSBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4KIAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KKyAgICBVSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisKICAgICBVSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTE3OSw2ICsxODIsMTEgQEAg
c2V0KFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
bi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KIAorICAgIFdlYlByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisgICAgV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgorICAgIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisKICAgICBXZWJQcm9j
ZXNzL05ldHdvcmsvd2VicnRjL1dlYk1ETlNSZWdpc3Rlci5tZXNzYWdlcy5pbgogICAgIFdlYlBy
b2Nlc3MvTmV0d29yay93ZWJydGMvV2ViUlRDTW9uaXRvci5tZXNzYWdlcy5pbgogICAgIFdlYlBy
b2Nlc3MvTmV0d29yay93ZWJydGMvV2ViUlRDUmVzb2x2ZXIubWVzc2FnZXMuaW4KQEAgLTIwMiwx
MSArMjEwLDcgQEAgc2V0KFdlYktpdF9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCiAKICAgICBXZWJQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZUFy
ZWFNYXAubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdAppbmRleCA5ODA4MWFhNmIyYy4uNmRjYmIyMzc1ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTc5LDExICs3OSwxMiBA
QCAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eS5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1VJUHJvY2Vzcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL1VJUHJvY2Vzcy9WaXNpdGVkTGlua1N0b3JlLm1lc3NhZ2VzLmluCkBAIC05MSw3ICs5Miw2
IEBAICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JQcm94eS5tZXNzCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2Vi
Q29va2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3Mv
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQ
cm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCi0kKFBST0pFQ1Rf
RElSKS9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5tZXNzYWdlcy5pbgpAQCAtMTEyLDYgKzExMiwxMCBAQCAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLm1lc3Nh
Z2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDUmVt
b3RlQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJy
dGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgor
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUku
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRl
ci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tl
dENoYW5uZWwubWVzc2FnZXMuaW4KQEAgLTEzMywxMyArMTM3LDkgQEAgJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCi0kKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5
Q29sbGVjdG9yLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Vmlld1VwZGF0ZURpc3BhdGNoZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbgotJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgotJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIubWVzc2FnZXMuaW4KLSQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JVSS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYzM0
YWY1Y2QzYTEuLjgxMGUwZTE4MzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC01
NCw2ICs1NCw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVk
aWEgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktp
dDIpL1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlIFwKKyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3Mv
SW5zcGVjdG9yIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhU3RyZWFtIFwKICAgICAkKFdlYktpdDIpL1dlYlBy
b2Nlc3MvTmV0d29yayBcCkBAIC03OSw2ICs4MCw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0
MikvVUlQcm9jZXNzL0RhdGFiYXNlcyBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvRG93bmxv
YWRzIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9HUFUgXAorICAgICQoV2ViS2l0MikvVUlQ
cm9jZXNzL0luc3BlY3RvciBcCiAgICAgJChXZWJLaXQyKS9VSVByb2Nlc3MvTWVkaWFTdHJlYW0g
XAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL05ldHdvcmsgXAogICAgICQoV2ViS2l0MikvVUlQ
cm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCmlu
ZGV4IDc2N2Q2YzkyMDczLi5mMTVhOWVkNGEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCkBA
IC00OCw2ICs0OCw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHAKIAorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2lu
LmNwcAorCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3dpbi9Qcm9jZXNzTGF1bmNoZXJXaW4uY3Bw
CiAKICAgICBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvY3VybC9XZWJzaXRlRGF0YVN0b3JlQ3VybC5j
cHAKQEAgLTU2LDcgKzU4LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJ
UHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJDb250
ZXh0TWVudVByb3h5V2luLmNwcAotICAgIFVJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwCiAgICAgVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCiAgICAgVUlQcm9j
ZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBy
b2Nlc3NQb29sV2luLmNwcApAQCAtNjQsNiArNjUsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09V
UkNFUwogCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS93aW4vSW5qZWN0ZWRCdW5kbGVX
aW4uY3BwCiAKKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlXaW4u
Y3BwCisKICAgICBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdl
ci5jcHAKIAogICAgIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk5v
bmUuY3BwCkBAIC03OCw3ICs4MSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUhvc3QuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYklu
c3BlY3RvclVJV2luLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5j
cHAKIAogICAgIFdlYlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NNYWluV2luLmNwcApAQCAtMTA5LDEw
ICsxMTEsMTMgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2NwcC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0v
VUlQcm9jZXNzL0FQSS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MiCisgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQiCisgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7
V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL3dpbi9ET00iCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2lu
IgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mvd2luIgogICAgICIke1dFQktJVF9ESVJ9
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIgpAQCAtMTgxLDEwICsxODYsMTAgQEAg
bGlzdChBUFBFTkQgV2ViS2l0X0xJQlJBUklFUwogCiBpZiAoRU5BQkxFX1JFTU9URV9JTlNQRUNU
T1IpCiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKLSAgICAgICAgVUlQcm9jZXNzL3Nv
Y2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCi0gICAgICAgIFVJUHJvY2Vzcy9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAorICAgICAgICBVSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisgICAgICAgIFVJUHJvY2Vz
cy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5jcHAKIAot
ICAgICAgICBVSVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcAorICAg
ICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZTBmOWE5Y2Y0M2EuLmJiMDY3N2E2YTIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTM5Niw2ICszOTYsOCBAQCBsaXN0KEFQUEVORCBXZWJL
aXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkv
Z2xpYiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ayIKICAgICAiJHtXRUJL
SVRfRElSfS9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKKyAgICAiJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIiCisgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNz
L0luc3BlY3Rvci9ndGsiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1BsdWdpbnMvZ3Rr
IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9nZW9jbHVlIgogICAgICIke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9nbGliIgpAQCAtNDA3LDYgKzQwOSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ2xpYi9ET00iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00iCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS91bml4IgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS94MTEiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9ndGsiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1h
Yy5jbWFrZQppbmRleCAxZTNkNzBmOWIyZi4uYmU4NmY3M2I3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1h
Yy5jbWFrZQpAQCAtNTUsNiArNTUsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0F1dGhlbnRpY2F0
aW9uL2NvY29hIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db2NvYSIKICAgICAiJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uIgorICAgICIke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9MYXVuY2hlci9tYWMiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZSIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lv
cyIKQEAgLTg5LDYgKzkwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1BSSVZBVEVfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9jb2NvYSIKICAgICAiJHtXRUJLSVRf
RElSfS9XZWJQcm9jZXNzL21hYyIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvQ29jb2EiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvbWFjIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVdpbi5jbWFrZQppbmRleCAwYjM3ZjQ3MGIzNy4uZjliZDhmZWE0YTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVdpbi5jbWFrZQpAQCAtNDgsNiArNDgsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09V
UkNFUwogCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94
eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAKKyAgICBVSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9X
ZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKwogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci93aW4vUHJv
Y2Vzc0xhdW5jaGVyV2luLmNwcAogCiAgICAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL2N1cmwvV2Vi
c2l0ZURhdGFTdG9yZUN1cmwuY3BwCkBAIC01Niw3ICs1OCw2IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAogICAgIFVJ
UHJvY2Vzcy93aW4vV2ViQ29udGV4dE1lbnVQcm94eVdpbi5jcHAKLSAgICBVSVByb2Nlc3Mvd2lu
L1dlYkluc3BlY3RvclByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5
V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCiAgICAg
VUlQcm9jZXNzL3dpbi9XZWJQcm9jZXNzUG9vbFdpbi5jcHAKQEAgLTY0LDYgKzY1LDggQEAgbGlz
dChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
d2luL0luamVjdGVkQnVuZGxlV2luLmNwcAogCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3Ivd2lu
L1dlYkluc3BlY3RvclVJV2luLmNwcAorCiAgICAgV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1l
ZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKICAgICBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW5Ob25lLmNwcApAQCAtNzcsNyArODAsNiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2Uvd2luL1dlYlBhZ2VXaW4uY3BwCiAKICAgICBXZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzTWFp
bldpbi5jcHAKQEAgLTEwOCwxMCArMTEwLDEzIEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9jcHAvd2luIgog
ICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvd2luIgogICAgICIke1dFQktJVF9ESVJ9
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0IgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9JbnNw
ZWN0b3Ivd2luIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9QbHVnaW5zL3dpbiIKICAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3Mvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL3dpbiIK
ICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbiIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyIKQEAg
LTE4MSwxMCArMTg2LDEwIEBAIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RP
UikKICAgICBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3Mvc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAgVUlQcm9jZXNzL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCisgICAgICAgIFVJUHJvY2Vzcy9JbnNw
ZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKyAgICAgICAgVUlQcm9jZXNz
L0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAogCi0g
ICAgICAgIFVJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAg
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNw
cAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAppbmRleCAzZGEyODAwYzljNS4uZDdiZDE3YWZiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAt
MjY3LDEzICsyNjcsMTEgQEAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCiBVSVByb2Nl
c3MvRnJhbWVMb2FkU3RhdGUuY3BwCiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0UHJveHkuY3BwCi1VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCiBVSVByb2Nl
c3MvTGVnYWN5R2xvYmFsU2V0dGluZ3MuY3BwCiBVSVByb2Nlc3MvUGFnZUxvYWRTdGF0ZS5jcHAK
IFVJUHJvY2Vzcy9Qcm9jZXNzQXNzZXJ0aW9uLmNwcAogVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRs
ZXIuY3BwCiBVSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCi1VSVByb2Nlc3MvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCiBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5j
cHAKIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKIFVJUHJvY2Vzcy9TdXNwZW5kZWRQ
YWdlUHJveHkuY3BwCkBAIC0zMDYsMTUgKzMwNCwxMSBAQCBVSVByb2Nlc3MvV2ViRnJhbWVQcm94
eS5jcHAKIFVJUHJvY2Vzcy9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNz
L1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcAogVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9u
UHJvdmlkZXIuY3BwCi1VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCi1VSVByb2Nlc3Mv
V2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25TdGF0ZS5j
cHAKIFVJUHJvY2Vzcy9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcAotVUlQcm9j
ZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCiBVSVByb2Nlc3MvV2Vi
UGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNwcAotVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyLmNwcAogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJQ
YXN0ZWJvYXJkUHJveHkuY3BwCiBVSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC00MjYs
NiArNDIwLDEzIEBAIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCiAK
IFVJUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc1Byb3h5LmNwcAogCitVSVByb2Nlc3MvSW5zcGVjdG9y
L0luc3BlY3RvclRhcmdldFByb3h5LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHku
Y3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKK1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorCiBVSVByb2Nlc3MvTm90aWZpY2F0aW9u
cy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbi5jcHAKIFVJUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5jcHAKQEAgLTUxNyw2ICs1MTgsMTYgQEAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xh
cmF0aW9uSGFuZGxlLmNwcAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIEBuby11bmlmeQogCitXZWJQcm9jZXNz
L0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3Rvci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVu
dC5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlci5jcHAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5jcHAKK1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwCitXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKK1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCisKIFdl
YlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5zaW9ucy5jcHAKIFdl
YlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNw
cAogCkBAIC01OTMsNyArNjA0LDYgQEAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFn
Q2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAKLVdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAKIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuY3BwCkBAIC02MTAsMjMgKzYy
MCwxNSBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCi1XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29va2llSmFyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkRvY3VtZW50TG9hZGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAotV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBAbm8tdW5pZnkKIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZU92ZXJsYXkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVVJMU2NoZW1lSGFuZGxlclByb3h5
LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZVRhc2tQcm94eS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dAppbmRleCA2YThlMmU2OTA1Yy4uYzQxNzQ0YTMyOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKQEAgLTIyOSw3ICsyMjksNiBAQCBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9u
Rm9jdXNNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL1dlYk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlckNs
aWVudC5jcHAKIFVJUHJvY2Vzcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCiBVSVByb2Nl
c3MvV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbQotVUlQcm9jZXNzL1dLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5tbQogCiBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhUmVjb3JkLmNw
cAogCkBAIC00MDIsNiArNDAxLDE0IEBAIFVJUHJvY2Vzcy9HYW1lcGFkL2NvY29hL1VJR2FtZXBh
ZFByb3ZpZGVyQ29jb2EubW0KIFVJUHJvY2Vzcy9HYW1lcGFkL2lvcy9VSUdhbWVwYWRQcm92aWRl
cklPUy5tbQogVUlQcm9jZXNzL0dhbWVwYWQvbWFjL1VJR2FtZXBhZFByb3ZpZGVyTWFjLm1tCiAK
K1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQorVUlQ
cm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6
ZXIubW0KKworVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlN
YWMubW0KK1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCitV
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCitVSVBy
b2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQorCiBVSVByb2Nlc3Mv
aW9zL2Zvcm1zL1dLQWlyUGxheVJvdXRlUGlja2VyLm1tCiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dL
RGF0ZVBpY2tlclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRmlsZVVw
bG9hZFBhbmVsLm1tCkBAIC00NTEsNyArNDU4LDYgQEAgVUlQcm9jZXNzL2lvcy9XS0RyYXdpbmdW
aWV3Lm1tCiBVSVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbQogVUlQcm9j
ZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0KIFVJ
UHJvY2Vzcy9pb3MvV0tIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5tbQotVUlQ
cm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQogVUlQ
cm9jZXNzL2lvcy9XS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IubW0KIFVJUHJvY2Vzcy9pb3Mv
V0tNb3VzZUdlc3R1cmVSZWNvZ25pemVyLm1tCiBVSVByb2Nlc3MvaW9zL1dLUGFzc3dvcmRWaWV3
Lm1tCkBAIC00NzEsNyArNDc3LDYgQEAgVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAKIFVJ
UHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAKIFVJUHJvY2Vzcy9tYWMv
TGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nLmNwcAogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5tbQotVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbQogVUlQ
cm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmNwcAogVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0Nv
bnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KQEAgLTQ4MiwxNSAr
NDg3LDEyIEBAIFVJUHJvY2Vzcy9tYWMvV2ViQ29sb3JQaWNrZXJNYWMubW0KIFVJUHJvY2Vzcy9t
YWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJDb29raWVNYW5h
Z2VyUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9tYWMvV2ViRGF0YUxpc3RTdWdnZXN0aW9uc0Ryb3Bk
b3duTWFjLm1tCi1VSVByb2Nlc3MvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCiBVSVByb2Nl
c3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94
eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlNYWMubW0KIFVJUHJvY2Vzcy9t
YWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbQogVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvbWFjL1dLSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlci5tbQotVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCi1VSVBy
b2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tCiBVSVByb2Nlc3MvbWFjL1dLU2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZS5t
bQogVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KQEAgLTU3Nyw2ICs1NzksOCBA
QCBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJv
d3NlckNvbnRleHRDb250cm9sbGVyLm1tCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFj
L0luamVjdGVkQnVuZGxlTWFjLm1tCiAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNw
ZWN0b3JVSU1hYy5tbQorCiBXZWJQcm9jZXNzL01lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdl
TWFuYWdlci5jcHAKIAogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9OZXRzY2FwZVBs
dWdpbk1hYy5tbQpAQCAtNjE4LDcgKzYyMiw2IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9EcmF3aW5nQXJlYU1hYy5jcHAKIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUGFnZUJhbm5lck1hYy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQotV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RCYXNlLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VP
YmplY3RNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IDFlZjczYmMyMTRjLi44NWFiMGEzZTJj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yMTUsNiArMjE1LDEyIEBAIFVJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAog
CiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2VvbG9jYXRpb25Qcm92aWRlci5jcHAKIAorVUlQ
cm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKworVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCitVSVByb2Nl
c3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKK1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKKwogVUlQcm9jZXNzL0xhdW5jaGVy
L2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvTGF1bmNo
ZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwIEBuby11bmlmeQogCkBAIC0yMzAsNyArMjM2
LDYgQEAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3VuaXgvV2Vic2l0ZURhdGFTdG9yZVVuaXguY3Bw
CiAKIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgQG5vLXVuaWZ5CiAKLVVJ
UHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9nbGliL1dl
YlByb2Nlc3NQb29sR0xpYi5jcHAKIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdMaWIu
Y3BwCiBVSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHAgQG5vLXVuaWZ5CkBA
IC0yNDgsNyArMjUzLDYgQEAgVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAK
IFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vz
cy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3Mv
Z3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAgQG5vLXVuaWZ5Ci1VSVByb2Nlc3MvZ3RrL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcAogVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0
ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5j
cHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdTbmFwc2hvdFN0b3JlR3RrLmNwcApAQCAt
MjU2LDggKzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsv
V2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViRGF0YUxpc3RTdWdn
ZXN0aW9uc0Ryb3Bkb3duR3RrLmNwcAotVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0
ay5jcHAKLVVJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcAogVUlQcm9jZXNz
L2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJQYXN0
ZWJvYXJkUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3RrLmNw
cApAQCAtMzkyLDYgKzM5NCw4IEBAIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuY3BwCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
Z2xpYi9JbmplY3RlZEJ1bmRsZUdsaWIuY3BwCiAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0ay9X
ZWJJbnNwZWN0b3JVSUd0ay5jcHAKKwogV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlhS2V5
U3RvcmFnZU1hbmFnZXIuY3BwCiAKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS91bml4L05l
dHNjYXBlUGx1Z2luVW5peC5jcHAgQG5vLXVuaWZ5CkBAIC00MjMsNyArNDI3LDYgQEAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVyLmNwcAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VXYXlsYW5kLmNwcAogV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VYMTEuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
SW5zcGVjdG9yVUlHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3Bw
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaAppbmRleCA0M2E0N2RkN2Qw
YS4uMmUwNjQ5YThkZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElBdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFj
aG1lbnQuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBPQkpDX0NMQVNTIE5TRmlsZVdyYXBwZXI7CitPQkpDX0NMQVNTIE5TU3RyaW5nOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLm1tCmluZGV4IGZj
NGQ4NTZmMDJlLi5lZDU5ODgxYzViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNp
bXBvcnQgIldlYlZpZXdJbXBsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgi
CiAjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCA8V2ViQ29yZS9SdW50
aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJs
ZS5oPgogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9J
bnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi42OTI4Y2EyZmJmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKQEAgLTAsMCArMSwx
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIKKworI2lu
Y2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJQYWdl
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9y
VGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQoreworICAgIHJldHVy
biBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5PihwYWdlLCB0YXJnZXRJZCwgdHlwZSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlw
ZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVhdGUocHJv
dmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5cGUpOworICAgIHRhcmdldC0+bV9wcm92
aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNpb25hbFBhZ2UpOworICAgIHJldHVybiB0
YXJnZXQ7Cit9CisKK0luc3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0b3JUYXJnZXRQcm94eShX
ZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2lkZW50
aWZpZXIodGFyZ2V0SWQpCisgICAgLCBtX3R5cGUodHlwZSkKK3sKK30KKwordm9pZCBJbnNwZWN0
b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVj
dGlvblR5cGUgY29ubmVjdGlvblR5cGUpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7
CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25u
ZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAg
ICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRp
ZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5
OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoaXNQYXVzZWQoKSkKKyAgICAgICAgcmVzdW1lKCk7
CisKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNpb25hbFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmll
cigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wYWdlLmhhc1J1bm5p
bmdQcm9jZXNzKCkpCisgICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaXNj
b25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdl
dFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChp
ZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwgbWVz
c2FnZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaWRDb21taXRQcm92aXNp
b25hbFRhcmdldCgpCit7CisgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRyOworfQorCiti
b29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFy
Z2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JU
YXJnZXRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMjIz
OWNlYzhlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBQcm92aXNpb25hbFBhZ2VQcm94eTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKwor
Ly8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJbnNwZWN0b3JUYXJnZXQgZG9lc24ndCBjYXJl
IGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBzaW5jZQorLy8gYW55IHRhcmdldCAtPiBmcm9u
dGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUgV2ViUGFnZVByb3h5IHdpdGggYSB0
YXJnZXRJZC4KKworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdldFByb3h5KTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUo
V2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdl
dFByb3h5PiBjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOworICAgIEluc3BlY3RvclRhcmdl
dFByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgfkluc3BlY3RvclRhcmdldFByb3h5KCkgPSBkZWZh
dWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgdm9pZCBkaWRDb21taXRQcm92aXNp
b25hbFRhcmdldCgpOworICAgIGJvb2wgaXNQcm92aXNpb25hbCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSBtX3R5cGU7CisgICAgV2Vh
a1B0cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9wcm92aXNpb25hbFBhZ2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMTkyYzI5ZjQxOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5jcHAKQEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2luY2x1ZGUgIkFQSURl
YnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIlJl
bW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNw
ZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkKKyAg
ICA6IG1fZGVidWdnYWJsZUluZm8oQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2Fi
bGVJbmZvRGF0YTo6ZW1wdHkoKSkpCit7Cit9CisKK1JlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp+
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKQoreworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JQYWdl
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCit7Cisg
ICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUp
Cit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNwZWN0b3JQYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKKyNlbmRpZgorfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKFJlZjxBUEk6OkRlYnVnZ2FibGVJ
bmZvPiYmIGRlYnVnZ2FibGVJbmZvLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCkK
K3sKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIG1fZGVidWdnYWJs
ZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VS
TCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUobV9kZWJ1Z2dhYmxlSW5mby0+
ZGVidWdnYWJsZUluZm9EYXRhKCksIGJhY2tlbmRDb21tYW5kc1VSTCkpOworICAgIG1faW5zcGVj
dG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3Nl
RnJvbUJhY2tlbmQoKQoreworICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbUNyYXNoKCkKK3sKKyAgICAv
LyBCZWhhdmUgYXMgaWYgdGhlIGZyb250ZW5kIGp1c3QgY2xvc2VkLCBzbyBjbGllbnRzIGFyZSBp
bmZvcm1lZCB0aGUgZnJvbnRlbmQgaXMgZ29uZS4KKyAgICBmcm9udGVuZERpZENsb3NlKCk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQoreworICAgIGJyaW5nVG9G
cm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRv
RnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1faW5zcGVjdG9yUGFnZS0+
c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChtZXNzYWdlKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5k
RGlkQ2xvc2UoKQoreworICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gcHJvdGVjdCgq
dGhpcyk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jbG9zZUZyb21G
cm9udGVuZCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKK3sKKyAgICBBU1NFUlQoIW1fYmFj
a2VuZENvbW1hbmRzVVJMLmlzRW1wdHkoKSk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpOworICAgIGxvYWQobV9kZWJ1Z2dhYmxlSW5mby5jb3B5UmVmKCksIG1fYmFja2VuZENv
bW1hbmRzVVJMKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0
ZSgpCit7CisgICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQo
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQs
IGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIHBsYXRmb3JtU2F2ZShzdWdnZXN0ZWRVUkws
IGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZURpYWxvZyk7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3JtQXBwZW5kKHN1Z2dlc3RlZFVS
TCwgY29udGVudCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldFNoZWV0
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcGxhdGZvcm1TZXRTaGVldFJlY3Qo
cmVjdCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93RHJh
ZygpCit7CisgICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAg
IHBsYXRmb3JtT3BlbkluTmV3VGFiKHVybCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRl
SW5mbykKK3sKKyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+c2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYg
KG1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdl
ID0gcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIHRyYWNrSW5z
cGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG51bGxwdHIpOworCisgICAgbV9pbnNwZWN0b3JQ
YWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBh
Z2VJRCgpLCAqdGhpcyk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYXNzdW1lUmVh
ZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdG9yQmFzZVVSTCgpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworCisgICAgdW50
cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKKworICAgIG1faW5zcGVjdG9yUGFn
ZSA9IG51bGxwdHI7CisKKyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7
Cit9CisKKyNpZiAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpIHx8ICghUExBVEZPUk0oTUFDKSAm
JiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkKK1dlYlBhZ2VQcm94eSogUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0KK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9Cit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KK3ZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdp
bmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3Bl
bkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikgeyB9Cit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkgeyB9CisjZW5kaWYgLy8gIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8fCAoIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZmFiNThmOGNlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaApA
QCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
QVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorT0JKQ19DTEFTUyBOU1VSTDsK
K09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXI7CitPQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKK09C
SkNfQ0xBU1MgV0tXZWJWaWV3OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBEZWJ1Z2dhYmxl
SW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2Ns
YXNzIFdlYlZpZXc7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCgpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSA9IDA7Cit9Owor
CitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90
ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHko
KSk7CisgICAgfQorCisgICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAgICB2b2lk
IHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50KSB7IG1fY2xp
ZW50ID0gY2xpZW50OyB9CisKKyAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7
CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgbG9hZChSZWY8QVBJOjpEZWJ1
Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOworICAgIHZv
aWQgY2xvc2VGcm9tQmFja2VuZCgpOworICAgIHZvaWQgc2hvdygpOworCisgICAgdm9pZCBzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3cuZ2V0
KCk7IH0KKyAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKKworICAgIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0K
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUo
Y29uc3QgQ1N0cmluZyYpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAg
TFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJFU1VMVCBvbkNsb3NlKCk7CisKKyAgICBzdGF0
aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
KyNlbmRpZgorCisgICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOworCitwcml2YXRlOgorICAgIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcy4K
KyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICB2b2lkIHJlb3BlbigpOworICAgIHZv
aWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBzYXZl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQgc2V0U2hlZXRS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFn
KCk7CisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQg
c2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOworICAgIHZv
aWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIHZv
aWQgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgdm9pZCBjbG9zZUZyb250ZW5k
UGFnZUFuZFdpbmRvdygpOworCisgICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgorICAg
IFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAg
ICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAgICB2b2lkIHBs
YXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAg
ICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9p
ZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7CisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworICAgIHZvaWQg
cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgcGxhdGZv
cm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7CisKKyAg
ICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07Cisg
ICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisKKyAgICBSZWY8
QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKKyAgICBTdHJpbmcgbV9iYWNr
ZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPFdLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKKyAgICBSZXRhaW5QdHI8TlNX
aW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5
T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0
cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7CisgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IG1fc2hlZXRSZWN0OworI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorICAgIEd0a1dpZGdl
dCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV93aW5kb3cgeyBudWxs
cHRyIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgSFdORCBtX2Zyb250
ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7CisjZW5kaWYKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3Nh
Z2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iZTA5MWI3OGZi
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDQwIEBACisjIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5IHsKKyAgICBGcm9udGVuZERpZENsb3NlKCkKKyAgICBSZW9wZW4oKQor
ICAgIFJlc2V0U3RhdGUoKQorICAgIEJyaW5nVG9Gcm9udCgpCisKKyAgICBTYXZlKFN0cmluZyBm
aWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKKworICAg
IFNldFNoZWV0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKworICAgIFN0YXJ0V2luZG93
RHJhZygpCisKKyAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkKKyAgICBTaG93Q2VydGlmaWNh
dGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbykKKworICAgIFNlbmRN
ZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIzZDcwNWU4M2U3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5
LmNwcApAQCAtMCwwICsxLDc4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Lmgi
CisKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQVBJVUlDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01v
Y2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEVuY29kaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1NldEZvclNjb3BlLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6
bWluaW11bVdpbmRvd1dpZHRoID0gNTAwOworY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6Om1pbmltdW1XaW5kb3dIZWlnaHQgPSA0MDA7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3Bl
Y3RvclByb3h5Ojppbml0aWFsV2luZG93V2lkdGggPSAxMDAwOworY29uc3QgdW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2NTA7CisKK1dlYkluc3BlY3Rv
clByb3h5OjpXZWJJbnNwZWN0b3JQcm94eShXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIDogbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRl
bmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKQorI2VuZGlmCit7CisgICAgaWYgKGluc3BlY3Rl
ZFBhZ2UgJiYgaW5zcGVjdGVkUGFnZS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBt
X2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2Ut
PnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0
aGlzKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3RvclByb3h5Ojp+V2ViSW5zcGVjdG9yUHJveHko
KQoreworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGlvbkxldmVsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2Uo
KSk7Cit9CisKK1dlYlByZWZlcmVuY2VzJiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFn
ZVByZWZlcmVuY2VzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAg
ICByZXR1cm4gbV9pbnNwZWN0b3JQYWdlLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAobV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworCisgICAgY2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKTsKKyAgICBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKworICAgIG1faW5z
cGVjdGVkUGFnZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2lu
c3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdl
KSk7Cit9CisKKy8vIFB1YmxpYyBBUElzCitib29sIFdlYkluc3BlY3RvclByb3h5Ojppc0Zyb250
KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHBsYXRmb3JtSXNGcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5Ojpjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fc2hvd01lc3NhZ2VTZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Nob3dNZXNzYWdlU2VudCA9IHRydWU7CisgICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9u
dCA9IHRydWU7CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVk
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90
aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNob3coKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoaXNDb25uZWN0ZWQoKSkgeworICAgICAgICBicmluZ1RvRnJvbnQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbm5lY3QoKTsKKworICAgIC8vIERvbid0IGln
bm9yZSB0aGUgZmlyc3QgYnJpbmdUb0Zyb250IHNvIGl0IG9wZW5zIHRoZSBJbnNwZWN0b3IuCisg
ICAgbV9pZ25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpoaWRlKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIHBsYXRmb3JtSGlkZSgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZSgpCit7CisgICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRm9yQ3Jh
c2goKQoreworICAgIGNsb3NlKCk7CisKKyAgICBwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVvcGVuKCkKK3sKKyAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xvc2UoKTsKKyAgICBzaG93KCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3RhdGUoKQoreworICAgIGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Cisg
ICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRXaWR0
aCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvckF0dGFj
aG1lbnRTaWRlKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxl
dGVJbnNwZWN0b3JXaW5kb3dGcmFtZSgpOworCisgICAgcGxhdGZvcm1SZXNldFN0YXRlKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
ZWRQYWdlKSB7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdGVk
UGFnZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp1cGRh
dGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UpCit7CisgICAg
QVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOworICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKTsKKwor
ICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisgICAgbV9pbnNwZWN0ZWRQYWdl
LT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpLCAq
dGhpcyk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpB
dHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlm
aWVyKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDb25zb2xlKCkKK3sKKyAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlRnJv
bnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNo
b3dSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3VyY2VzKCkpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94
eSogZnJhbWUpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShmcmFtZS0+
ZnJhbWVJRCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEJvdHRvbSgp
Cit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjphdHRhY2hSaWdodCgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRl
OjpSaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaExlZnQoKQorewor
ICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6TGVmdCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmF0dGFjaChBdHRhY2htZW50U2lkZSBzaWRlKQoreworICAgIGlmICghbV9pbnNwZWN0
ZWRQYWdlIHx8ICFjYW5BdHRhY2goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0F0dGFj
aGVkID0gdHJ1ZTsKKyAgICBtX2F0dGFjaG1lbnRTaWRlID0gc2lkZTsKKworICAgIGluc3BlY3Rv
clBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvckF0dGFjaG1lbnRTaWRlKHN0YXRpY19jYXN0
PHVpbnQzMl90PihzaWRlKSk7CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisgICAgICAgIGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKHRydWUpOwor
CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0
dGFjaGVkKHRydWUpKTsKKworICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgeworICAgIGNh
c2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6CisgICAgICAgIG1faW5zcGVj
dG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNo
ZWRMZWZ0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUF0dGFjaCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpkZXRhY2goKQoreworICAgIGlmICghbV9p
bnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzQXR0YWNoZWQgPSBmYWxz
ZTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOworCisgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7
CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0
YWNoZWQoKSk7CisKKyAgICBwbGF0Zm9ybURldGFjaCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAg
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoaGVp
Z2h0KTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQg
d2lkdGgpCit7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0
YWNoZWRXaWR0aCh3aWR0aCk7CisgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdp
ZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0U2hlZXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNoZWV0UmVjdChyZWN0KTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBwbGF0Zm9y
bVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQ
YWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1faXNQcm9maWxpbmdQYWdlKQorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmcoKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
Ojp0b2dnbGVFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSkgewor
ICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOworICAgICAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcEVsZW1lbnRT
ZWxlY3Rpb24oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29ubmVjdCgpOworICAgICAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRFbGVtZW50
U2VsZWN0aW9uKCkpOworICAgIH0KK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWlu
T3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmIHVybCkKK3sKKyAgICAvLyBVc2UgVVJMIHNv
IHdlIGNhbiBjb21wYXJlIHRoZSBwYXRocyBhbmQgcHJvdG9jb2xzLgorICAgIFVSTCBtYWluUGFn
ZVVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSk7CisgICAg
aWYgKHVybC5wcm90b2NvbCgpID09IG1haW5QYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJM
RXNjYXBlU2VxdWVuY2VzKHVybC5wYXRoKCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyht
YWluUGFnZVVSTC5wYXRoKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlIG1p
Z2h0IG5vdCBoYXZlIGEgVGVzdCBVUkwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCisgICAgU3RyaW5n
IHRlc3RQYWdlVVJMU3RyaW5nID0gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdl
VVJMKCk7CisgICAgaWYgKHRlc3RQYWdlVVJMU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBVUkwgdGVzdFBhZ2VVUkwoVVJMKCksIHRlc3RQYWdlVVJMU3RyaW5n
KTsKKyAgICByZXR1cm4gdXJsLnByb3RvY29sKCkgPT0gdGVzdFBhZ2VVUkwucHJvdG9jb2woKSAm
JiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHRlc3RQYWdlVVJMLnBhdGgoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3JQYWdlID0gcGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFBhZ2UoKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQYWdlKTsKKyAgICBpZiAoIW1faW5z
cGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhY2tJbnNwZWN0b3JQYWdlKG1f
aW5zcGVjdG9yUGFnZSwgbV9pbnNwZWN0ZWRQYWdlKTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCksICp0
aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hc3N1bWVSZWFkQWNjZXNzVG9C
YXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNl
VVJMKCkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JG
cm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCit7CisgICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2luc3BlY3RlZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCkpIHsKKyAgICAgICAgc2hv
dygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV91bmRlclRlc3QgPSB1bmRlclRl
c3Q7CisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQ
YWdlKTsKKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNo
Q29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgaW5mb0ZvckxvY2FsRGVi
dWdnYWJsZSgpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVsKCkpKTsKKworICAgIEFTU0VS
VCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKKyAgICBtX2lzQWN0aXZlRnJvbnRlbmQgPSB0cnVlOwor
ICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVu
ZCgqdGhpcyk7CisKKyAgICBpZiAoIW1fdW5kZXJUZXN0KSB7CisgICAgICAgIG1fY2FuQXR0YWNo
ID0gcGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKTsKKyAgICAgICAgbV9pc0F0dGFjaGVkID0g
c2hvdWxkT3BlbkF0dGFjaGVkKCk7CisgICAgICAgIG1fYXR0YWNobWVudFNpZGUgPSBzdGF0aWNf
Y2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9y
QXR0YWNobWVudFNpZGUoKSk7CisKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKG1faXNBdHRhY2hlZCkpOworCisgICAgICAg
IGlmIChtX2lzQXR0YWNoZWQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lk
ZSkgeworICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICAg
ICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0
dGFjaGVkQm90dG9tKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpM
ZWZ0OgorICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKKworICAgICAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5n
VW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7CisgICAgfQorCisgICAgLy8gTm90aWZ5IFdlYktp
dCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3BlY3RvciBhdHRhY2hlcyBzbyB0aGF0IGl0IG1heSBp
bnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0aGUgX1dLSW5zcGVjdG9yIGxvYWRpbmcgaXRzIGZy
b250ZW5kLgorICAgIG1faW5zcGVjdGVkUGFnZS0+dWlDbGllbnQoKS5kaWRBdHRhY2hJbnNwZWN0
b3IoKm1faW5zcGVjdGVkUGFnZSwgKnRoaXMpOworCisgICAgLy8gQmFpbCBvdXQgaWYgdGhlIGNs
aWVudCBjbG9zZWQgdGhlIGluc3BlY3RvciBmcm9tIHRoZSBkZWxlZ2F0ZSBtZXRob2QuCisgICAg
aWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9y
UGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCBtX3VuZGVyVGVzdCA/IFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpIDogV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clBhZ2VVUkwoKSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuKCkKK3sKKyAg
ICBpZiAobV91bmRlclRlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnNwZWN0
b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXRGb3JTY29wZTxib29sPiBpc09wZW5p
bmcobV9pc09wZW5pbmcsIHRydWUpOworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUo
bV9pc1Zpc2libGUpKTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIHBsYXRmb3Jt
QXR0YWNoKCk7CisgICAgZWxzZQorICAgICAgICBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93
KCk7CisKKyAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpkaWRDbG9zZSgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KQoreworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2lzVmlzaWJsZSA9IGZhbHNlOworICAgIG1faXNQcm9maWxpbmdQYWdlID0gZmFsc2U7CisgICAg
bV9zaG93TWVzc2FnZVNlbnQgPSBmYWxzZTsKKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250
ID0gZmFsc2U7CisKKyAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOwor
CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0
SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICBp
ZiAobV9pc0FjdGl2ZUZyb250ZW5kKSB7CisgICAgICAgIG1faXNBY3RpdmVGcm9udGVuZCA9IGZh
bHNlOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNj
b25uZWN0RnJvbnRlbmQoKnRoaXMpOworICAgIH0KKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisg
ICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7CisKKyAgICAvLyBOdWxsIG91dCBtX2luc3BlY3RvclBh
Z2UgYWZ0ZXIgcGxhdGZvcm1EZXRhY2goKSwgc28gdGhlIHZpZXdzIGNhbiBiZSBjbGVhbmVkIHVw
IGNvcnJlY3RseS4KKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOworCisgICAgbV9pc0F0
dGFjaGVkID0gZmFsc2U7CisgICAgbV9jYW5BdHRhY2ggPSBmYWxzZTsKKyAgICBtX3VuZGVyVGVz
dCA9IGZhbHNlOworCisgICAgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3Bh
dGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogYXV0b21hdGlvblNlc3Npb24gPSBtX2luc3Bl
Y3RlZFBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmF1dG9tYXRpb25TZXNzaW9uKCkpCisg
ICAgICAgIGF1dG9tYXRpb25TZXNzaW9uLT5pbnNwZWN0b3JGcm9udGVuZExvYWRlZCgqbV9pbnNw
ZWN0ZWRQYWdlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkK
K3sKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHRlbGxzIHVz
IHRvIGRvIHRoaXMgb24gbG9hZC4gV2Ugd2FudCB0bworICAgIC8vIGlnbm9yZSBpdCBvbmNlIGlm
IHdlIG9ubHkgd2FudGVkIHRvIGNvbm5lY3QuIFRoaXMgYWxsb3dzIHRoZSBJbnNwZWN0b3IgdG8g
bGF0ZXIKKyAgICAvLyByZXF1ZXN0IHRvIGJlIGJyb3VnaHQgdG8gdGhlIGZyb250IHdoZW4gYSBi
cmVha3BvaW50IGlzIGhpdCBvciBzb21lIG90aGVyIGFjdGlvbi4KKyAgICBpZiAobV9pZ25vcmVG
aXJzdEJyaW5nVG9Gcm9udCkgeworICAgICAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0g
ZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1Zpc2libGUpCisg
ICAgICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7CisgICAgZWxzZQorICAgICAgICBvcGVuKCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQo
KQoreworICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxh
YmxlKQoreworICAgIGJvb2wgcHJldmlvdXNDYW5BdHRhY2ggPSBtX2NhbkF0dGFjaDsKKworICAg
IG1fY2FuQXR0YWNoID0gcGxhdGZvcm1DYW5BdHRhY2goYXZhaWxhYmxlKTsKKworICAgIGlmIChw
cmV2aW91c0NhbkF0dGFjaCA9PSBtX2NhbkF0dGFjaCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1faW5zcGVjdG9yUGFnZSAmJiAhbV91bmRlclRlc3QpCisgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJs
ZSghbV9jYW5BdHRhY2gpKTsKKworICAgIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZChtX2NhbkF0dGFjaCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RlZFVS
TENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgcGxhdGZvcm1JbnNwZWN0
ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKK3sK
KyAgICBwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkK
K3sKKyAgICBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmUgPSBhY3RpdmU7CisKKyAgICBpZiAobV9p
Z25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlKSB7CisgICAgICAgIG1faWdub3JlRWxlbWVudFNl
bGVjdGlvbkNoYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAg
ICAgICAgY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhY3RpdmUp
CisgICAgICAgIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOworICAgIGVsc2Ug
aWYgKGlzQ29ubmVjdGVkKCkpCisgICAgICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5Ojp0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCit7
CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBhY3RpdmU7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29s
PiBlbmFibGVkKQoreworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2V0TW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKGVuYWJsZWQpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlKGF2YWlsYWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oYXZhaWxhYmxlKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIHBsYXRmb3Jt
U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIHBsYXRmb3JtQXBwZW5kKGZpbGVuYW1lLCBj
b250ZW50KTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVk
KCkKK3sKKyAgICByZXR1cm4gaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWQoKSAmJiBjYW5BdHRhY2goKTsKK30KKworLy8gVW5zdXBwb3J0ZWQgY29uZmln
dXJhdGlvbnMgY2FuIHVzZSB0aGUgc3R1YnMgcHJvdmlkZWQgaGVyZS4KKworI2lmICFQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK1dlYlBhZ2VQcm94
eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW52YWxpZGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNG
cm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25z
dCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1B
cHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1EZXRhY2goKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93
RHJhZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JUZXN0UGFnZVVSTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0Rl
YnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJs
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRGVidWdnYWJsZUluZm9E
YXRhOjplbXB0eSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFu
Z2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2VuZGlmIC8vICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMmIxZmRmY2ExZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApAQCAtMCwwICsxLDMwMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQXR0YWNobWVudC5oIgorI2luY2x1
ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisj
aW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgTlNVUkw7CitPQkpDX0NMQVNTIE5TVmll
dzsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLV2ViSW5zcGVjdG9yUHJveHlP
YmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKKyNlbGlm
IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViRnJhbWVQcm94eTsKK2NsYXNzIFdlYkluc3BlY3RvclByb3h5Q2xpZW50
OworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJlZmVyZW5jZXM7CisKK2VudW0gY2xh
c3MgQXR0YWNobWVudFNpZGUgeworICAgIEJvdHRvbSwKKyAgICBSaWdodCwKKyAgICBMZWZ0LAor
fTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKKyAgICA6IHB1YmxpYyBBUEk6Ok9iamVjdElt
cGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KKyAgICAsIHB1YmxpYyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgorICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCisjaWYg
UExBVEZPUk0oV0lOKQorICAgICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5l
cgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JQcm94eT4g
Y3JlYXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3BlY3RlZFBhZ2UpKTsKKyAgICB9
CisKKyAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOwor
CisgICAgLy8gUHVibGljIEFQSXMKKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UoKSBj
b25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKyAgICBXZWJQYWdlUHJveHkqIGluc3Bl
Y3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2U7IH0KKworICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVjdG9yUGFnZTsgfQorICAgIGJv
b2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0KKyAgICBib29sIGlz
RnJvbnQoKTsKKworICAgIHZvaWQgY29ubmVjdCgpOworCisgICAgdm9pZCBzaG93KCk7CisgICAg
dm9pZCBoaWRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xvc2VGb3JDcmFzaCgp
OworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisKKyAgICB2b2lk
IHJlc2V0KCk7CisgICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkq
KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBlbnVtIGNsYXNzIEluc3BlY3Rpb25UYXJnZXRU
eXBlIHsgTG9jYWwsIFJlbW90ZSB9OworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNXaW5kb3c+IGNy
ZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFy
Z2V0VHlwZSk7CisKKyAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7
CisgICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCA9IDApOworICAg
IHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB2b2lkIHdpbmRvd0Z1bGxTY3JlZW5E
aWRDaGFuZ2UoKTsKKyAgICBOU1dpbmRvdyogaW5zcGVjdG9yV2luZG93KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KKworICAgIHZvaWQgY2xvc2VGcm9udGVuZFBh
Z2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCk7
CisKKyAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNW
aWV3ICpuZXdWaWV3KTsKKyAgICB2b2lkIGF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNX
aW5kb3cgKm9sZFdpbmRvdyk7CisgICAgdm9pZCBhdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5T
V2luZG93ICpuZXdXaW5kb3cpOworCisgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVl
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3KCkgY29uc3QgeyByZXR1cm4g
bV9pbnNwZWN0b3JWaWV3OyB9OworICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxX
ZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7CisjZW5kaWYKKworICAgIHZvaWQgc2hvd0NvbnNv
bGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNob3dNYWluUmVzb3Vy
Y2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CisKKyAgICBBdHRhY2htZW50U2lkZSBhdHRhY2ht
ZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0KKyAgICBib29sIGlz
QXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KKyAgICB2b2lkIGF0dGFj
aFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hMZWZ0KCk7CisgICAgdm9pZCBhdHRhY2hCb3R0b20o
KTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpCb3R0
b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQp
OworCisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisK
KyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOworCisgICAgYm9vbCBpc1Byb2ZpbGluZ1BhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQorICAgIHZvaWQgdG9nZ2xlUGFn
ZVByb2ZpbGluZygpOworCisgICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KKyAgICB2b2lkIHRvZ2dsZUVs
ZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVy
biBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZShib29sKTsKKworICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYkluc3BlY3RvclByb3h5
IGltcGxlbWVudGF0aW9ucy4KKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclBhZ2VVUkwoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJMKCk7CisgICAgc3RhdGljIFN0
cmluZyBpbnNwZWN0b3JCYXNlVVJMKCk7CisgICAgc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5z
cGVjdG9yUGFnZShjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgRGVidWdnYWJsZUluZm9EYXRhIGlu
Zm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5p
bXVtV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dI
ZWlnaHQ7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd1dpZHRoOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0OworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSopOworCisgICAg
dm9pZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisK
KyAgICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAorICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgQ29ubmVjdGlv
blR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb25uZWN0aW9u
VHlwZTo6TG9jYWw7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsKKyAgICB2
b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKworICAgIHZvaWQgcGxh
dGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7CisgICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsK
KyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ1Rv
RnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOwor
ICAgIHZvaWQgcGxhdGZvcm1IaWRlKCk7CisgICAgYm9vbCBwbGF0Zm9ybUlzRnJvbnQoKTsKKyAg
ICB2b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKKyAgICB2b2lk
IHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHBs
YXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwor
ICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCk7CisgICAgdW5zaWdu
ZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOworICAgIHZvaWQgcGxhdGZvcm1BdHRh
Y2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisgICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dE
cmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMp
OworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIHBsYXRmb3Jt
Q2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7CisjZWxzZQorICAgIGJvb2wgcGxh
dGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKSB7IHJldHVybiB3ZWJQcm9j
ZXNzQ2FuQXR0YWNoOyB9CisjZW5kaWYKKworICAgIC8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3JQ
cm94eSBtZXNzYWdlcworICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBj
YW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKKyAgICB2b2lkIHNldEZyb250ZW5kQ29ubmVjdGlv
bihJUEM6OkF0dGFjaG1lbnQpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisgICAgdm9pZCBkaWRDbG9z
ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBicmluZ0luc3BlY3RlZFBh
Z2VUb0Zyb250KCk7CisgICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOwor
ICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNo
b3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKKyAgICB2b2lk
IGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgdGltZWxpbmVSZWNvcmRp
bmdDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92
ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKKworICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBm
b3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKKworICAgIGJvb2wgY2FuQXR0YWNoKCkgY29uc3QgeyByZXR1
cm4gbV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNob3VsZE9wZW5BdHRhY2hlZCgpOworCisgICAg
dm9pZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25zdDsKKwor
ICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdDsKKwor
I2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIHZvaWQgdXBkYXRlSW5zcGVj
dG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAg
IHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFS
QU0pOworICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIHZvaWQgd2luZG93UmVj
ZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKSBvdmVycmlkZTsKKyNlbmRp
ZgorCisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2UgeyBudWxscHRyIH07CisgICAg
V2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisKKyAgICBib29sIG1f
dW5kZXJUZXN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWaXNpYmxlIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NhbkF0dGFjaCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZhbHNlIH07CisgICAgYm9vbCBt
X3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUZpcnN0QnJpbmdU
b0Zyb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0FjdGl2ZUZy
b250ZW5kIHsgZmFsc2UgfTsKKworICAgIEF0dGFjaG1lbnRTaWRlIG1fYXR0YWNobWVudFNpZGUg
e0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFJldGFp
blB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXdDb250cm9sbGVy
OworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JXaW5kb3c7CisgICAgUmV0YWlu
UHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKKyAgICBI
YXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1h
cDsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94eT4gbV9jbG9zZUZyb250ZW5k
QWZ0ZXJJbmFjdGl2aXR5VGltZXI7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5nOworICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKKyAgICBib29sIG1faXNPYnNlcnZpbmdDb250ZW50
TGF5b3V0UmVjdCB7IGZhbHNlIH07CisjZWxpZiBQTEFURk9STShHVEspCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVudDsKKyAgICBHdGtXaWRnZXQq
IG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKKyAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9y
V2luZG93IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9oZWFkZXJCYXIgeyBudWxscHRy
IH07CisgICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOworI2VsaWYgUExBVEZPUk0oV0lO
KQorICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQg
bV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9pbnNw
ZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9pbnNwZWN0b3JEZXRhY2hX
aW5kb3cgeyBudWxscHRyIH07CisgICAgUmVmUHRyPFdlYlZpZXc+IG1faW5zcGVjdG9yVmlldzsK
KyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVz
c2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViYjc3NTUz
YzZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNTggQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSW5z
cGVjdG9yUHJveHkgeworICAgIE9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0
YWNoLCBib29sIHVuZGVyVGVzdCkKKyAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRh
Y2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorCisgICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQo
U3RyaW5nIG1lc3NhZ2UpCisKKyAgICBGcm9udGVuZExvYWRlZCgpCisgICAgRGlkQ2xvc2UoKQor
ICAgIEJyaW5nVG9Gcm9udCgpCisgICAgQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCisgICAg
UmVvcGVuKCkKKyAgICBSZXNldFN0YXRlKCkKKworICAgIEluc3BlY3RlZFVSTENoYW5nZWQoU3Ry
aW5nIHVybFN0cmluZykKKyAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJ
bmZvIGNlcnRpZmljYXRlSW5mbykKKyAgICBFbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFj
dGl2ZSkKKyAgICBUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCisgICAgU2V0
TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQp
CisKKyAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQsIGJvb2wgYmFzZTY0
RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKKyAgICBBcHBlbmQoU3RyaW5nIGZpbGVuYW1lLCBT
dHJpbmcgY29udGVudCkKKworICAgIEF0dGFjaEJvdHRvbSgpCisgICAgQXR0YWNoUmlnaHQoKQor
ICAgIEF0dGFjaExlZnQoKQorICAgIERldGFjaCgpCisKKyAgICBBdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQorCisgICAgU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQorICAgIFNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgp
CisKKyAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKKyAgICBTdGFy
dFdpbmRvd0RyYWcoKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZlYTE1ZWU2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApA
QCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVkZWYgSGFzaE1hcDxXZWJQYWdl
UHJveHkqLCB1bnNpZ25lZD4gUGFnZUxldmVsTWFwOworCitzdGF0aWMgUGFnZUxldmVsTWFwJiBw
YWdlTGV2ZWxNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQYWdlTGV2ZWxNYXA+
IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit1bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBh
Z2UoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIGlmIChwYWdlKSB7CisgICAgICAgIGF1dG8g
ZmluZFJlc3VsdCA9IHBhZ2VMZXZlbE1hcCgpLmZpbmQocGFnZSk7CisgICAgICAgIGlmIChmaW5k
UmVzdWx0ICE9IHBhZ2VMZXZlbE1hcCgpLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZpbmRS
ZXN1bHQtPnZhbHVlICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworU3RyaW5nIGlu
c3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKK3sK
KyAgICByZXR1cm4gbWFrZVN0cmluZygiX19XZWJJbnNwZWN0b3JQYWdlR3JvdXBMZXZlbCIsIGlu
c3BlY3RvckxldmVsRm9yUGFnZShwYWdlKSwgIl9fIik7Cit9CisKK3ZvaWQgdHJhY2tJbnNwZWN0
b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSwgV2ViUGFnZVByb3h5KiBpbnNwZWN0
ZWRQYWdlKQoreworICAgIHBhZ2VMZXZlbE1hcCgpLnNldChpbnNwZWN0b3JQYWdlLCBpbnNwZWN0
b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSkpOworfQorCit2b2lkIHVudHJhY2tJbnNwZWN0
b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSkKK3sKKyAgICBwYWdlTGV2ZWxNYXAo
KS5yZW1vdmUoaW5zcGVjdG9yUGFnZSk7Cit9CisKK3N0YXRpYyBXZWJQcm9jZXNzUG9vbCogc19t
YWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CitzdGF0aWMgV2ViUHJvY2Vzc1Bvb2wqIHNfbmVzdGVk
SW5zcGVjdG9yUHJvY2Vzc1Bvb2w7CisKK1dlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9jZXNz
UG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCit7CisgICAgLy8gSGF2aW5nIG91ciBvd24g
cHJvY2VzcyBwb29sIHJlbW92ZXMgdXMgZnJvbSB0aGUgbWFpbiBwcm9jZXNzIHBvb2wgYW5kCisg
ICAgLy8gZ3VhcmFudGVlcyBubyBwcm9jZXNzIHNoYXJpbmcgZm9yIG91ciB1c2VyIGludGVyZmFj
ZS4KKyAgICBXZWJQcm9jZXNzUG9vbComIHBvb2wgPSAoaW5zcGVjdGlvbkxldmVsID09IDEpID8g
c19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgOiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29s
OworICAgIGlmICghcG9vbCkgeworICAgICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBBUEk6OlBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIHBvb2wgPSAmV2ViUHJv
Y2Vzc1Bvb2w6OmNyZWF0ZShjb25maWd1cmF0aW9uLmdldCgpKS5sZWFrUmVmKCk7CisgICAgICAg
IC8vIERvIG5vdCBkZWxheSBwcm9jZXNzIGxhdW5jaCBmb3IgaW5zcGVjdG9yIHBhZ2VzIGFzIGlu
c3BlY3RvciBwYWdlcyBkbyBub3Qga25vdyBob3cgdG8gdHJhbnNpdGlvbiBmcm9tIGEgdGVybWlu
YXRlZCBwcm9jZXNzLgorICAgICAgICBwb29sLT5kaXNhYmxlRGVsYXllZFdlYlByb2Nlc3NMYXVu
Y2goKTsKKyAgICB9CisgICAgcmV0dXJuICpwb29sOworfQorCitib29sIGlzSW5zcGVjdG9yUHJv
Y2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQoreworICAgIHJldHVybiAoc19t
YWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgJiYgc19tYWluSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0g
JnByb2Nlc3NQb29sKQorICAgICAgICB8fCAoc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCAm
JiBzX25lc3RlZEluc3BlY3RvclByb2Nlc3NQb29sID09ICZwcm9jZXNzUG9vbCk7Cit9CisKK2Jv
b2wgaXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKK3sKKyAgICByZXR1cm4g
cGFnZUxldmVsTWFwKCkuY29udGFpbnMoJndlYlBhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYzE5ZWE3NTg4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBX
ZWJQcm9jZXNzUG9vbDsKKworLy8gVGhlIGluc3BlY3RvciBwYWdlIGdyb3VwcyBhcmUgdXNlZCB0
byBnaXZlIGRpZmZlcmVudCBwcmVmZXJlbmNlcyB0byBlYWNoCisvLyBpbnNwZWN0b3IgbGV2ZWwg
Ynkgc2V0dGluZyBhIHBlci1sZXZlbCBwYWdlIGdyb3VwIGlkZW50aWZpZXIuCit1bnNpZ25lZCBp
bnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVByb3h5Kik7CitTdHJpbmcgaW5zcGVjdG9yUGFn
ZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5Kik7Cit2b2lkIHRyYWNrSW5zcGVj
dG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSogaW5zcGVj
dGVkUGFnZSk7Cit2b2lkIHVudHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVj
dG9yUGFnZSk7CisKK1dlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9jZXNzUG9vbCh1bnNpZ25l
ZCBpbnNwZWN0aW9uTGV2ZWwpOworYm9vbCBpc0luc3BlY3RvclByb2Nlc3NQb29sKFdlYlByb2Nl
c3NQb29sJik7Citib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmKTsKKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dh
YmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdn
YWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJlYmJkZjg3
YWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJQYWdlRGVidWdnYWJsZS5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK1dlYlBhZ2VEZWJ1Z2dhYmxl
OjpXZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFn
ZSkKK3sKK30KKworU3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpuYW1lKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fbmFtZU92ZXJyaWRlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbV9uYW1lT3Zl
cnJpZGU7CisKKyAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgcmV0dXJuIG1fcGFnZS5tYWluRnJhbWUoKS0+dGl0bGUoKTsKK30KKwor
U3RyaW5nIFdlYlBhZ2VEZWJ1Z2dhYmxlOjp1cmwoKSBjb25zdAoreworICAgIGlmICghbV9wYWdl
Lm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gV1RGOjpibGFua1VSTCgpLnN0cmluZygpOwor
CisgICAgU3RyaW5nIHVybCA9IG1fcGFnZS5tYWluRnJhbWUoKS0+dXJsKCkuc3RyaW5nKCk7Cisg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCkuc3Ry
aW5nKCk7CisKKyAgICByZXR1cm4gdXJsOworfQorCitib29sIFdlYlBhZ2VEZWJ1Z2dhYmxlOjpo
YXNMb2NhbERlYnVnZ2VyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlLmluc3BlY3RvckNv
bnRyb2xsZXIoKS5oYXNMb2NhbEZyb250ZW5kKCk7Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2Fi
bGU6OmNvbm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsLCBib29sIGlzQXV0b21hdGljQ29u
bmVjdGlvbiwgYm9vbCBpbW1lZGlhdGVseVBhdXNlKQoreworICAgIG1fcGFnZS5pbnNwZWN0b3JD
b250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKGNoYW5uZWwsIGlzQXV0b21hdGljQ29ubmVjdGlv
biwgaW1tZWRpYXRlbHlQYXVzZSk7Cit9CisKK3ZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmRpc2Nv
bm5lY3QoRnJvbnRlbmRDaGFubmVsJiBjaGFubmVsKQoreworICAgIG1fcGFnZS5pbnNwZWN0b3JD
b250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKGNoYW5uZWwpOworfQorCit2b2lkIFdlYlBh
Z2VEZWJ1Z2dhYmxlOjpkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBtX3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc3BhdGNoTWVzc2Fn
ZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5zZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpOworfQorCit2b2lkIFdlYlBhZ2VEZWJ1
Z2dhYmxlOjpzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fbmFt
ZU92ZXJyaWRlID0gbmFtZTsKKyAgICB1cGRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhmODQ4ZGUxMTZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dh
YmxlLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0aW9uVGFyZ2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFdlYlBhZ2VEZWJ1Z2dhYmxlIGZpbmFsIDogcHVibGlj
IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdGlvblRhcmdldCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZURlYnVnZ2FibGUpOwor
cHVibGljOgorICAgIFdlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYpOworICAgIH5XZWJQ
YWdlRGVidWdnYWJsZSgpID0gZGVmYXVsdDsKKworICAgIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJv
bGxhYmxlVGFyZ2V0OjpUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6
OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6VHlwZTo6V2ViUGFnZTsgfQorCisgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCBmaW5hbDsKKyAgICBTdHJpbmcgdXJsKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBoYXNMb2NhbERlYnVnZ2VyKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNvbm5lY3Qo
SW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9
IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSkgZmluYWw7CisgICAgdm9pZCBk
aXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikgZmluYWw7CisgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7Cisg
ICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpIGZpbmFsOworCisgICAgY29uc3QgU3RyaW5nJiBu
YW1lT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX25hbWVPdmVycmlkZTsgfQorICAgIHZvaWQg
c2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIFdlYlBhZ2VQ
cm94eSYgbV9wYWdlOworICAgIFN0cmluZyBtX25hbWVPdmVycmlkZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NPTlRST0xMQUJMRV9UQVJH
RVQoV2ViS2l0OjpXZWJQYWdlRGVidWdnYWJsZSwgV2ViUGFnZSk7CisKKyNlbmRpZiAvLyBFTkFC
TEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZWUyOGJmNzE2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJhc2UuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworc3RhdGljIFN0
cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQ
YWdlKQoreworICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKHBy
b3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKK1dlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHBhZ2UpCisgICAg
OiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRSb3V0ZXIoRnJvbnRlbmRSb3V0ZXI6OmNy
ZWF0ZSgpKQorICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcjo6Y3Jl
YXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigpKSkKK3sKKyAgICBhdXRvIHRhcmdldEFnZW50
ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9mcm9udGVuZFJvdXRlci5nZXQo
KSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CisKKyAgICBtX3RhcmdldEFnZW50ID0gdGFy
Z2V0QWdlbnQuZ2V0KCk7CisKKyAgICBtX2FnZW50cy5hcHBlbmQoV1RGTW92ZSh0YXJnZXRBZ2Vu
dCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjppbml0KCkKK3sKKyAg
ICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJ
RChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNyZWF0ZUluc3BlY3RvclRhcmdldChwYWdlVGFy
Z2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSk7Cit9CisKK3ZvaWQg
V2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQoKQoreworICAgIGRpc2Nvbm5l
Y3RBbGxGcm9udGVuZHMoKTsKKworICAgIG1fYWdlbnRzLmRpc2NhcmRWYWx1ZXMoKTsKK30KKwor
Ym9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0ZXItPmhhc0xvY2FsRnJvbnRlbmQoKTsKK30K
Kwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29ubmVjdEZyb250ZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwsIGJvb2wsIGJvb2wpCit7Cisg
ICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVuZCA9ICFtX2Zyb250ZW5kUm91dGVyLT5oYXNG
cm9udGVuZHMoKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXItPmNvbm5lY3RGcm9udGVuZChmcm9u
dGVuZENoYW5uZWwpOworCisgICAgaWYgKGNvbm5lY3RpbmdGaXJzdEZyb250ZW5kKQorICAgICAg
ICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoJm1fZnJvbnRlbmRSb3V0ZXIu
Z2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKworICAgIG1fcGFnZS5kaWRDaGFu
Z2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0ZXItPmZyb250ZW5kQ291bnQo
KSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBpZiAoaGFzTG9jYWxGcm9u
dGVuZCgpKQorICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9ySW5mb3JtYXRpb25EaWRDaGFu
Z2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNj
b25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWwpCit7CisgICAg
bV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZyb250ZW5kKGZyb250ZW5kQ2hhbm5lbCk7CisK
KyAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQgPSAhbV9mcm9udGVuZFJvdXRlci0+
aGFzRnJvbnRlbmRzKCk7CisgICAgaWYgKGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQpCisgICAg
ICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b246Okluc3BlY3RvckRlc3Ryb3llZCk7CisKKyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9y
RnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOworCisjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgaWYgKGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRl
bmQpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZvcm1hdGlvbkRpZENoYW5nZSgp
OworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5l
Y3RBbGxGcm9udGVuZHMoKQoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgYSBsb2NhbCBpbnNwZWN0
b3IgY2xpZW50LgorCisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90aWZ5IGFnZW50cyBmaXJzdCwgc2luY2UgdGhl
eSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xpZW50LgorICAgIG1fYWdlbnRzLndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRhcmdldERl
c3Ryb3llZCk7CisKKyAgICAvLyBEaXNjb25uZWN0IGFueSByZW1haW5pbmcgcmVtb3RlIGZyb250
ZW5kcy4KKyAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7CisK
KyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91
dGVyLT5mcm9udGVuZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisg
ICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlkQ2hhbmdlKCk7CisjZW5kaWYK
K30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzcGF0Y2hNZXNzYWdlRnJv
bUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9S
KQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5kaWNhdGluZyhib29sIGlu
ZGljYXRpbmcpCit7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgbV9wYWdlLnNldElu
ZGljYXRpbmcoaW5kaWNhdGluZyk7CisjZWxzZQorICAgIGlmIChpbmRpY2F0aW5nKQorICAgICAg
ICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKKyAgICBlbHNlCisgICAgICAgIG1f
cGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOworI2VuZGlmCit9CisjZW5kaWYKKwordm9p
ZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQor
eworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKG1fcGFnZSwgdGFy
Z2V0SWQsIHR5cGUpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGVz
dHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkKQoreworICAgIGF1dG8g
aXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7CisgICAgaWYgKGl0ID09IG1fdGFyZ2V0cy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldERlc3Ryb3ll
ZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3Rh
cmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250ZW5kKHRhcmdldElkLCBtZXNz
YWdlKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdWxkUGF1c2VM
b2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92aXNpb25hbFBhZ2UpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldChnZXRUYXJn
ZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKKyAgICBBU1NFUlQodGFyZ2V0KTsKKyAgICByZXR1cm4g
dGFyZ2V0LT5pc1BhdXNlZCgpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYg
cHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAg
ICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFn
ZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHRhcmdldC0+c2V0UmVzdW1lQ2FsbGJhY2so
V1RGTW92ZShjYWxsYmFjaykpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmIHByb3Zpc2lv
bmFsUGFnZSkKK3sKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShw
cm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFsUGFnZSksIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JD
b250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBh
Z2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIGRlc3Ryb3lJbnNwZWN0b3JUYXJnZXQo
Z2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG5ld1dlYlBhZ2VJRCkK
K3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElE
KG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5ld0lEID0gV2ViUGFnZUluc3BlY3RvclRhcmdl
dDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOworICAgIGF1dG8gbmV3VGFyZ2V0ID0gbV90YXJn
ZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChuZXdUYXJnZXQpOworICAgIG5ld1RhcmdldC0+
ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBtX3RhcmdldEFnZW50LT5kaWRDb21t
aXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOworCisgICAgLy8gV2UndmUgZGlzY29u
bmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCByZWNlaXZlIGFueSBtZXNzYWdl
IGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJveSBldmVyeXRoaW5nIGJ1dCB0aGUgbmV3IHRh
cmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAyOTM3PiBk
byBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRoZSBjb21taXR0ZWQgcGFnZS4K
KyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1ZXMoKSkKKyAgICAgICAgbV90
YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOworICAgIG1fdGFyZ2V0cy5jbGVh
cigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVudGlmaWVyKCksIFdURk1vdmUo
bmV3VGFyZ2V0KSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFRh
cmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYgdGFyZ2V0KQorewor
ICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQoKnRhcmdldCk7CisgICAgbV90YXJnZXRz
LnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZSh0YXJnZXQpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OGNhZWRmMGMwYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkluc3BlY3RvclRhcmdldFBy
b3h5LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldEFnZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3MgQmFja2VuZERpc3BhdGNoZXI7
CitjbGFzcyBGcm9udGVuZENoYW5uZWw7CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcik7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CisKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHBh
Z2VDbG9zZWQoKTsKKworICAgIGJvb2wgaGFzTG9jYWxGcm9udGVuZCgpIGNvbnN0OworCisgICAg
dm9pZCBjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlz
QXV0b21hdGljSW5zcGVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxz
ZSk7CisgICAgdm9pZCBkaXNjb25uZWN0RnJvbnRlbmQoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIHZvaWQgZGlz
cGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKKyNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCk7Cisj
ZW5kaWYKKworICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgdm9pZCBkZXN0cm95
SW5zcGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOworICAgIHZvaWQgc2VuZE1l
c3NhZ2VUb0luc3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CisKKyAgICBib29sIHNob3VsZFBhdXNlTG9hZGluZyhjb25zdCBQcm92
aXNpb25hbFBhZ2VQcm94eSYpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGludWVMb2FkaW5nQ2Fs
bGJhY2soY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
Jik7CisKKyAgICB2b2lkIGRpZENyZWF0ZVByb3Zpc2lvbmFsUGFnZShQcm92aXNpb25hbFBhZ2VQ
cm94eSYpOworICAgIHZvaWQgd2lsbERlc3Ryb3lQcm92aXNpb25hbFBhZ2UoY29uc3QgUHJvdmlz
aW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
IG5ld1dlYlBhZ2VJRCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRUYXJnZXQoc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiYmKTsKKworICAgIFdlYlBhZ2VQcm94eSYgbV9w
YWdlOworICAgIFJlZjxJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyPiBtX2Zyb250ZW5kUm91dGVy
OworICAgIFJlZjxJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOworICAgIEluc3BlY3Rvcjo6QWdlbnRSZWdpc3RyeSBtX2FnZW50czsKKyAgICBJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldEFnZW50KiBtX3RhcmdldEFnZW50OworICAgIEhhc2hNYXA8U3Ry
aW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+PiBtX3RhcmdldHM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOWQ1MGRjMjg2YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKKworI2luY2x1ZGUgIkFQSURlYnVnZ2FibGVJbmZvLmgiCisjaW5jbHVkZSAiUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNw
ZWN0b3JVdGlscy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVidWdnYWJsZVR5cGUu
aD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJv
eHkgZmluYWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7CitwdWJsaWM6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJv
eHkoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIHVpbnQ2NF90IGNvbm5l
Y3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCisgICAgICAgIDogbV9wcm94eShSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5z
cGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5lY3Rpb25JRCkKKyAg
ICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0
Q2xpZW50KHRoaXMpOworICAgIH0KKworICAgIH5SZW1vdGVJbnNwZWN0b3JQcm94eSgpCisgICAg
eworICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIG1fcHJveHkt
PmludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQoKQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNj46IHRoaXMgc2hvdWxkIGluZmVy
IG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRlYnVnIHRhcmdldC4KKyAgICAgICAgUmVmPEFQ
STo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJbmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6
Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKSk7CisgICAgICAgIGRlYnVnZ2FibGVJ
bmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpXZWJQYWdl
KTsKKyAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKSwgbV9pbnNw
ZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOworICAgIH0KKworICAgIHZvaWQgc2hv
dygpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zaG93KCk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRUYXJnZXROYW1lKGNvbnN0IENTdHJpbmcmIG5hbWUpCisgICAgeworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgbV9wcm94eS0+dXBkYXRlV2luZG93VGl0bGUobmFtZSk7CisjZW5kaWYKKyAg
ICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2Fn
ZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5zZW5k
TWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCwgbWVzc2FnZSk7Cisg
ICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVuZChtX2Nvbm5lY3Rpb25JRCwg
bV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZjxSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9y
Q2xpZW50OworICAgIHVpbnQ2NF90IG1fY29ubmVjdGlvbklEOworICAgIHVpbnQ2NF90IG1fdGFy
Z2V0SUQ7Cit9OworCitjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMmIFJl
bW90ZUluc3BlY3RvckNsaWVudDo6bWVzc2FnZUhhbmRsZXJzKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzPiBtZXNz
YWdlSGFuZGxlcnMgPSBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlSGFuZGxlcnMoeworICAgIHsg
IkRpZENsb3NlIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VD
YWxsYmFjaz4geyB7IH0sCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCos
IGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGlj
X2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgY2xp
ZW50LmNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAgICAgICB9fQorICAgIH0sCisgICAgeyAiRGlk
U2V0dXBJbnNwZWN0b3JDbGllbnQiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlv
bjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIoYXkpIiwKKyAgICAgICAgW10oU29ja2V0Q29ubmVjdGlv
biYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAg
ICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGJhY2tlbmRDb21tYW5kc1Zh
cmlhbnQ7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIoQGF5KSIsICZi
YWNrZW5kQ29tbWFuZHNWYXJpYW50Lm91dFB0cigpKTsKKyAgICAgICAgICAgIGNsaWVudC5zZXRC
YWNrZW5kQ29tbWFuZHMoZ192YXJpYW50X2dldF9ieXRlc3RyaW5nKGJhY2tlbmRDb21tYW5kc1Zh
cmlhbnQuZ2V0KCkpKTsKKyAgICAgICAgfX0KKyAgICB9LAorICAgIHsgIlNldFRhcmdldExpc3Qi
LCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7
ICIodGEodHNzc2IpKSIsCisgICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCog
cGFyYW1ldGVycywgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVu
dCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAg
ICAgICAgICBndWludDY0IGNvbm5lY3Rpb25JRDsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8
R1ZhcmlhbnRJdGVyPiBpdGVyOworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJz
LCAiKHRhKHRzc3NiKSkiLCAmY29ubmVjdGlvbklELCAmaXRlci5vdXRQdHIoKSk7CisgICAgICAg
ICAgICBzaXplX3QgdGFyZ2V0Q291bnQgPSBnX3ZhcmlhbnRfaXRlcl9uX2NoaWxkcmVuKGl0ZXIu
Z2V0KCkpOworICAgICAgICAgICAgVmVjdG9yPFJlbW90ZUluc3BlY3RvckNsaWVudDo6VGFyZ2V0
PiB0YXJnZXRMaXN0OworICAgICAgICAgICAgdGFyZ2V0TGlzdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHRhcmdldENvdW50KTsKKyAgICAgICAgICAgIGd1aW50NjQgdGFyZ2V0SUQ7CisgICAgICAg
ICAgICBjb25zdCBjaGFyKiB0eXBlOworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHVybDsKKyAgICAgICAgICAgIGdib29sZWFuIGhhc0xvY2Fs
RGVidWdnZXI7CisgICAgICAgICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcChpdGVyLmdl
dCgpLCAiKHQmcyZzJnNiKSIsICZ0YXJnZXRJRCwgJnR5cGUsICZuYW1lLCAmdXJsLCAmaGFzTG9j
YWxEZWJ1Z2dlcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdfc3RyY21wMCh0eXBlLCAiV2Vi
IikgfHwgIWdfc3RyY21wMCh0eXBlLCAiSmF2YVNjcmlwdCIpKQorICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRMaXN0LnVuY2hlY2tlZEFwcGVuZCh7IHRhcmdldElELCB0eXBlLCBuYW1lLCB1cmwg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbGllbnQuc2V0VGFyZ2V0TGlzdChjb25u
ZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOworICAgICAgICB9fQorICAgIH0sCisgICAg
eyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5l
Y3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHR0cykiLAorICAgICAgICBbXShTb2NrZXRDb25u
ZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAg
ICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50
Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQsIHRhcmdldElE
OworICAgICAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyAgICAgICAgICAgIGdfdmFyaWFu
dF9nZXQocGFyYW1ldGVycywgIih0dCZzKSIsICZjb25uZWN0aW9uSUQsICZ0YXJnZXRJRCwgJm1l
c3NhZ2UpOworICAgICAgICAgICAgY2xpZW50LnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25uZWN0
aW9uSUQsIHRhcmdldElELCBtZXNzYWdlKTsKKyAgICAgICAgfX0KKyAgICB9CisgICAgfSk7Cisg
ICAgcmV0dXJuIG1lc3NhZ2VIYW5kbGVyczsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpS
ZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwg
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG9ic2VydmVyKQorICAgIDogbV9ob3N0QW5kUG9ydChT
dHJpbmc6OmZyb21VVEY4KGFkZHJlc3MpICsgJzonICsgU3RyaW5nOjpudW1iZXIocG9ydCkpCisg
ICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYo
Z19jYW5jZWxsYWJsZV9uZXcoKSkpCit7CisgICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2Nr
ZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsKKyAgICBnX3NvY2tl
dF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENsaWVudC5nZXQoKSwgbV9ob3N0
QW5kUG9ydC51dGY4KCkuZGF0YSgpLCAwLCBtX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICBb
XShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0
YSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICAg
ICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3Nv
Y2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChHX1NPQ0tFVF9DTElFTlQob2JqZWN0
KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnX2Vycm9yX21h
dGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvKiBjbGllbnQgPSBzdGF0aWNf
Y2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBpZiAo
Y29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICBjbGllbnQtPnNldHVwQ29ubmVjdGlvbihTb2Nr
ZXRDb25uZWN0aW9uOjpjcmVhdGUoV1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXJz
KCksIGNsaWVudCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCJSZW1vdGVJbnNwZWN0b3JDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gaW5zcGVj
dG9yIHNlcnZlcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgY2xpZW50
LT5tX29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKmNsaWVudCk7CisgICAgICAgICAgICB9Cisg
ICAgfSwgdGhpcyk7Cit9CisKK1JlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUluc3BlY3Rv
ckNsaWVudCgpCit7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXR1cENvbm5lY3Rpb24oUmVm
PFNvY2tldENvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKK3sKKyAgICBtX3NvY2tldENvbm5lY3Rp
b24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pOworICAgIG1fc29ja2V0Q29ubmVjdGlvbi0+c2VuZE1l
c3NhZ2UoIlNldHVwSW5zcGVjdG9yQ2xpZW50IiwgZ192YXJpYW50X25ldygiKEBheSkiLCBnX3Zh
cmlhbnRfbmV3X2J5dGVzdHJpbmcoSW5zcGVjdG9yOjpiYWNrZW5kQ29tbWFuZHNIYXNoKCkuZGF0
YSgpKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1h
bmRzKGNvbnN0IGNoYXIqIGJhY2tlbmRDb21tYW5kcykKK3sKKyAgICBpZiAoIWJhY2tlbmRDb21t
YW5kcyB8fCAhYmFja2VuZENvbW1hbmRzWzBdKSB7CisgICAgICAgIG1fYmFja2VuZENvbW1hbmRz
VVJMID0gU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoYmFja2VuZENvbW1hbmRzLCBzdHJsZW4o
YmFja2VuZENvbW1hbmRzKSwgYmFzZTY0RGF0YSk7CisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwg
PSAiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCit2b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkRpZENsb3NlKCkKK3sKKyAgICBtX3Rh
cmdldHMuY2xlYXIoKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLmNsZWFyKCk7CisgICAgbV9z
b2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX29ic2VydmVyLmNvbm5lY3Rpb25DbG9z
ZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6aW5zcGVjdCh1aW50
NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQoreworICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlv
bklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElEXSB7CisgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclByb3h5PigqdGhpcywgY29ubmVjdGlv
bklELCB0YXJnZXRJRCk7CisgICAgfSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
eworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXR1
cCIsIGdfdmFyaWFudF9uZXcoIih0dCkiLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOworfQorCit2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1
aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fc29ja2V0
Q29ubmVjdGlvbi0+c2VuZE1lc3NhZ2UoIlNlbmRNZXNzYWdlVG9CYWNrZW5kIiwgZ192YXJpYW50
X25ldygiKHR0cykiLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBtZXNzYWdlLnV0ZjgoKS5kYXRh
KCkpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNsb3NlRnJvbUZyb250ZW5k
KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpCit7CisgICAgQVNTRVJU
KG1faW5zcGVjdG9yUHJveHlNYXAuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklE
LCB0YXJnZXRJRCkpKTsKKyAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJGcm9u
dGVuZERpZENsb3NlIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQpKTsKKyAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25u
ZWN0aW9uSUQsIHRhcmdldElEKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZXRUYXJnZXRMaXN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4mJiB0YXJn
ZXRMaXN0KQoreworICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMgdG8gcmVtb3ZlIHRoZW0uCisg
ICAgVmVjdG9yPHVpbnQ2NF90LCA0PiB0YXJnZXRzVG9SZW1vdmU7CisgICAgZm9yIChhdXRvJiBj
b25uZWN0aW9uVGFyZ2V0UGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5cygpKSB7CisgICAg
ICAgIGlmIChjb25uZWN0aW9uVGFyZ2V0UGFpci5maXJzdCAhPSBjb25uZWN0aW9uSUQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IHRhcmdldExpc3QpIHsKKyAgICAgICAgICAgIGlmICh0
YXJnZXQuaWQgPT0gY29ubmVjdGlvblRhcmdldFBhaXIuc2Vjb25kKSB7CisgICAgICAgICAgICAg
ICAgbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoY29ubmVjdGlvblRhcmdldFBhaXIpLT5zZXRUYXJn
ZXROYW1lKHRhcmdldC5uYW1lKTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFmb3VuZCkKKyAgICAgICAgICAgIHRhcmdldHNUb1JlbW92ZS5hcHBlbmQoY29ubmVjdGlvblRh
cmdldFBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChhdXRvIHRhcmdldElEIDogdGFyZ2V0
c1RvUmVtb3ZlKQorICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2Vf
cGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisKKyAgICBtX3RhcmdldHMuc2V0KGNvbm5l
Y3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAgbV9vYnNlcnZlci50YXJnZXRMaXN0
Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVz
c2FnZVRvRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBhdXRvIHByb3h5ID0gbV9pbnNwZWN0b3JQcm94
eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworICAgIEFT
U0VSVChwcm94eSk7CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuOworICAgIHByb3h5
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9S
ZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hZGVlMDJjZTVkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCkBAIC0w
LDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1NvY2tldENvbm5lY3Rpb24uaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dDYW5j
ZWxsYWJsZSBHQ2FuY2VsbGFibGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsKK2NsYXNzIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50Jikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNs
aWVudCYpID0gMDsKK307CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JDbGll
bnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7CisKKyAgICBzdHJ1Y3QgVGFy
Z2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ2NF90IGlkOworICAgICAgICBDU3RyaW5n
IHR5cGU7CisgICAgICAgIENTdHJpbmcgbmFtZTsKKyAgICAgICAgQ1N0cmluZyB1cmw7CisgICAg
fTsKKworICAgIGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorICAgIGNvbnN0IFN0cmluZyYgaG9zdEFu
ZFBvcnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RBbmRQb3J0OyB9CisgICAgY29uc3QgU3RyaW5n
JiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VS
TDsgfQorCisgICAgdm9pZCBpbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3Qg
dGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3QgY29ubmVj
dGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbG9z
ZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKTsK
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhh
bmRsZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKKyAgICB2b2lkIHNldHVwQ29ubmVjdGlvbihSZWY8
U29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAgdm9pZCBjb25uZWN0aW9uRGlkQ2xvc2UoKTsKKwor
ICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqKTsKKyAgICB2b2lkIHNldFRh
cmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmKTsKKyAgICB2
b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90
IHRhcmdldElELCBjb25zdCBjaGFyKik7CisKKyAgICBTdHJpbmcgbV9ob3N0QW5kUG9ydDsKKyAg
ICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisgICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2
ZXImIG1fb2JzZXJ2ZXI7CisgICAgUmVmUHRyPFNvY2tldENvbm5lY3Rpb24+IG1fc29ja2V0Q29u
bmVjdGlvbjsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8
c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNw
ZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMTEwODhkZDA4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcApAQCAt
MCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCIKKworI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiUmVt
b3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5
LmgiCisjaW5jbHVkZSAiV2ViS2l0SW5zcGVjdG9yV2luZG93LmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlV2luZG93VGl0bGUoY29uc3QgQ1N0cmlu
ZyYgdGFyZ2V0TmFtZSkKK3sKKyAgICBpZiAoIW1fd2luZG93KQorICAgICAgICByZXR1cm47Cisg
ICAgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV0VCS0lUX0lOU1BFQ1RPUl9XSU5E
T1cobV93aW5kb3cpLCAhdGFyZ2V0TmFtZS5pc051bGwoKSA/IHRhcmdldE5hbWUuZGF0YSgpIDog
bnVsbHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW90ZUluc3BlY3RvclZpZXdEZXN0cm95ZWQo
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5KQoreworICAgIGluc3BlY3Rv
clByb3h5LT5jbG9zZUZyb21DcmFzaCgpOworfQorCitXZWJQYWdlUHJveHkqIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7Cisg
ICAgQVNTRVJUKCFtX3dlYlZpZXcpOworCisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZl
cmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOworI2lmIEVO
QUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3Qg
dGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGlu
Z3MuCisgICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Cisg
ICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVk
KHRydWUpOworI2VuZGlmCisgICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0
ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7CisKKyAgICBh
dXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7
CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNz
UG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKKyAgICBwYWdlQ29uZmlndXJh
dGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMucHRyKCkpOworICAgIHBhZ2VDb25maWd1
cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKKyAgICBtX3dlYlZpZXcgPSBH
VEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKCpwYWdlQ29uZmlndXJhdGlvbi5wdHIo
KSkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYlZpZXcsICJkZXN0cm95Iiwg
R19DQUxMQkFDSyhyZW1vdGVJbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisgICAgZ19v
YmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX3dlYlZpZXcpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJm1fd2ViVmlldykpOworCisgICAgbV93aW5kb3cgPSB3ZWJraXRJbnNwZWN0
b3JXaW5kb3dOZXcobnVsbHB0cik7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihtX3dpbmRvdyksIG1fd2ViVmlldyk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1fd2ViVmlldyk7
CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1fd2luZG93KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dpbmRvdykpOworICAgIGd0a193aW5kb3dfcHJlc2Vu
dChHVEtfV0lORE9XKG1fd2luZG93KSk7CisKKyAgICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2VH
ZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkK
K3sKKyAgICBpZiAobV93ZWJWaWV3KSB7CisgICAgICAgIGlmIChhdXRvKiB3ZWJQYWdlID0gd2Vi
a2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKG1fd2ViVmlldykpKQor
ICAgICAgICAgICAgd2ViUGFnZS0+Y2xvc2UoKTsKKyAgICB9CisgICAgaWYgKG1fd2luZG93KQor
ICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aW5kb3cpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgaWYgKG1f
d2luZG93KQorICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX3dpbmRvdykp
OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2soR09i
amVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpCit7CisgICAgR0ZpbGUqIGZpbGUgPSBHX0ZJTEUoc291cmNlT2JqZWN0KTsKKyAgICBpZiAo
IWdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2ZpbmlzaChmaWxlLCByZXN1bHQsIG51bGxwdHIsIG51
bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8
V2ViUGFnZVByb3h5Kj4odXNlckRhdGEpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2Zp
bGVfZ2V0X3BhdGgoZmlsZSkpOworICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSwgcGFnZS0+d2ViUGFnZUlE
KCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKK3sKKyAgICBVTlVTRURfUEFSQU0oZm9y
Y2VTYXZlRGlhbG9nKTsKKworICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxv
ZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCisg
ICAgICAgIEdUS19XSU5ET1cobV93aW5kb3cpLCBHVEtfRklMRV9DSE9PU0VSX0FDVElPTl9TQVZF
LCAiU2F2ZSIsICJDYW5jZWwiKSk7CisKKyAgICBHdGtGaWxlQ2hvb3NlciogY2hvb3NlciA9IEdU
S19GSUxFX0NIT09TRVIoZGlhbG9nLmdldCgpKTsKKyAgICBndGtfZmlsZV9jaG9vc2VyX3NldF9k
b19vdmVyd3JpdGVfY29uZmlybWF0aW9uKGNob29zZXIsIFRSVUUpOworCisgICAgLy8gU29tZSBp
bnNwZWN0b3Igdmlld3MgKEF1ZGl0cyBmb3IgaW5zdGFuY2UpIHVzZSBhIGN1c3RvbSBVUkkgc2No
ZW1lLCBzdWNoCisgICAgLy8gYXMgd2ViLWluc3BlY3Rvci4gU28gd2UgY2FuJ3QgcmVseSBvbiB0
aGUgVVJMIGJlaW5nIGEgdmFsaWQgZmlsZTovLy8gVVJMCisgICAgLy8gdW5mb3J0dW5hdGVseS4K
KyAgICBVUkwgdXJsKFVSTCgpLCBzdWdnZXN0ZWRVUkwpOworICAgIC8vIFN0cmlwIGxlYWRpbmcg
LyBjaGFyYWN0ZXIuCisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfY3VycmVudF9uYW1lKGNob29z
ZXIsIHVybC5wYXRoKCkuc3Vic3RyaW5nKDEpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKGd0
a19uYXRpdmVfZGlhbG9nX3J1bihHVEtfTkFUSVZFX0RJQUxPRyhkaWFsb2cuZ2V0KCkpKSAhPSBH
VEtfUkVTUE9OU0VfQUNDRVBUKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y2hhcj4g
ZGF0YVZlY3RvcjsKKyAgICBDU3RyaW5nIGRhdGFTdHJpbmc7CisgICAgaWYgKGJhc2U2NEVuY29k
ZWQpIHsKKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgZGF0YVZlY3RvciwgQmFz
ZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YVZl
Y3Rvci5zaHJpbmtUb0ZpdCgpOworICAgIH0gZWxzZQorICAgICAgICBkYXRhU3RyaW5nID0gY29u
dGVudC51dGY4KCk7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gIWRhdGFTdHJpbmcuaXNOdWxs
KCkgPyBkYXRhU3RyaW5nLmRhdGEoKSA6IGRhdGFWZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBk
YXRhTGVuZ3RoID0gIWRhdGFTdHJpbmcuaXNOdWxsKCkgPyBkYXRhU3RyaW5nLmxlbmd0aCgpIDog
ZGF0YVZlY3Rvci5zaXplKCk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
dGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsKKyAgICBnX2ZpbGVfcmVwbGFjZV9j
b250ZW50c19hc3luYyhmaWxlLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3RoLCBudWxscHRyLCBmYWxz
ZSwKKyAgICAgICAgR19GSUxFX0NSRUFURV9SRVBMQUNFX0RFU1RJTkFUSU9OLCBudWxscHRyLCBy
ZW1vdGVGaWxlUmVwbGFjZUNvbnRlbnRzQ2FsbGJhY2ssIG1faW5zcGVjdG9yUGFnZSk7Cit9CisK
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit7Cit9CisKK3ZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3Qg
U3RyaW5nJikKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
aG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9y
UHJveHlDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2Vi
SW5zcGVjdG9yUHJveHlDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNTk5YzQ0NjU3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFdlYkluc3Bl
Y3RvclByb3h5Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJJbnNwZWN0b3JQcm94
eUNsaWVudCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlbldpbmRvdyhXZWJJbnNw
ZWN0b3JQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoV2ViSW5zcGVjdG9y
UHJveHkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGJyaW5nVG9Gcm9udChXZWJJbnNwZWN0b3JQ
cm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChXZWJJbnNw
ZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgdXJsKSA9IDA7CisgICAgdmlydHVhbCBib29sIGF0
dGFjaChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGV0YWNoKFdl
Ykluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hl
ZEhlaWdodChXZWJJbnNwZWN0b3JQcm94eSYsIHVuc2lnbmVkIGhlaWdodCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hlZFdpZHRoKFdlYkluc3BlY3RvclByb3h5JiwgdW5z
aWduZWQgd2lkdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoQXZhaWxh
YmlsaXR5KFdlYkluc3BlY3RvclByb3h5JiwgYm9vbCBhdmFpbGFibGUpID0gMDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2ZkZTM0OWJiNzEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcApAQCAtMCwwICsxLDUzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBHdXN0
YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2luY2x1ZGUgIkFQ
SU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCisjaW5jbHVk
ZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQ29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAi
V0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHku
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgorI2luY2x1ZGUgIldlYklu
c3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIK
KyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdl
R3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgdm9pZCBpbnNw
ZWN0b3JWaWV3RGVzdHJveWVkKEd0a1dpZGdldCosIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAg
IFdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3Bl
Y3RvclByb3h5Kj4odXNlckRhdGEpOworCisgICAgLy8gSW5mb3JtIFdlYlByb2Nlc3MgYWJvdXQg
d2ViaW5zcGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBzbywKKyAgICAvLyByZXN1bHRzIGluIGZh
aWx1cmUgb2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIHdlYmluc3BlY3Rvci4KKyAgICBpbnNw
ZWN0b3JQcm94eS0+Y2xvc2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJiBjbGllbnQpCit7
CisgICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9pbnNwZWN0b3JXaW5kb3cpOworICAgIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxl
KFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgIW1faW5zcGVjdGVk
VVJMU3RyaW5nLmlzRW1wdHkoKSA/IG1faW5zcGVjdGVkVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkg
OiBudWxscHRyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlZWRlZERhdGFi
YXNlUXVvdGEoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmLCBXS1N0
cmluZ1JlZiwgV0tTdHJpbmdSZWYsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBs
b25nLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxv
bmcgbG9uZyBleHBlY3RlZFVzYWdlLCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gc3RkOjpt
YXg8dW5zaWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVzYWdlLCBjdXJyZW50RGF0YWJhc2VVc2Fn
ZSAqIDEuMjUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJ
bnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2Fz
dDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Cisg
ICAgd2ViSW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jhc2goKTsKK30KKworc3RhdGljIHZvaWQg
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZp
Z2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5l
clJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBB
UEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZikt
PnNvdXJjZUZyYW1lKCk7CisgICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNN
YWluRnJhbWUoKSkgeworICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJ
bnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xp
ZW50SW5mbyk7CisgICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKKworICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5y
ZXF1ZXN0KCk7CisKKyAgICAvLyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBm
aWxlLgorICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFn
ZShyZXF1ZXN0LnVybCgpKSkgeworICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBl
bHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KKyAgICB0b0ltcGwobGlz
dGVuZXJSZWYpLT5pZ25vcmUoKTsKKworICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhl
IGluc3BlY3RlZCBwYWdlLgorICAgIHdlYkluc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCkt
PmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRDb250
ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJv
cG9zZWRNZW51UmVmLCBXS0FycmF5UmVmKiBuZXdNZW51UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYs
IFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgV0tNdXRhYmxlQXJyYXlSZWYgbWVudUl0
ZW1zID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKworICAgIHNpemVfdCBjb3VudCA9IFdLQXJy
YXlHZXRTaXplKHByb3Bvc2VkTWVudVJlZik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGNvbnRleHRNZW51SXRl
bSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgocHJvcG9zZWRNZW51UmVmLCBpKSk7CisgICAgICAgIHN3aXRjaCAoV0tDb250ZXh0TWVudUl0
ZW1HZXRUYWcoY29udGV4dE1lbnVJdGVtKSkgeworICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJ
dGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRl
bVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKG1lbnVJdGVtcywgY29udGV4dE1l
bnVJdGVtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgKm5l
d01lbnVSZWYgPSBtZW51SXRlbXM7Cit9CisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5zcGVjdGVk
UGFnZSgpKTsKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yVmlldyk7CisKKyAgICBhdXRvIHByZWZl
cmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldl
YktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIC8vIEFsbG93IGRldmVs
b3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91
dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lz
dGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYKKyAgICBwcmVmZXJlbmNlcy0+c2V0SmF2
YVNjcmlwdFJ1bnRpbWVGbGFncyh7CisgICAgfSk7CisgICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQ
YWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShpbnNw
ZWN0ZWRQYWdlKCkpKTsKKworICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VD
b25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vz
c1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7CisgICAgcGFn
ZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKKyAgICBw
YWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7CisgICAgbV9p
bnNwZWN0b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNv
bmZpZ3VyYXRpb24ucHRyKCkpKTsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JK
RUNUKG1faW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0
b3JWaWV3KSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvclZpZXcsICJkZXN0cm95
IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7CisKKyAgICBXS1Bh
Z2VVSUNsaWVudFYyIHVpQ2xpZW50ID0geworICAgICAgICB7IDIsIHRoaXMgfSwKKyAgICAgICAg
bnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAg
IG51bGxwdHIsIC8vIHNob3dQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIGNsb3NlUGFnZQorICAg
ICAgICBudWxscHRyLCAvLyB0YWtlRm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gZm9jdXMKKyAg
ICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1cworICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2Ny
aXB0QWxlcnQKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm0KKyAgICAg
ICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdAorICAgICAgICBudWxscHRyLCAvLyBz
ZXRTdGF0dXNUZXh0CisgICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdp
bkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAv
LyBkaWROb3RIYW5kbGVLZXlFdmVudAorICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVX
aGVlbEV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIGFyZVRvb2xiYXJzVmlzaWJsZQorICAgICAg
ICBudWxscHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNN
ZW51QmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51QmFyVmlzaWJsZQorICAg
ICAgICBudWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8g
c2V0U3RhdHVzQmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBpc1Jlc2l6YWJsZQorICAg
ICAgICBudWxscHRyLCAvLyBzZXRSZXNpemFibGUKKyAgICAgICAgbnVsbHB0ciwgLy8gZ2V0V2lu
ZG93RnJhbWUsCisgICAgICAgIG51bGxwdHIsIC8vIHNldFdpbmRvd0ZyYW1lLAorICAgICAgICBu
dWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRHJhdworICAgICAgICBudWxscHRyLCAvLyBwYWdlRGlkU2Nyb2xsCisgICAgICAgIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YSwKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuT3BlblBhbmVsLAor
ICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIGhlYWRlckhlaWdodAorICAgICAgICBudWxscHRy
LCAvLyBmb290ZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0hlYWRlcgorICAgICAg
ICBudWxscHRyLCAvLyBkcmF3Rm9vdGVyCisgICAgICAgIG51bGxwdHIsIC8vIHByaW50RnJhbWUK
KyAgICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKKyAgICAgICAgbnVsbHB0ciwgLy8gdW51c2Vk
CisgICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKKyAg
ICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAorICAgICAgICBudWxs
cHRyLCAvLyBjcmVhdGVQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJF
bGVtZW50CisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0
dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYxCisgICAgICAgIG51bGxwdHIsIC8vIHNo
b3dDb2xvclBpY2tlcgorICAgICAgICBudWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIKKyAgICAg
ICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkCisgICAgfTsKKwor
ICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0geworICAgICAg
ICB7IDAsIHRoaXMgfSwKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwK
KyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlCisg
ICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5p
c2hOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9uCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lCisgICAgICAg
IG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9hZAorICAgICAgICBudWxscHRyLCAvLyBk
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIHJlbmRlcmluZ1By
b2dyZXNzRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlCisgICAgICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwKKyAgICAgICAgbnVs
bHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQorCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVuZE5hdmln
YXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJl
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QK
KyAgICB9OworCisgICAgV0tQYWdlQ29udGV4dE1lbnVDbGllbnRWMyBjb250ZXh0TWVudUNsaWVu
dCA9IHsKKyAgICAgICAgeyAzLCB0aGlzIH0sCisgICAgICAgIG51bGxwdHIsIC8vIGdldENvbnRl
eHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51
bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNlbGVjdGVkCisgICAgICAgIG51bGxwdHIs
IC8vIGNvbnRleHRNZW51RGlzbWlzc2VkCisgICAgICAgIGdldENvbnRleHRNZW51RnJvbVByb3Bv
c2VkTWVudSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0NvbnRleHRNZW51CisgICAgICAgIG51
bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVudQorICAgIH07CisKKyAgICBXZWJQYWdlUHJveHkqIGlu
c3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JB
U0UobV9pbnNwZWN0b3JWaWV3KSk7CisgICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOworCisgICAg
V0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmdWlDbGllbnQuYmFz
ZSk7CisgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFn
ZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworICAgIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVu
dUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNvbnRleHRNZW51Q2xpZW50LmJhc2UpOwor
CisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIGlmIChtX2NsaWVudCAmJiBt
X2NsaWVudC0+b3BlbldpbmRvdygqdGhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIEd0a1dp
ZGdldCogaW5zcGVjdGVkVmlld1BhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKGluc3Bl
Y3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKKyAgICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25z
Y3JlZW5Ub3BsZXZlbFdpbmRvdyhpbnNwZWN0ZWRWaWV3UGFyZW50KSkKKyAgICAgICAgaW5zcGVj
dGVkVmlld1BhcmVudCA9IG51bGxwdHI7CisKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93
KTsKKyAgICBtX2luc3BlY3RvcldpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhpbnNw
ZWN0ZWRWaWV3UGFyZW50ID8gR1RLX1dJTkRPVyhpbnNwZWN0ZWRWaWV3UGFyZW50KSA6IG51bGxw
dHIpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5k
b3cpLCBtX2luc3BlY3RvclZpZXcpOworICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZp
ZXcpOworCisgICAgaWYgKCFtX2luc3BlY3RlZFVSTFN0cmluZy5pc0VtcHR5KCkpCisgICAgICAg
IHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7CisKKyAgICBnX29iamVjdF9hZGRfd2Vha19w
b2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZtX2luc3BlY3RvcldpbmRvdykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lO
RE9XKG1faW5zcGVjdG9yV2luZG93KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX2luc3BlY3Rv
clZpZXcpIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1f
aW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ry
b3llZCksIHRoaXMpOworICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAgIH0K
KworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCp0aGlzKTsK
KworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG51bGxw
dHI7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3Nl
Rm9yQ3Jhc2goKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFs
aWRhdGUoKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtUmVzZXRTdGF0ZSgpCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9pc09wZW5pbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCp0aGlzKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dl
dF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOworICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09u
c2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50
KEdUS19XSU5ET1cocGFyZW50KSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAgICBH
dGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmll
dyk7CisgICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJl
bnQpKQorICAgICAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgZ3RrX3dpbmRvd19pc19hY3RpdmUo
R1RLX1dJTkRPVyhwYXJlbnQpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVy
bCkKK3sKKyAgICBtX2luc3BlY3RlZFVSTFN0cmluZyA9IHVybDsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKCp0aGlzLCB1cmwpOworCisg
ICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dU
aXRsZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgp
Cit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3Iv
VXNlckludGVyZmFjZS9NYWluLmh0bWwiKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6
Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwiKTsKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNl
LyIpOworfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JM
b2NhbERlYnVnZ2FibGUoKQoreworICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1
ZyB0YXJnZXQuCisgICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKK30KKwor
dW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0
KCkKK3sKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodChpbnNwZWN0
ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKK3sKKyAgICByZXR1cm4gZ3RrX3dpZGdl
dF9nZXRfYWxsb2NhdGVkX3dpZHRoKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQoreworICAgIEdSZWZQ
dHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OworICAgIGlmICht
X2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09O
VEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyAgICAgICAgZ3Rr
X3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93KTsKKyAgICAgICAgbV9pbnNwZWN0b3JX
aW5kb3cgPSAwOworICAgIH0KKworICAgIC8vIFNldCBhIGRlZmF1bHQgc2l6ZXMgYmFzZWQgb24g
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWlu
aW11bUF0dGFjaGVkV2lkdGggPSA3NTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmlt
dW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKKworICAgIGlmIChtX2F0dGFjaG1lbnRTaWRlID09IEF0
dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKKyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVk
SGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0OworICAgICAg
ICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hl
ZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVp
Z2h0KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZFdp
ZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAvIDQ7CisgICAgICAgIHBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0
aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7
CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50ICYmIG1fY2xpZW50LT5hdHRhY2goKnRoaXMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihX
RUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIG1faW5z
cGVjdG9yVmlldywgbV9hdHRhY2htZW50U2lkZSk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1faW5z
cGVjdG9yVmlldyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNo
KCkKK3sKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBt
X2luc3BlY3RvclZpZXc7CisgICAgaWYgKCFtX2NsaWVudCB8fCAhbV9jbGllbnQtPmRldGFjaCgq
dGhpcykpIHsKKyAgICAgICAgLy8gRGV0YWNoIGlzIGNhbGxlZCB3aGVuIG1faXNBdHRhY2hlZCBp
cyB0cnVlLCBidXQgaXQgY291bGQgY2FsbGVkIGJlZm9yZQorICAgICAgICAvLyB0aGUgaW5zcGVj
dG9yIGlzIG9wZW5lZCBpZiB0aGUgaW5zcGVjdG9yIGlzIHNob3duL2Nsb3NlZCBxdWlja2x5LiBT
bywKKyAgICAgICAgLy8gd2UgbWlnaHQgbm90IGhhdmUgYSBwYXJlbnQgeWV0LgorICAgICAgICBp
ZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQobV9pbnNwZWN0b3JW
aWV3KSkKKyAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFy
ZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gZWFybHkgaWYg
d2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3
aGlsZSBhdHRhY2hlZAorICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0
aGUgaW5zcGVjdG9yIHdpbmRvdy4KKyAgICBpZiAoIW1faXNWaXNpYmxlKSB7CisgICAgICAgIC8v
IFRoZSBpbnNwZWN0b3IgdmlldyB3aWxsIGJlIGRlc3Ryb3llZCwgYnV0IHdlIGRvbid0IG5lZWQg
dG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0byBjbG9zZSB0aGUKKyAgICAgICAgLy8gaW5zcGVj
dG9yIGluIHRoaXMgY2FzZSwgc2luY2UgaXQncyBhbHJlYWR5IGNsb3NlZC4KKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworICAgICAg
ICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgb3BlbigpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBpZiAoIW1faXNBdHRhY2hl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7CisgICAgd2Via2l0V2Vi
Vmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0
ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sK
KyAgICBpZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgqdGhpcywgd2lk
dGgpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dF
Ql9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0aCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhH
T2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2Vy
RGF0YSkKK3sKKyAgICBHRmlsZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOworICAgIGlm
ICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwg
bnVsbHB0cikpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2Fz
dDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdf
ZmlsZV9nZXRfcGF0aChmaWxlKSk7CisgICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQs
IGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFs
b2cpOworCisgICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbCht
X2luc3BlY3RvclZpZXcpOworICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxl
dmVsV2luZG93KHBhcmVudCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3RrRmls
ZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2
ZV9uZXcoIlNhdmUgRmlsZSIsCisgICAgICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RLX0ZJTEVf
Q0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOworCisgICAgR3RrRmlsZUNo
b29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7CisgICAgZ3Rr
X2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVF
KTsKKworICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1
c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAorICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNv
IHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAorICAg
IC8vIHVuZm9ydHVuYXRlbHkuCisgICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKKyAg
ICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgorICAgIGd0a19maWxlX2Nob29zZXJfc2V0
X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0
YSgpKTsKKworICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0co
ZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CisgICAgQ1N0cmluZyBkYXRhU3RyaW5nOwor
ICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRl
bnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOworCisgICAgY29uc3QgY2hhciogZGF0YSA9
ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRh
dGEoKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0
YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOworICAgIEdSZWZQdHI8R0ZpbGU+
IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7Cisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Cisg
ICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxl
bmd0aCwgbnVsbHB0ciwgZmFsc2UsCisgICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNU
SU5BVElPTiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3Rv
clBhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdl
ZChib29sIGF2YWlsYWJsZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5kaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNDkwZjBlNmYzMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVj
dG9yV2luZG93LmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0SW5zcGVjdG9yV2luZG93LmgiCisKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgor
I2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3QgX1dlYktpdEluc3BlY3Rv
cldpbmRvdyB7CisgICAgR3RrV2luZG93IHBhcmVudDsKKworICAgIEd0a1dpZGdldCogaGVhZGVy
QmFyOworfTsKKworc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyB7CisgICAgR3Rr
V2luZG93Q2xhc3MgcGFyZW50OworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRJbnNwZWN0b3JX
aW5kb3csIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93LCBHVEtfVFlQRV9XSU5ET1cpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9pbnNwZWN0b3Jfd2luZG93X2NsYXNzX2luaXQoV2ViS2l0SW5zcGVjdG9y
V2luZG93Q2xhc3MqKQoreworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRv
d19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvdyogd2luZG93KQoreworICAgIHdpbmRvdy0+aGVh
ZGVyQmFyID0gZ3RrX2hlYWRlcl9iYXJfbmV3KCk7CisgICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3Rp
dGxlKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgXygiV2ViIEluc3BlY3RvciIp
KTsKKyAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc2hvd19jbG9zZV9idXR0b24oR1RLX0hFQURFUl9C
QVIod2luZG93LT5oZWFkZXJCYXIpLCBUUlVFKTsKKyAgICBndGtfd2luZG93X3NldF90aXRsZWJh
cihHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+aGVhZGVyQmFyKTsKKyAgICBndGtfd2lkZ2V0
X3Nob3cod2luZG93LT5oZWFkZXJCYXIpOworfQorCitHdGtXaWRnZXQqIHdlYmtpdEluc3BlY3Rv
cldpbmRvd05ldyhHdGtXaW5kb3cqIHBhcmVudCkKK3sKKyAgICByZXR1cm4gR1RLX1dJREdFVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgInR5cGUiLCBHVEtfV0lO
RE9XX1RPUExFVkVMLCAidHJhbnNpZW50LWZvciIsIHBhcmVudCwKKyAgICAgICAgImRlZmF1bHQt
d2lkdGgiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoLCAiZGVmYXVsdC1o
ZWlnaHQiLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCwgbnVsbHB0cikp
OworfQorCit2b2lkIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdlYktpdEluc3Bl
Y3RvcldpbmRvdyogd2luZG93LCBjb25zdCBjaGFyKiBzdWJ0aXRsZSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKHdpbmRvdykpOworCisgICAgZ3Rr
X2hlYWRlcl9iYXJfc2V0X3N1YnRpdGxlKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFy
KSwgc3VidGl0bGUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmViZGMyOGQxMDlmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5k
b3cuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cgICAgICAg
ICAgICAod2Via2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0lOU1BFQ1RPUl9XSU5ET1cob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9y
V2luZG93KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1cob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfSU5TUEVDVE9S
X1dJTkRPVykpCisjZGVmaW5lIFdFQktJVF9JTlNQRUNUT1JfV0lORE9XX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0lOU1BFQ1RP
Ul9XSU5ET1csIFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0lOU1BFQ1RPUl9XSU5ET1dfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVykpCisjZGVmaW5lIFdFQktJVF9J
TlNQRUNUT1JfV0lORE9XX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIFdlYktpdEluc3BlY3Rvcldp
bmRvd0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvdyBXZWJL
aXRJbnNwZWN0b3JXaW5kb3c7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93
Q2xhc3MgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3M7CisKK0dUeXBlIHdlYmtpdF9pbnNwZWN0
b3Jfd2luZG93X2dldF90eXBlKHZvaWQpOworCitHdGtXaWRnZXQqIHdlYmtpdEluc3BlY3Rvcldp
bmRvd05ldyhHdGtXaW5kb3cqIHBhcmVudCk7Cit2b2lkIHdlYmtpdEluc3BlY3RvcldpbmRvd1Nl
dFN1YnRpdGxlKFdlYktpdEluc3BlY3RvcldpbmRvdyosIGNvbnN0IGNoYXIqIHN1YnRpdGxlKTsK
KworR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hOTgzOTFjNDIwYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdo
bGlnaHRWaWV3LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorCisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitzdHJ1Y3QgSGlnaGxpZ2h0OworfQorCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9ySGlnaGxp
Z2h0VmlldyA6IFVJVmlldyB7CisgICAgTlNNdXRhYmxlQXJyYXkgKl9sYXllcnM7IC8vIENBU2hh
cGVMYXllcnMuCit9CistICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0Jilo
aWdobGlnaHQ7CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDY1ZjBjMDNlMzMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dL
SW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQpAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmgi
CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVh
ZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9JbnNwZWN0b3JPdmVybGF5Lmg+CisKK0BpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFt
ZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIF9sYXllcnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3Nl
bGYgX3JlbW92ZUFsbExheWVyc107CisgICAgW19sYXllcnMgcmVsZWFzZV07CisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCistICh2b2lkKV9yZW1vdmVBbGxMYXllcnMKK3sKKyAgICBmb3IgKENB
U2hhcGVMYXllciAqbGF5ZXIgaW4gX2xheWVycykKKyAgICAgICAgW2xheWVyIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKKyAgICBbX2xheWVycyByZW1vdmVBbGxPYmplY3RzXTsKK30KKworLSAodm9p
ZClfY3JlYXRlTGF5ZXJzOihOU1VJbnRlZ2VyKW51bUxheWVycworeworICAgIGlmIChbX2xheWVy
cyBjb3VudF0gPT0gbnVtTGF5ZXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfcmVt
b3ZlQWxsTGF5ZXJzXTsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVy
czsgKytpKSB7CisgICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbW0NBU2hhcGVMYXllciBh
bGxvY10gaW5pdF07CisgICAgICAgIFtfbGF5ZXJzIGFkZE9iamVjdDpsYXllcl07CisgICAgICAg
IFtzZWxmLmxheWVyIGFkZFN1YmxheWVyOmxheWVyXTsKKyAgICAgICAgW2xheWVyIHJlbGVhc2Vd
OworICAgIH0KK30KKworc3RhdGljIGJvb2wgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Q
b2ludHMoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHAyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgZDIsIFdlYkNvcmU6OkZsb2F0UG9pbnQmIGludGVyc2VjdGlvbikgCit7Cisg
ICAgLy8gRG8gdGhlIGxpbmVzIGludGVyc2VjdD8KKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRl
bXBvcmFyeUludGVyc2VjdGlvblBvaW50OworICAgIGlmICghZmluZEludGVyc2VjdGlvbihwMSwg
cDIsIGQxLCBkMiwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBJcyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIHR3byBwb2lu
dHMgb24gdGhlIGxpbmU/CisgICAgaWYgKHAxLngoKSA+PSBwMi54KCkpIHsKKyAgICAgICAgaWYg
KHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+IHAxLngoKSB8fCB0ZW1wb3JhcnlJbnRl
cnNlY3Rpb25Qb2ludC54KCkgPCBwMi54KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA+
IHAyLngoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPCBwMS54KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChwMS55KCkgPj0gcDIueSgpKSB7
CisgICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPiBwMS55KCkgfHwg
dGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwgcDIueSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rp
b25Qb2ludC55KCkgPiBwMi55KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpIDwg
cDEueSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludGVyc2Vj
dGlvbiA9IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50OworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBUaGlzIHF1YWQgaW50ZXJzZWN0aW9uIHdvcmtzIGJlY2F1c2UgdGhlIHR3byBxdWFkcyBh
cmUga25vd24gdG8gYmUgYXQgdGhlIHNhbWUKKy8vIHJvdGF0aW9uIGFuZCBjbG9ja3dpc2UtbmVz
cy4KK3N0YXRpYyBXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZEludGVyc2VjdGlvbihXZWJDb3JlOjpG
bG9hdFF1YWQgYm91bmRzLCBXZWJDb3JlOjpGbG9hdFF1YWQgdG9DbGFtcCkKK3sKKyAgICAvLyBS
ZXN1bHRpbmcgcG9pbnRzLgorICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcDEsIHAyLCBwMywgcDQ7
CisgICAgYm9vbCBjb250YWluc1BvaW50MSA9IGZhbHNlOworICAgIGJvb2wgY29udGFpbnNQb2lu
dDIgPSBmYWxzZTsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQzID0gZmFsc2U7CisgICAgYm9vbCBj
b250YWluc1BvaW50NCA9IGZhbHNlOworICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQxID0gZmFs
c2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDIgPSBmYWxzZTsKKyAgICBib29sIGludGVy
c2VjdEZvclBvaW50MyA9IGZhbHNlOworICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmFs
c2U7CisKKyAgICAvLyBUb3AgLyBib3R0b20gdmVydGljYWwgY2xhbXBpbmcuCisgICAgaWYgKGJv
dW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDEoKSkpIHsKKyAgICAgICAgY29udGFpbnNQb2lu
dDEgPSB0cnVlOworICAgICAgICBwMSA9IHRvQ2xhbXAucDEoKTsKKyAgICB9IGVsc2UgaWYgKCEo
aW50ZXJzZWN0Rm9yUG9pbnQxID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMo
Ym91bmRzLnAxKCksIGJvdW5kcy5wMigpLCB0b0NsYW1wLnAxKCksIHRvQ2xhbXAucDQoKSwgcDEp
KSkKKyAgICAgICAgcDEgPSB0b0NsYW1wLnAxKCk7CisKKyAgICBpZiAoYm91bmRzLmNvbnRhaW5z
UG9pbnQodG9DbGFtcC5wMigpKSkgeworICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Cisg
ICAgICAgIHAyID0gdG9DbGFtcC5wMigpOworICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQ
b2ludDIgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwg
Ym91bmRzLnAyKCksIHRvQ2xhbXAucDIoKSwgdG9DbGFtcC5wMygpLCBwMikpKQorICAgICAgICBw
MiA9IHRvQ2xhbXAucDIoKTsKKworICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1w
LnAzKCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKKyAgICAgICAgcDMgPSB0
b0NsYW1wLnAzKCk7CisgICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MyA9IGZpbmRJ
bnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wNCgpLCBib3VuZHMucDMoKSwg
dG9DbGFtcC5wMigpLCB0b0NsYW1wLnAzKCksIHAzKSkpCisgICAgICAgIHAzID0gdG9DbGFtcC5w
MygpOworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDQoKSkpIHsKKyAg
ICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOworICAgICAgICBwNCA9IHRvQ2xhbXAucDQoKTsK
KyAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQ0ID0gZmluZEludGVyc2VjdGlvbk9u
TGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAxKCks
IHRvQ2xhbXAucDQoKSwgcDQpKSkKKyAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7CisKKyAgICAv
LyBJZiBvbmx5IG9uZSBvZiB0aGUgcG9pbnRzIGludGVyc2VjdGVkIG9uIGVpdGhlciB0aGUgdG9w
IG9yIGJvdHRvbSBsaW5lIHRoZW4gd2UKKyAgICAvLyBjYW4gY2xhbXAgdGhlIG90aGVyIHBvaW50
IG9uIHRoYXQgbGluZSB0byB0aGUgY29ybmVyIG9mIHRoZSBib3VuZHMuCisgICAgaWYgKCFjb250
YWluc1BvaW50MSAmJiBpbnRlcnNlY3RGb3JQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MSkg
eworICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7CisgICAgICAgIHAxID0gYm91bmRzLnAx
KCk7CisgICAgfSBlbHNlIGlmICghY29udGFpbnNQb2ludDIgJiYgaW50ZXJzZWN0Rm9yUG9pbnQx
ICYmICFpbnRlcnNlY3RGb3JQb2ludDIpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVl
OworICAgICAgICBwMiA9IGJvdW5kcy5wMigpOworICAgIH0KKyAgICBpZiAoIWNvbnRhaW5zUG9p
bnQ0ICYmIGludGVyc2VjdEZvclBvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQ0KSB7CisgICAg
ICAgIGNvbnRhaW5zUG9pbnQ0ID0gdHJ1ZTsKKyAgICAgICAgcDQgPSBib3VuZHMucDQoKTsKKyAg
ICB9IGVsc2UgaWYgKCFjb250YWluc1BvaW50MyAmJiBpbnRlcnNlY3RGb3JQb2ludDQgJiYgIWlu
dGVyc2VjdEZvclBvaW50MykgeworICAgICAgICBjb250YWluc1BvaW50MyA9IHRydWU7CisgICAg
ICAgIHAzID0gYm91bmRzLnAzKCk7CisgICAgfQorCisgICAgLy8gTm93IHdlIG9ubHkgbmVlZCB0
byBwZXJmb3JtIGhvcml6b250YWwgY2xhbXBpbmcgZm9yIHVuYWRqdXN0ZWQgcG9pbnRzLgorICAg
IGlmICghY29udGFpbnNQb2ludDIgJiYgIWludGVyc2VjdEZvclBvaW50MikKKyAgICAgICAgZmlu
ZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygp
LCBwMSwgcDIsIHAyKTsKKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQzICYmICFpbnRlcnNlY3RGb3JQ
b2ludDMpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5k
cy5wMigpLCBib3VuZHMucDMoKSwgcDQsIHAzLCBwMyk7CisgICAgaWYgKCFjb250YWluc1BvaW50
MSAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKQorICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5l
QmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHAxLCBwMiwgcDEpOworICAg
IGlmICghY29udGFpbnNQb2ludDQgJiYgIWludGVyc2VjdEZvclBvaW50NCkKKyAgICAgICAgZmlu
ZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wNCgp
LCBwNCwgcDMsIHA0KTsKKworICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFF1YWQocDEsIHAyLCBw
MywgcDQpOworfQorCitzdGF0aWMgdm9pZCBsYXllclBhdGhXaXRoSG9sZShDQVNoYXBlTGF5ZXIg
KmxheWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRRdWFkJiBob2xlUXVhZCkKK3sKKyAgICAvLyBOb3RoaW5nIHRvIHNob3cuCisgICAg
aWYgKG91dGVyUXVhZCA9PSBob2xlUXVhZCB8fCBob2xlUXVhZC5jb250YWluc1F1YWQob3V0ZXJR
dWFkKSkgeworICAgICAgICBsYXllci5wYXRoID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIElmIHRoZXJlIGlzIGEgbmVnYXRpdmUgbWFyZ2luIC8gcGFkZGluZyB0aGVu
IHRoZSBvdXRlciBib3ggbWlnaHQgbm90CisgICAgLy8gZnVsbHkgY29udGFpbiB0aGUgaG9sZSBi
b3guIEluIHN1Y2ggY2FzZXMgd2UgcmVjYWxjdWxhdGUgdGhlIGhvbGUgdG8KKyAgICAvLyBiZSB0
aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gcXVhZHMuCisgICAgV2ViQ29yZTo6RmxvYXRRdWFk
IGlubmVySG9sZTsKKyAgICBpZiAob3V0ZXJRdWFkLmNvbnRhaW5zUXVhZChob2xlUXVhZCkpCisg
ICAgICAgIGlubmVySG9sZSA9IGhvbGVRdWFkOworICAgIGVsc2UKKyAgICAgICAgaW5uZXJIb2xl
ID0gcXVhZEludGVyc2VjdGlvbihvdXRlclF1YWQsIGhvbGVRdWFkKTsKKworICAgIC8vIENsb2Nr
d2lzZSBpbnNpZGUgcmVjdCAoaG9sZSksIENvdW50ZXItQ2xvY2t3aXNlIG91dHNpZGUgcmVjdCAo
ZmlsbCkuCisgICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgp
OworICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMSgpLngoKSwgaW5u
ZXJIb2xlLnAxKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5l
ckhvbGUucDIoKS54KCksIGlubmVySG9sZS5wMigpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRv
UG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAzKCkueCgpLCBpbm5lckhvbGUucDMoKS55KCkpOwor
ICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wNCgpLngoKSwgaW5u
ZXJIb2xlLnA0KCkueSgpKTsKKyAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1
YWQucDEoKS54KCksIG91dGVyUXVhZC5wMSgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9p
bnQocGF0aCwgMCwgb3V0ZXJRdWFkLnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOworICAg
IENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJR
dWFkLnAzKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1
YWQucDIoKS54KCksIG91dGVyUXVhZC5wMigpLnkoKSk7CisgICAgbGF5ZXIucGF0aCA9IHBhdGg7
CisgICAgQ0dQYXRoUmVsZWFzZShwYXRoKTsKK30KKworc3RhdGljIHZvaWQgbGF5ZXJQYXRoKENB
U2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgb3V0ZXJRdWFkKQor
eworICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKKyAg
ICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDEoKS54KCksIG91dGVyUXVh
ZC5wMSgpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFk
LnA0KCkueCgpLCBvdXRlclF1YWQucDQoKS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50
KHBhdGgsIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKKyAgICBD
R1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91dGVyUXVh
ZC5wMigpLnkoKSk7CisgICAgbGF5ZXIucGF0aCA9IHBhdGg7CisgICAgQ0dQYXRoUmVsZWFzZShw
YXRoKTsKK30KKworLSAodm9pZClfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDooY29uc3QgV2ViQ29y
ZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQgb2Zmc2V0Oih1bnNpZ25lZClvZmZzZXQKK3sKKyAgICBB
U1NFUlQoW19sYXllcnMgY291bnRdID49IG9mZnNldCArIDQpOworICAgIEFTU0VSVChoaWdobGln
aHQucXVhZHMuc2l6ZSgpID49IG9mZnNldCArIDQpOworICAgIGlmIChbX2xheWVycyBjb3VudF0g
PCBvZmZzZXQgKyA0IHx8IGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPCBvZmZzZXQgKyA0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBDQVNoYXBlTGF5ZXIgKm1hcmdpbkxheWVyID0gW19sYXllcnMg
b2JqZWN0QXRJbmRleDpvZmZzZXRdOworICAgIENBU2hhcGVMYXllciAqYm9yZGVyTGF5ZXIgPSBb
X2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDFdOworICAgIENBU2hhcGVMYXllciAqcGFk
ZGluZ0xheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAyXTsKKyAgICBDQVNo
YXBlTGF5ZXIgKmNvbnRlbnRMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsg
M107CisKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFyZ2luUXVhZCA9IGhpZ2hsaWdodC5xdWFk
c1tvZmZzZXRdOworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBib3JkZXJRdWFkID0gaGlnaGxpZ2h0
LnF1YWRzW29mZnNldCArIDFdOworICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBwYWRkaW5nUXVhZCA9
IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAyXTsKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgY29u
dGVudFF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgM107CisKKyAgICBtYXJnaW5MYXll
ci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdodC5tYXJnaW5Db2xvcik7CisgICAg
Ym9yZGVyTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuYm9yZGVyQ29s
b3IpOworICAgIHBhZGRpbmdMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGhpZ2hsaWdo
dC5wYWRkaW5nQ29sb3IpOworICAgIGNvbnRlbnRMYXllci5maWxsQ29sb3IgPSBjYWNoZWRDR0Nv
bG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOworCisgICAgbGF5ZXJQYXRoV2l0aEhvbGUobWFy
Z2luTGF5ZXIsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQpOworICAgIGxheWVyUGF0aFdpdGhIb2xl
KGJvcmRlckxheWVyLCBib3JkZXJRdWFkLCBwYWRkaW5nUXVhZCk7CisgICAgbGF5ZXJQYXRoV2l0
aEhvbGUocGFkZGluZ0xheWVyLCBwYWRkaW5nUXVhZCwgY29udGVudFF1YWQpOworICAgIGxheWVy
UGF0aChjb250ZW50TGF5ZXIsIGNvbnRlbnRRdWFkKTsKK30KKworLSAodm9pZClfbGF5b3V0Rm9y
Tm9kZUxpc3RIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Cit7
CisgICAgaWYgKCFoaWdobGlnaHQucXVhZHMuc2l6ZSgpKSB7CisgICAgICAgIFtzZWxmIF9yZW1v
dmVBbGxMYXllcnNdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdW5zaWduZWQgbm9k
ZUNvdW50ID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSAvIDQ7CisgICAgW3NlbGYgX2NyZWF0ZUxh
eWVyczpub2RlQ291bnQgKiA0XTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rl
Q291bnQ7ICsraSkKKyAgICAgICAgW3NlbGYgX2xheW91dEZvck5vZGVIaWdobGlnaHQ6aGlnaGxp
Z2h0IG9mZnNldDppICogNF07Cit9CisKKy0gKHZvaWQpX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0
Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAoreworICAgIE5TVUludGVnZXIg
bnVtTGF5ZXJzID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKTsKKyAgICBpZiAoIW51bUxheWVycykg
eworICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bnVtTGF5ZXJzXTsKKworICAgIENHQ29sb3JS
ZWYgY29udGVudENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuY29udGVudENvbG9yKTsK
KyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgeworICAgICAg
ICBDQVNoYXBlTGF5ZXIgKmxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAg
ICAgbGF5ZXIuZmlsbENvbG9yID0gY29udGVudENvbG9yOworICAgICAgICBsYXllclBhdGgobGF5
ZXIsIGhpZ2hsaWdodC5xdWFkc1tpXSk7CisgICAgfQorfQorCistICh2b2lkKXVwZGF0ZTooY29u
c3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKK3sKKyAgICBpZiAoaGlnaGxpZ2h0LnR5
cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6Tm9kZSB8fCBoaWdobGlnaHQudHlwZSA9PSBX
ZWJDb3JlOjpIaWdobGlnaHRUeXBlOjpOb2RlTGlzdCkKKyAgICAgICAgW3NlbGYgX2xheW91dEZv
ck5vZGVMaXN0SGlnaGxpZ2h0OmhpZ2hsaWdodF07CisgICAgZWxzZSBpZiAoaGlnaGxpZ2h0LnR5
cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6UmVjdHMpCisgICAgICAgIFtzZWxmIF9sYXlv
dXRGb3JSZWN0c0hpZ2hsaWdodDpoaWdobGlnaHRdOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rv
ck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmJhNjk1ZTZiYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMCwwICsxLDM0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpbXBvcnQgPFVJS2l0L1VJR2Vz
dHVyZVJlY29nbml6ZXIuaD4KKworQGludGVyZmFjZSBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0
dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKKy0gKENHUG9pbnQpbG9jYXRpb25J
blZpZXc6KFVJVmlldyAqKXZpZXc7CitAZW5kCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0
dXJlUmVjb2duaXplci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3Mv
V0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA2N2ZlN2JjY2RiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFy
Y2hHZXN0dXJlUmVjb2duaXplci5tbQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVj
b2duaXplci5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8VUlLaXQv
VUlHZXN0dXJlUmVjb2duaXplclN1YmNsYXNzLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisKK0BpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ciB7CisgICAgUmV0YWluUHRyPFVJVG91Y2g+IF90b3VjaDsKK30KKworLSAoQ0dQb2ludClsb2Nh
dGlvbkluVmlldzooVUlWaWV3ICopdmlldworeworICAgIHJldHVybiBbX3RvdWNoIGxvY2F0aW9u
SW5WaWV3OnZpZXddOworfQorCistICh2b2lkKV9wcm9jZXNzVG91Y2hlczooTlNTZXQgKil0b3Vj
aGVzIHN0YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpbmV3U3RhdGUKK3sKKyAgICBBU1NF
UlQoX3RvdWNoKTsKKyAgICBpZiAoW3RvdWNoZXMgY29udGFpbnNPYmplY3Q6X3RvdWNoLmdldCgp
XSkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IG5ld1N0YXRlOworfQorCistICh2b2lkKXRvdWNoZXNC
ZWdhbjooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAg
aWYgKHNlbGYuc3RhdGUgIT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlUG9zc2libGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVCghX3RvdWNoKTsKKyAgICBfdG91Y2ggPSBbdG91Y2hl
cyBhbnlPYmplY3RdOworCisgICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6
VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW5dOworfQorCistICh2b2lkKXRvdWNoZXNNb3Zl
ZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgW3Nl
bGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRl
Q2hhbmdlZF07Cit9CisKKy0gKHZvaWQpdG91Y2hlc0VuZGVkOihOU1NldCAqKXRvdWNoZXMgd2l0
aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91
Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZF07Cit9CisKKy0gKHZvaWQp
dG91Y2hlc0NhbmNlbGxlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2
ZW50Cit7CisgICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJl
UmVjb2duaXplclN0YXRlQ2FuY2VsbGVkXTsKK30KKworLSAodm9pZClyZXNldAoreworICAgIF90
b3VjaCA9IG5pbDsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YWJk
ZWI1ZjZkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KQEAgLTAsMCArMSwyNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCisKKyNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIK
KyNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbXBvcnQgIldLRnJh
bWVJbmZvLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCisjaW1wb3J0
ICJXS05hdmlnYXRpb25BY3Rpb24uaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRlLmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKKyNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CisjaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KKyNpbXBv
cnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK0Bp
bnRlcmZhY2UgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIDogTlNPYmplY3Qg
PE5TV2luZG93RGVsZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gewor
ICAgIFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKK30K
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcgorCistIChOU1Jl
Y3Qpd2luZG93OihOU1dpbmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cg
KilzaGVldCB1c2luZ1JlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJl
Y3QoKS5oZWlnaHQoKSwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsK
KyAgICByZXR1cm4gcmVjdDsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3Rv
clByb3h5Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9y
RGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJv
bGxlcgoreworICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsKK30KKworLSAo
Qk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICByZXR1
cm4gX2luc3BlY3RvclByb3h5LT5pc1VuZGVyVGVzdCgpOworfQorCitAZW5kCisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dLV2ViVmlldyAqUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OndlYlZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX2luc3Bl
Y3RvclZpZXcuZ2V0KCkud2ViVmlldzsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAg
IG1fb2JqQ0FkYXB0ZXIgPSBhZG9wdE5TKFtbV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNB
ZGFwdGVyIGFsbG9jXSBpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsKKwor
ICAgIG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
IGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFBhZ2U6bnVsbHB0cl0pOworICAgIFttX2luc3BlY3Rv
clZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICBtX3dp
bmRvdyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhOU1plcm9SZWN0
LCBXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZSk7CisgICAg
W21fd2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworICAgIFttX3dpbmRv
dyBzZXRGcmFtZUF1dG9zYXZlTmFtZTpAIldLUmVtb3RlV2ViSW5zcGVjdG9yV2luZG93RnJhbWUi
XTsKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBtX3dpbmRvdy5nZXQoKS5jb250ZW50Vmll
dzsKKyAgICBbd2ViVmlldygpIHNldEZyYW1lOmNvbnRlbnRWaWV3LmJvdW5kc107CisgICAgW2Nv
bnRlbnRWaWV3IGFkZFN1YnZpZXc6d2ViVmlldygpXTsKKworICAgIHJldHVybiB3ZWJWaWV3KCkt
Pl9wYWdlLmdldCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBpZiAobV93aW5kb3cpIHsKKyAg
ICAgICAgW21fd2luZG93IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX3dpbmRvdyBjbG9z
ZV07CisgICAgICAgIG1fd2luZG93ID0gbmlsOworICAgIH0KKworICAgIGlmIChtX2luc3BlY3Rv
clZpZXcpIHsKKyAgICAgICAgW21faW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxd
OworICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBuaWw7CisgICAgfQorCisgICAgaWYgKG1fb2Jq
Q0FkYXB0ZXIpCisgICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBuaWw7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7CisgICAgW05TV2luZG93
IHJlbW92ZUZyYW1lVXNpbmdOYW1lOlttX3dpbmRvdyBmcmFtZUF1dG9zYXZlTmFtZV1dOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7
CisgICAgW21fd2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07CisgICAgW21fd2luZG93
IG1ha2VGaXJzdFJlc3BvbmRlcjp3ZWJWaWV3KCldOworfQorCit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxv
ZykKK3sKKyAgICAvLyBGSVhNRTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KKwor
ICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgTlNVUkwgKnBs
YXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5n
ZXQoKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKSB7CisgICAgICAgIHBsYXRmb3JtVVJMID0gW05T
VVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsKKyAgICAgICAgLy8gVGhlIHVzZXIgbXVz
dCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCisgICAg
ICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChwbGF0
Zm9ybVVSTCk7CisgICAgaWYgKCFwbGF0Zm9ybVVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cuCisgICAgU3RyaW5nIHN1Z2dlc3RlZFVS
TENvcHkgPSBzdWdnZXN0ZWRVUkw7CisgICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVudDsK
KworICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7CisgICAgICAgIEFT
U0VSVChhY3R1YWxVUkwpOworCisgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0
KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CisKKyAgICAgICAgaWYgKGJhc2U2NEVuY29k
ZWQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7CisgICAgICAgICAgICBpZiAoIWJh
c2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFD
b250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgp
IGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VS
TDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGlu
ZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKKworICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlk
U2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOworICAgIH07CisKKyAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgeworICAgICAgICBz
YXZlVG9VUkwocGxhdGZvcm1VUkwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNT
YXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07CisgICAgcGFuZWwubmFt
ZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVudDsKKworICAg
IC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMgZmlsZSB0
byBhIHBhdGggYW5kCisgICAgLy8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0byBzaG93
LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKKyAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGZv
ciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgorICAgIGlmIChw
bGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCisgICAgICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9IFtwbGF0
Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdOworCisgICAgYXV0byBjb21w
bGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0
ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7CisgICAgICAgIHNhdmVUb1VSTChw
YW5lbC5VUkwpOworICAgIH07CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gbV93aW5kb3cgPyBt
X3dpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOworICAgIGlmICh3aW5kb3cpCisgICAg
ICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5k
bGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFtwYW5lbCBydW5Nb2RhbF0pOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5n
JiBjb250ZW50KQoreworICAgIC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5
TWFjLgorCisgICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0
KHN1Z2dlc3RlZFVSTCk7CisgICAgLy8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFz
IGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgorICAgIGlmICghYWN0
dWFsVVJMKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtO
U0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJy
b3I6TlVMTF07CisgICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZpbGVdOworICAgIFtoYW5kbGUgd3Jp
dGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07
CisgICAgW2hhbmRsZSBjbG9zZUZpbGVdOworCisgICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQ
YWdlID0gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKKyAgICBpbnNwZWN0b3JQYWdlLT5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFs
VVJMIGFic29sdXRlU3RyaW5nXSksIGluc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAg
IHdlYlZpZXcoKS0+X3BhZ2UtPnN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBbW05TV29ya3NwYWNlIHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzp1cmxdXTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUlu
Zm8pCit7CisgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKKworICAgIFJl
dGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtb
U0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7CisKKyAgICBBU1NFUlQobV93aW5kb3cp
OworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04pCisgICAgW2NlcnRpZmljYXRlUGFu
ZWwgYmVnaW5TaGVldEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBk
aWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJ
bmZvLnRydXN0KCkgc2hvd0dyb3VwOllFU107CisjZWxzZQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVs
IGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlk
RW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNBcnJh
eSAqKWNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107Cisj
ZW5kaWYKKworICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVs
IGhhcyBiZWVuIGRpc3BsYXllZCwgYmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNuJ3Qg
ZXhpc3QgYmVmb3JlaGFuZC4KKyAgICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVWaWV3
ID0gW2NlcnRpZmljYXRlUGFuZWwgY2VydGlmaWNhdGVWaWV3XTsKKyAgICBbY2VydGlmaWNhdGVW
aWV3IHNldERpc3BsYXlUcnVzdDpZRVNdOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFi
bGVUcnVzdDpOT107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZRVNd
OworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wOGJkMDhmZjlk
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9t
YWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorI2lt
cG9ydCA8d3RmL05ha2VkUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisKK09CSkNfQ0xBU1Mg
V0tXZWJWaWV3OworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK30K
KworQHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKKworTlNfQVNT
VU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
IDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBXS1dlYlZpZXcg
KndlYlZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEluc3BlY3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PilpbnNwZWN0ZWRQ
YWdlOworCisrIChCT09MKXZpZXdJc0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZpZXc7CisK
K0BlbmQKKworQHByb3RvY29sIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNP
YmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0
b3JEaWRDcmFzaDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250
cm9sbGVyOworLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJU
ZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7
CistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cg
KiluZXdXaW5kb3c7CistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2lu
ZG93OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7
CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5kOTI2M2UwZmQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5tbQpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgorCisjaWYgUExBVEZPUk0oTUFD
KQorCisjaW1wb3J0ICJBUElOYXZpZ2F0aW9uLmgiCisjaW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgi
CisjaW1wb3J0ICJXS0ZyYW1lSW5mby5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JXS1dlYlZpZXcu
aCIKKyNpbXBvcnQgIldLTmF2aWdhdGlvbkFjdGlvbi5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9u
RGVsZWdhdGUuaCIKKyNpbXBvcnQgIldLT3BlblBhbmVsUGFyYW1ldGVycy5oIgorI2ltcG9ydCAi
V0tQcmVmZXJlbmNlc1ByaXZhdGUuaCIKKyNpbXBvcnQgIldLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiV0tVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKKyNpbXBv
cnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMu
aCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+
CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAoKSA8V0tVSURlbGVnYXRl
LCBXS05hdmlnYXRpb25EZWxlZ2F0ZSwgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgeworICAgIE5h
a2VkUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfaW5zcGVjdGVkUGFnZTsKKyAgICBSZXRhaW5Q
dHI8V0tJbnNwZWN0b3JXS1dlYlZpZXc+IF93ZWJWaWV3OworICAgIFdlYWtPYmpDUHRyPGlkIDxX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+PiBfZGVsZWdhdGU7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEluc3BlY3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktpdDo6V2ViUGFn
ZVByb3h5PilpbnNwZWN0ZWRQYWdlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBUaGUgKGxvY2FsKSBpbnNwZWN0ZWQgcGFn
ZSBpcyBuaWwgaWYgdGhlIGNvbnRyb2xsZXIgaXMgaG9zdGluZyBhIFJlbW90ZSBXZWIgSW5zcGVj
dG9yIHZpZXcuCisgICAgX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChfd2ViVmlldykgewor
ICAgICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpuaWxdOworICAgICAgICBbX3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5pbF07CisgICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZTpuaWxdOworICAgICAgICBfd2ViVmlldyA9IG5pbDsKKyAgICB9
CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKGlkIDxXS0luc3BlY3RvclZpZXdDb250
cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXRBdXRv
cmVsZWFzZWQoKTsKK30KKworLSAoV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIC8vIENvbnN0
cnVjdCBsYXppbHkgc28gdGhlIGNsaWVudCBjYW4gc2V0IHRoZSBkZWxlZ2F0ZSBiZWZvcmUgdGhl
IFdlYlZpZXcgaXMgY3JlYXRlZC4KKyAgICBpZiAoIV93ZWJWaWV3KSB7CisgICAgICAgIE5TUmVj
dCBpbml0aWFsRnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlh
bFdpbmRvd0hlaWdodCk7CisgICAgICAgIF93ZWJWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9y
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmluaXRpYWxGcmFtZSBjb25maWd1cmF0aW9u
OltzZWxmIGNvbmZpZ3VyYXRpb25dXSk7CisgICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRl
OnNlbGZdOworICAgICAgICBbX3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOnNlbGZdOwor
ICAgICAgICBbX3dlYlZpZXcgc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6c2VsZl07Cisg
ICAgICAgIFtfd2ViVmlldyBfc2V0QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzOk5P
XTsKKyAgICAgICAgW193ZWJWaWV3IF9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOllFU107CisgICAg
ICAgIFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5T
Vmlld0hlaWdodFNpemFibGVdOworICAgIH0KKworICAgIHJldHVybiBfd2ViVmlldy5nZXQoKTsK
K30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAo
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24KK3sKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OworCisgICAgV0tQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBjb25maWd1cmF0aW9uLmdldCgp
LnByZWZlcmVuY2VzOworICAgIHByZWZlcmVuY2VzLl9hbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVS
THMgPSBZRVM7CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzOllFU107CisgICAgcHJlZmVyZW5jZXMuX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9
IF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGljeUFsbG93QWxsOworICAgIHByZWZlcmVuY2VzLl9qYXZh
U2NyaXB0UnVudGltZUZsYWdzID0gMDsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBBbGxvdyBk
ZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdp
dGhvdXQgY2hhbmdpbmcgc2V0dGluZ3MuCisgICAgcHJlZmVyZW5jZXMuX2RldmVsb3BlckV4dHJh
c0VuYWJsZWQgPSBZRVM7CisgICAgcHJlZmVyZW5jZXMuX2xvZ3NQYWdlTWVzc2FnZXNUb1N5c3Rl
bUNvbnNvbGVFbmFibGVkID0gWUVTOworI2VuZGlmCisKKyAgICBwcmVmZXJlbmNlcy5fZGlhZ25v
c3RpY0xvZ2dpbmdFbmFibGVkID0gWUVTOworCisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxl
ckluc3BlY3RvcklzVW5kZXJUZXN0OildKSB7CisgICAgICAgIGlmIChbX2RlbGVnYXRlIGluc3Bl
Y3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6c2VsZl0pIHsKKyAgICAgICAg
ICAgIHByZWZlcmVuY2VzLl9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9IE5P
OworICAgICAgICAgICAgcHJlZmVyZW5jZXMuX3BhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkID0gTk87CisgICAgICAgIH0KKyAgICB9CisKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRQcm9jZXNzUG9vbDp3cmFwcGVyKFdlYktpdDo6aW5zcGVjdG9yUHJvY2Vzc1Bvb2wo
V2ViS2l0OjppbnNwZWN0b3JMZXZlbEZvclBhZ2UoX2luc3BlY3RlZFBhZ2UpKSldOworICAgIFtj
b25maWd1cmF0aW9uIF9zZXRHcm91cElkZW50aWZpZXI6V2ViS2l0OjppbnNwZWN0b3JQYWdlR3Jv
dXBJZGVudGlmaWVyRm9yUGFnZShfaW5zcGVjdGVkUGFnZSldOworCisgICAgcmV0dXJuIGNvbmZp
Z3VyYXRpb24uYXV0b3JlbGVhc2UoKTsKK30KKworKyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJW
aWV3OihOU1ZpZXcgKil2aWV3Cit7CisgICAgcmV0dXJuIFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dL
SW5zcGVjdG9yV0tXZWJWaWV3IGNsYXNzXV07Cit9CisKKy8vIE1BUks6IFdLVUlEZWxlZ2F0ZSBt
ZXRob2RzCisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZ2V0V2luZG93
RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKENHUmVjdCkpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ0dSZWN0WmVybyk7CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihOU1JlY3RUb0NHUmVjdChbd2ViVmlldyBmcmFtZV0pKTsKK30KKworLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzZXRXaW5kb3dGcmFtZTooQ0dSZWN0KWZyYW1lCit7
CisgICAgaWYgKCFfd2ViVmlldy5nZXQoKS53aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAg
IFtfd2ViVmlldy5nZXQoKS53aW5kb3cgc2V0RnJhbWU6TlNSZWN0RnJvbUNHUmVjdChmcmFtZSkg
ZGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
cnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6KFdLT3BlblBhbmVsUGFyYW1ldGVycyAqKXBhcmFt
ZXRlcnMgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1VSTCAqPiAqVVJMcykpY29tcGxldGlvbkhhbmRsZXIK
K3sKKyAgICBOU09wZW5QYW5lbCAqb3BlblBhbmVsID0gW05TT3BlblBhbmVsIG9wZW5QYW5lbF07
CisgICAgb3BlblBhbmVsLmFsbG93c011bHRpcGxlU2VsZWN0aW9uID0gcGFyYW1ldGVycy5hbGxv
d3NNdWx0aXBsZVNlbGVjdGlvbjsKKworICAgIGF1dG8gcmVwb3J0U2VsZWN0ZWRGaWxlcyA9IF4o
TlNJbnRlZ2VyIHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25z
ZU9LKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIob3BlblBhbmVsLlVSTHMpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgIH07CisK
KyAgICBpZiAoX3dlYlZpZXcuZ2V0KCkud2luZG93KQorICAgICAgICBbb3BlblBhbmVsIGJlZ2lu
U2hlZXRNb2RhbEZvcldpbmRvdzpfd2ViVmlldy5nZXQoKS53aW5kb3cgY29tcGxldGlvbkhhbmRs
ZXI6cmVwb3J0U2VsZWN0ZWRGaWxlc107CisgICAgZWxzZQorICAgICAgICByZXBvcnRTZWxlY3Rl
ZEZpbGVzKFtvcGVuUGFuZWwgcnVuTW9kYWxdKTsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46KFdL
U2VjdXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjdXJyZW50UXVvdGE6KHVuc2lnbmVkIGxv
bmcgbG9uZyljdXJyZW50UXVvdGEgY3VycmVudE9yaWdpblVzYWdlOih1bnNpZ25lZCBsb25nIGxv
bmcpY3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOih1bnNpZ25lZCBsb25n
IGxvbmcpY3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZylleHBl
Y3RlZFVzYWdlIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikodW5zaWduZWQgbG9uZyBsb25nIG5l
d1F1b3RhKSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICBkZWNpc2lvbkhhbmRsZXIoc3RkOjptYXg8
dW5zaWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVzYWdlLCBjdXJyZW50VXNhZ2UgKiAxLjI1KSk7
Cit9CisKKy0gKE5TTWVudSAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNvbnRleHRN
ZW51OihOU01lbnUgKiltZW51IGZvckVsZW1lbnQ6KF9XS0NvbnRleHRNZW51RWxlbWVudEluZm8g
KillbGVtZW50Cit7CisgICAgZm9yIChOU0ludGVnZXIgaSA9IG1lbnUubnVtYmVyT2ZJdGVtcyAt
IDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKml0ZW0gPSBbbWVudSBpdGVt
QXRJbmRleDppXTsKKyAgICAgICAgc3dpdGNoIChpdGVtLnRhZykgeworICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQ6CisgICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6CisgICAgICAgIGNhc2Ug
a1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAgICBjYXNlIGtX
S0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6CisgICAgICAgICAgICBbbWVu
dSByZW1vdmVJdGVtQXRJbmRleDppXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIG1lbnU7Cit9CisKKy8vIE1BUks6IFdLTmF2aWdhdGlvbkRlbGVn
YXRlIG1ldGhvZHMKKworLSAodm9pZCl3ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5h
dGU6KFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9yRGlkQ3Jhc2g6KV0pCisgICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDpzZWxmXTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2
aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkIChe
KShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIC8vIEFs
bG93IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBpZiAoIW5hdmln
YXRpb25BY3Rpb24udGFyZ2V0RnJhbWUuaXNNYWluRnJhbWUpIHsKKyAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUu
CisgICAgaWYgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3Rv
clBhZ2UobmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0LlVSTCkpIHsKKyAgICAgICAgZGVjaXNpb25I
YW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlLgorICAgIGRlY2lzaW9uSGFu
ZGxlcihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lDYW5jZWwpOworICAgIAorICAgIC8vIEFuZCBp
bnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIGlmIChfaW5zcGVjdGVk
UGFnZSkKKyAgICAgICAgX2luc3BlY3RlZFBhZ2UtPmxvYWRSZXF1ZXN0KG5hdmlnYXRpb25BY3Rp
b24ucmVxdWVzdCk7Cit9CisKKy8vIE1BUks6IFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUg
bWV0aG9kcworCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0b3JX
S1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgT3B0aW9uU2V0PFdlYkNvcmU6OlJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0
aW9uczsKKyAgICBpZiAoV2ViS2l0OjpsaW5rZWRPbk9yQWZ0ZXIoV2ViS2l0OjpTREtWZXJzaW9u
OjpGaXJzdFdpdGhFeHBpcmVkT25seVJlbG9hZEJlaGF2aW9yKSkKKyAgICAgICAgcmVsb2FkT3B0
aW9ucy5hZGQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSk7CisKKyAgICBfaW5z
cGVjdGVkUGFnZS0+cmVsb2FkKHJlbG9hZE9wdGlvbnMpOworfQorCistICh2b2lkKWluc3BlY3Rv
cldLV2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmll
dworeworICAgIGlmICghX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIF9p
bnNwZWN0ZWRQYWdlLT5yZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpGcm9tT3JpZ2luKTsK
K30KKworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXc6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICop
d2ViVmlldyB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdworeworICAgIGlm
ICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6d2lsbE1vdmVUb1dpbmRvdzopXSkKKyAgICAgICAgW19k
ZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjpzZWxmIHdpbGxNb3ZlVG9XaW5kb3c6bmV3
V2luZG93XTsKK30KKworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6
KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghIV9kZWxlZ2F0ZSAm
JiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KV0pCisgICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6c2VsZl07Cit9CisKK0BlbmQKKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzU3ZTc3Y2ZlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3
LmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CisKKyNpZiBQTEFURk9STShNQUMpCisKK0Bwcm90b2NvbCBX
S0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOworCitAaW50ZXJmYWNlIFdLSW5zcGVjdG9yV0tX
ZWJWaWV3IDogV0tXZWJWaWV3CitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPFdLSW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+IGluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOworQGVu
ZAorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZQorQHJlcXVpcmVkCist
ICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3
ZWJWaWV3OworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOihXS0lu
c3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7CistICh2b2lkKWluc3BlY3RvcldLV2ViVmlldzoo
V0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93
ICopbmV3V2luZG93OworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6
KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9t
YWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi40YmZlZjRhMDFiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
V0tJbnNwZWN0b3JXS1dlYlZpZXcuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAi
V0tJbnNwZWN0b3JQcml2YXRlTWFjLmgiCisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKwor
QGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yV0tXZWJWaWV3IHsKKyAgICBXZWFrT2JqQ1B0cjxp
ZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4+IF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZTsKK30KKworLSAoTlNSZWN0KV9vcGFxdWVSZWN0Rm9yV2luZG93TW92ZVdoZW5JblRpdGxl
YmFyCit7CisgICAgLy8gVGhpcyBjb252aW5jZXMgQXBwS2l0IHRvIGFsbG93IHdpbmRvdyBtb3Zl
cyB3aGVuIGNsaWNraW5nIGFueXdoZXJlIGluIHRoZSB0aXRsZWJhciAodG9wIDIycHQpCisgICAg
Ly8gd2hlbiB0aGlzIHZpZXcncyBjb250ZW50cyBjb3ZlciB0aGUgZW50aXJlIHdpbmRvdydzIGNv
bnRlbnRzLCBpbmNsdWRpbmcgdGhlIHRpdGxlYmFyLgorICAgIHJldHVybiBOU1plcm9SZWN0Owor
fQorCistIChOU0ludGVnZXIpdGFnCit7CisgICAgcmV0dXJuIFdLSW5zcGVjdG9yVmlld1RhZzsK
K30KKworLSAoaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+KWluc3BlY3RvcldLV2Vi
Vmlld0RlbGVnYXRlCit7CisgICAgcmV0dXJuIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZS5n
ZXRBdXRvcmVsZWFzZWQoKTsKK30KKworLSAodm9pZClzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZTooaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAg
X2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKElCQWN0aW9u
KXJlbG9hZDooaWQpc2VuZGVyCit7CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdh
dGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOnNlbGZdOworfQorCistIChJQkFjdGlvbilyZWxv
YWRGcm9tT3JpZ2luOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdE
ZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRGcm9tT3JpZ2luOnNlbGZdOworfQorCist
ICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdworeworICAg
IFtzdXBlciB2aWV3V2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOworICAgIFtzZWxmLmluc3Bl
Y3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlldzpzZWxmIHdpbGxNb3ZlVG9X
aW5kb3c6bmV3V2luZG93XTsKK30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Cit7Cisg
ICAgW3N1cGVyIHZpZXdEaWRNb3ZlVG9XaW5kb3ddOworICAgIFtzZWxmLmluc3BlY3RvcldLV2Vi
Vmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzpzZWxmXTsKK30K
KworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYmU3MjhkNDM1YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlN
YWMubW0KQEAgLTAsMCArMSw4MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykK
KworI2ltcG9ydCAiV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgiCisjaW1wb3J0ICJXS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAi
V0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIK
KyNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0ICJfV0tJbnNwZWN0b3JJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLSW5zcGVjdG9yV2luZG93
LmgiCisjaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KKyNp
bXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4K
KyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciB3
aW5kb3dTdHlsZU1hc2sgPSBOU1dpbmRvd1N0eWxlTWFza1RpdGxlZCB8IE5TV2luZG93U3R5bGVN
YXNrQ2xvc2FibGUgfCBOU1dpbmRvd1N0eWxlTWFza01pbmlhdHVyaXphYmxlIHwgTlNXaW5kb3dT
dHlsZU1hc2tSZXNpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFza0Z1bGxTaXplQ29udGVudFZpZXc7
CisKKy8vIFRoZSB0aW1lIHdlIGtlZXAgb3VyIFdlYlZpZXcgYWxpdmUgYmVmb3JlIGNsb3Npbmcg
aXQgYW5kIGl0cyBwcm9jZXNzLgorLy8gUmV1c2luZyB0aGUgV2ViVmlldyBpbXByb3ZlcyBzdGFy
dCB1cCB0aW1lIGZvciBwZW9wbGUgdGhhdCBqdW1wIGluIGFuZCBvdXQgb2YgdGhlIEluc3BlY3Rv
ci4KK3N0YXRpYyBjb25zdCBTZWNvbmRzIHdlYlZpZXdDbG9zZVRpbWVvdXQgeyAxX21pbiB9Owor
CitzdGF0aWMgdm9pZCoga1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQgPSAma1dp
bmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQ7CisKK0BpbnRlcmZhY2UgV0tXZWJJbnNw
ZWN0b3JQcm94eU9iakNBZGFwdGVyICgpIDxOU1dpbmRvd0RlbGVnYXRlLCBXS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyRGVsZWdhdGU+CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3Bl
Y3RvclByb3h5OihXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsKKy0g
KHZvaWQpaW52YWxpZGF0ZTsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tXZWJJbnNwZWN0
b3JQcm94eU9iakNBZGFwdGVyIHsKKyAgICBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KiBfaW5z
cGVjdG9yUHJveHk7Cit9CisKKy0gKFdLSW5zcGVjdG9yUmVmKWluc3BlY3RvclJlZgoreworICAg
IHJldHVybiB0b0FQSShfaW5zcGVjdG9yUHJveHkpOworfQorCistIChfV0tJbnNwZWN0b3IgKilp
bnNwZWN0b3IKK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gd3Jh
cHBlcigqX2luc3BlY3RvclByb3h5KTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eSopaW5zcGVjdG9yUHJveHkKK3sKKyAgICBBU1NFUlRfQVJHKGluc3BlY3RvclByb3h5LCBpbnNw
ZWN0b3JQcm94eSk7CisKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIC8vIFVucmV0YWluZWQgdG8gYXZvaWQgYSByZWZlcmVuY2UgY3lj
bGUuCisgICAgX2luc3BlY3RvclByb3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClpbnZhbGlkYXRlCit7CisgICAgX2luc3BlY3RvclByb3h5ID0g
bnVsbHB0cjsKK30KKworLSAoTlNSZWN0KXdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgd2lsbFBv
c2l0aW9uU2hlZXQ6KE5TV2luZG93ICopc2hlZXQgdXNpbmdSZWN0OihOU1JlY3QpcmVjdAorewor
ICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIF9p
bnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQcm94eS0+c2hl
ZXRSZWN0KCkud2lkdGgoKSwgMCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0gKHZvaWQpd2lu
ZG93RGlkTW92ZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2lu
c3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hh
bmdlKCk7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkUmVzaXplOihOU05vdGlmaWNhdGlvbiAqKW5v
dGlmaWNhdGlvbgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0
b3JQcm94eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dXaWxs
Q2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0
b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZSgpOworfQorCistICh2b2lk
KXdpbmRvd0RpZEVudGVyRnVsbFNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
K3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPndp
bmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVs
bFNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3Bl
Y3RvclByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRD
aGFuZ2UoKTsKK30KKworLSAodm9pZClpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgLy8gUmVzaXppbmcgdGhlIHZpZXdzIHdo
aWxlIGluc2lkZSB0aGlzIG5vdGlmaWNhdGlvbiBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyB3aGVu
IGVudGVyaW5nCisgICAgLy8gb3IgZXhpdGluZyBmdWxsIHNjcmVlbi4gVG8gYXZvaWQgdGhhdCB3
ZSBuZWVkIHRvIHBlcmZvcm0gdGhlIHdvcmsgYWZ0ZXIgYSBkZWxheS4gV2Ugb25seQorICAgIC8v
IGRlcGVuZCBvbiB0aGlzIGZvciBlbmZvcmNpbmcgdGhlIGhlaWdodCBjb25zdHJhaW50cywgc28g
YSBzbWFsbCBkZWxheSBpc24ndCB0ZXJyaWJsZS4gTW9zdAorICAgIC8vIG9mIHRoZSB0aW1lIHRo
ZSB2aWV3cyB3aWxsIGFscmVhZHkgaGF2ZSB0aGUgY29ycmVjdCBmcmFtZXMgYmVjYXVzZSBvZiBh
dXRvcmVzaXppbmcgbWFza3MuCisKKyAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05P
VywgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9pbnNwZWN0b3JQ
cm94eSkKKyAgICAgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlk
Q2hhbmdlKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDoo
TlNTdHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25h
cnk8TlNLZXlWYWx1ZUNoYW5nZUtleSwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250
ZXh0Cit7CisgICAgaWYgKGNvbnRleHQgIT0ga1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNv
bnRleHQpIHsKKyAgICAgICAgW3N1cGVyIG9ic2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBv
Zk9iamVjdDpvYmplY3QgY2hhbmdlOmNoYW5nZSBjb250ZXh0OmNvbnRleHRdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IG9iamVjdDsKKyAgICBBU1NF
UlQoW3dpbmRvdyBpc0tpbmRPZkNsYXNzOltOU1dpbmRvdyBjbGFzc11dKTsKKyAgICBpZiAod2lu
ZG93LmluTGl2ZVJlc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hfYWZ0ZXIo
RElTUEFUQ0hfVElNRV9OT1csIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAg
IGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3Bl
Y3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOworICAgIH0pOworfQorCisvLyBNQVJLOiBXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGUgbWV0aG9kcworCistICh2b2lkKWluc3BlY3RvclZp
ZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
KilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisg
ICAgICAgIF9pbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCistIChCT09MKWlu
c3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiBfaW5z
cGVjdG9yUHJveHkgPyBfaW5zcGVjdG9yUHJveHktPmlzVW5kZXJUZXN0KCkgOiBmYWxzZTsKK30K
KworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93
ICopbmV3V2luZG93Cit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3Bl
Y3RvclByb3h5LT5hdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KGluc3BlY3RvclZpZXdDb250
cm9sbGVyLndlYlZpZXcud2luZG93KTsKK30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJv
bGxlckRpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3Rv
clZpZXdDb250cm9sbGVyCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2lu
c3BlY3RvclByb3h5LT5hdHRhY2htZW50RGlkTW92ZVRvV2luZG93KGluc3BlY3RvclZpZXdDb250
cm9sbGVyLndlYlZpZXcud2luZG93KTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRh
Y2htZW50Vmlld0RpZENoYW5nZShOU1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3VmlldykKK3sK
KyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
Om1fb2JqQ0FkYXB0ZXIuZ2V0KCkgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlv
biBvYmplY3Q6b2xkVmlld107CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSBhZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rvcihp
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90
aWZpY2F0aW9uIG9iamVjdDpuZXdWaWV3XTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAg
ICAgIGF0dGFjaChtX2F0dGFjaG1lbnRTaWRlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YXR0YWNobWVudFdpbGxNb3ZlRnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KQorewor
ICAgIGlmIChtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QpIHsKKyAgICAgICAgbV9pc09i
c2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0ID0gZmFsc2U7CisgICAgICAgIFtvbGRXaW5kb3cgcmVt
b3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExheW91
dFJlY3QiIGNvbnRleHQ6a1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHRdOworICAg
IH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudERpZE1vdmVUb1dpbmRv
dyhOU1dpbmRvdyAqbmV3V2luZG93KQoreworICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgISFuZXdX
aW5kb3cpIHsKKyAgICAgICAgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0ID0gdHJ1ZTsK
KyAgICAgICAgW25ld1dpbmRvdyBhZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktl
eVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgb3B0aW9uczowIGNvbnRleHQ6a1dpbmRvd0NvbnRl
bnRMYXlvdXRPYnNlcnZlckNvbnRleHRdOworICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRD
aGFuZ2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3Bl
Y3RvcldpbmRvd1RpdGxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQor
ICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBsZXZlbCA9IGluc3BlY3Rpb25MZXZlbCgp
OworICAgIGlmIChsZXZlbCA+IDEpIHsKKyAgICAgICAgTlNTdHJpbmcgKmRlYnVnVGl0bGUgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIFsl
ZF0g4oCUICVAIiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIHdoZW4gaW5zcGVjdGluZyBX
ZWIgSW5zcGVjdG9yIiksIGxldmVsLCAoTlNTdHJpbmcgKiltX3VybFN0cmluZ107CisgICAgICAg
IFttX2luc3BlY3RvcldpbmRvdyBzZXRUaXRsZTpkZWJ1Z1RpdGxlXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBOU1N0cmluZyAqdGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJf
VUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0
aXRsZSIpLCAoTlNTdHJpbmcgKiltX3VybFN0cmluZ107CisgICAgICAgIFttX2luc3BlY3Rvcldp
bmRvdyBzZXRUaXRsZTp0aXRsZV07CisgICAgfQorfQorCitSZXRhaW5QdHI8TlNXaW5kb3c+IFdl
Ykluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dG
cmFtZSwgSW5zcGVjdGlvblRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKK3sKKyAgICBOU1JlY3Qgd2lu
ZG93RnJhbWUgPSAhTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSA/IHNhdmVkV2luZG93
RnJhbWUgOiBOU01ha2VSZWN0KDAsIDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRv
d0hlaWdodCk7CisgICAgYXV0byB3aW5kb3cgPSBhZG9wdE5TKFtbX1dLSW5zcGVjdG9yV2luZG93
IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OndpbmRvd0ZyYW1lIHN0eWxlTWFzazp3aW5kb3dT
dHlsZU1hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7CisgICAg
W3dpbmRvdyBzZXRNaW5TaXplOk5TTWFrZVNpemUobWluaW11bVdpbmRvd1dpZHRoLCBtaW5pbXVt
V2luZG93SGVpZ2h0KV07CisgICAgW3dpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwor
ICAgIFt3aW5kb3cgc2V0Q29sbGVjdGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhh
dmlvcl0gfCBOU1dpbmRvd0NvbGxlY3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5QcmltYXJ5KV07CisK
KyAgICBib29sIGZvclJlbW90ZVRhcmdldCA9IHRhcmdldFR5cGUgPT0gSW5zcGVjdGlvblRhcmdl
dFR5cGU6OlJlbW90ZTsKKyAgICBbd2luZG93IHNldEZvclJlbW90ZVRhcmdldDpmb3JSZW1vdGVU
YXJnZXRdOworCisgICAgQ0dGbG9hdCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUgPSAoW3dp
bmRvdyBzY3JlZW5dLmZyYW1lLnNpemUud2lkdGggLyAyKSAtIDQ7CisgICAgQ0dGbG9hdCBtaW5p
bXVtRnVsbFNjcmVlbldpZHRoID0gc3RkOjptYXg8Q0dGbG9hdD4oNjM2LCBhcHByb3hpbWF0ZWx5
SGFsZlNjcmVlblNpemUpOworICAgIFt3aW5kb3cgc2V0TWluRnVsbFNjcmVlbkNvbnRlbnRTaXpl
Ok5TTWFrZVNpemUobWluaW11bUZ1bGxTY3JlZW5XaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCld
OworICAgIFt3aW5kb3cgc2V0Q29sbGVjdGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25C
ZWhhdmlvcl0gfCBOU1dpbmRvd0NvbGxlY3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5BbGxvd3NUaWxp
bmcpXTsKKworICAgIFt3aW5kb3cgc2V0VGl0bGViYXJBcHBlYXJzVHJhbnNwYXJlbnQ6WUVTXTsK
KworICAgIC8vIENlbnRlciB0aGUgd2luZG93IGlmIHRoZSBzYXZlZCBmcmFtZSB3YXMgZW1wdHku
CisgICAgaWYgKE5TSXNFbXB0eVJlY3Qoc2F2ZWRXaW5kb3dGcmFtZSkpCisgICAgICAgIFt3aW5k
b3cgY2VudGVyXTsKKworICAgIHJldHVybiB3aW5kb3c7Cit9CisKK1dlYlBhZ2VQcm94eSogV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NF
UlQoaW5zcGVjdGVkUGFnZSgpKTsKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yUGFnZSk7CisKKyAg
ICBtX2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBpZiAo
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgeworICAgICAgICBBU1NFUlQobV9vYmpDQWRhcHRl
cik7CisgICAgICAgIHJldHVybiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+
X3BhZ2UuZ2V0KCk7CisgICAgfQorCisgICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1dl
Ykluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxsb2NdIGluaXRXaXRoV2ViSW5zcGVjdG9yUHJv
eHk6dGhpc10pOworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+
aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNl
bGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRD
aGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Omluc3BlY3RlZFZpZXddOworCisgICAgbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIGFs
bG9jXSBpbml0V2l0aEluc3BlY3RlZFBhZ2U6aW5zcGVjdGVkUGFnZSgpXSk7CisgICAgW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQo
KV07CisKKyAgICBXZWJQYWdlUHJveHkgKmluc3BlY3RvclBhZ2UgPSBbbV9pbnNwZWN0b3JWaWV3
Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UuZ2V0KCk7CisgICAgQVNTRVJUKGluc3BlY3RvclBh
Z2UpOworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQoreworICAgIEFTU0VSVCghbV9p
bnNwZWN0b3JXaW5kb3cpOworCisgICAgTlNTdHJpbmcgKnNhdmVkV2luZG93RnJhbWVTdHJpbmcg
PSBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuaW5zcGVjdG9yV2lu
ZG93RnJhbWUoKTsKKyAgICBOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSA9IE5TUmVjdEZyb21TdHJp
bmcoc2F2ZWRXaW5kb3dGcmFtZVN0cmluZyk7CisKKyAgICBtX2luc3BlY3RvcldpbmRvdyA9IFdl
Ykluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhzYXZlZFdpbmRvd0ZyYW1lLCBJ
bnNwZWN0aW9uVGFyZ2V0VHlwZTo6TG9jYWwpOworICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRE
ZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKKworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9y
VmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworICAgIE5TVmlldyAq
Y29udGVudFZpZXcgPSBbbV9pbnNwZWN0b3JXaW5kb3cgY29udGVudFZpZXddOworICAgIGluc3Bl
Y3RvclZpZXcuZnJhbWUgPSBbY29udGVudFZpZXcgYm91bmRzXTsKKyAgICBbY29udGVudFZpZXcg
YWRkU3VidmlldzppbnNwZWN0b3JWaWV3XTsKKworICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1Rp
dGxlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlKCkK
K3sKKyAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpOworCisg
ICAgaWYgKG1faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgbV9pbnNwZWN0
b3JWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAobV9vYmpDQWRhcHRlcikg
eworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9i
c2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgICAgIFttX29iakNBZGFwdGVyIGlu
dmFsaWRhdGVdOworICAgICAgICBtX29iakNBZGFwdGVyID0gbmlsOworICAgIH0KK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmly
ZWQoKQoreworICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmICht
X2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdh
dGU6bmlsXTsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNsb3NlXTsKKyAgICAgICAgbV9p
bnNwZWN0b3JXaW5kb3cgPSBuaWw7CisgICAgfQorCisgICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJ
bmFjdGl2aXR5VGltZXIuc3RhcnRPbmVTaG90KHdlYlZpZXdDbG9zZVRpbWVvdXQpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAg
IG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAgIGNsb3Nl
RnJvbnRlbmRQYWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52
YWxpZGF0ZSgpCit7CisgICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3Rv
cCgpOworCisgICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1IaWRlKCkKK3sKKyAgICBpZiAobV9pc0F0dGFjaGVkKSB7CisgICAgICAg
IHBsYXRmb3JtRGV0YWNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9p
bnNwZWN0b3JXaW5kb3cpIHsKKyAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRl
Om5pbF07CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAgICAgIG1faW5z
cGVjdG9yV2luZG93ID0gbmlsOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1SZXNldFN0YXRlKCkKK3sKKyAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgp
LnByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIC8vIElmIHRo
ZSBXZWIgSW5zcGVjdG9yIGlzIG5vIGxvbmdlciBpbiB0aGUgc2FtZSB3aW5kb3cgYXMgdGhlIGlu
c3BlY3RlZCB2aWV3LAorICAgIC8vIHRoZW4gd2UgbmVlZCB0byByZW9wZW4gdGhlIEluc3BlY3Rv
ciB0byBnZXQgaXQgYXR0YWNoZWQgdG8gdGhlIHJpZ2h0IHdpbmRvdy4KKyAgICAvLyBUaGlzIGNh
biBoYXBwZW4gd2hlbiBkcmFnZ2luZyB0YWJzIHRvIGFub3RoZXIgd2luZG93IGluIFNhZmFyaS4K
KyAgICBpZiAobV9pc0F0dGFjaGVkICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZp
ZXddLndpbmRvdyAhPSBpbnNwZWN0ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkpIHsKKyAgICAg
ICAgb3BlbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUUgPHJkYXI6
Ly9wcm9ibGVtLzEwOTM3Njg4PjogdGhpcyB3aWxsIG5vdCBicmluZyBhIGJhY2tncm91bmQgdGFi
IGluIFNhZmFyaSB0byB0aGUgZnJvbnQsIG9ubHkgaXRzIHdpbmRvdy4KKyAgICBbW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5p
bF07CisgICAgW1ttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtl
Rmlyc3RSZXNwb25kZXI6W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld11dOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKQoreworICAgIFtpbnNwZWN0ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkgbWFrZUtleUFu
ZE9yZGVyRnJvbnQ6bmlsXTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
c0Zyb250KCkKK3sKKyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlz
IHdpbGwgbm90IHJldHVybiBmYWxzZSBmb3IgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmksIG9u
bHkgYSBiYWNrZ3JvdW5kIHdpbmRvdy4KKyAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93LmlzTWFpbldpbmRvdzsKK30KKwor
Ym9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNz
Q2FuQXR0YWNoKQoreworICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2Uo
KS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICBpZiAoW1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgdmlld0lzSW5zcGVjdG9yV2ViVmlldzppbnNwZWN0ZWRWaWV3XSkKKyAgICAgICAg
cmV0dXJuIHdlYlByb2Nlc3NDYW5BdHRhY2g7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWlu
aW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwOworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVt
QXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmlt
dW1BdHRhY2hlZFdpZHRoID0gNTAwOworCisgICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9
IGluc3BlY3RlZFZpZXcuZnJhbWU7CisKKyAgICBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQg
PSBOU0hlaWdodChpbnNwZWN0ZWRWaWV3RnJhbWUpICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0
aW87CisgICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRI
ZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJh
bWUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJp
bGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCit7CisgICAgLy8gRG8gbm90aGluZy4KK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIG1fdXJsU3RyaW5nID0gdXJsU3RyaW5nOworCisg
ICAgdXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCit7CisgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsK
KworICAgIFJldGFpblB0cjxTRkNlcnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBh
ZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0ZVBhbmVsIGFsbG9jXSBpbml0XSk7CisKKyAgICBOU1dpbmRv
dyAqd2luZG93OworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgd2luZG93ID0g
bV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7CisgICAgZWxzZQorICAgICAgICB3aW5kb3cgPSBbW21f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10gd2luZG93XTsKKworICAgIGlmICghd2lu
ZG93KQorICAgICAgICB3aW5kb3cgPSBbTlNBcHAga2V5V2luZG93XTsKKworI2lmIEhBVkUoU0VD
X1RSVVNUX1NFUklBTElaQVRJT04pCisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZv
cldpbmRvdzp3aW5kb3cgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250
ZXh0SW5mbzpudWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNob3dHcm91cDpZ
RVNdOworI2Vsc2UKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Ondp
bmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51
bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRl
Q2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBtdXN0IGJlIGNh
bGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRo
ZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZvcmVoYW5kLgorICAgIFNGQ2VydGlm
aWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0
ZVZpZXddOworICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107CisgICAg
W2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5PXTsKKyAgICBbY2VydGlmaWNhdGVW
aWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRh
aWxzRGlzY2xvc2VkOllFU107Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIEFTU0VSVCgh
c3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgTlNVUkwgKnBsYXRmb3JtVVJMID0g
bV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKKyAgICBp
ZiAoIXBsYXRmb3JtVVJMKSB7CisgICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhT
dHJpbmc6c3VnZ2VzdGVkVVJMXTsKKyAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5l
dyBmaWxlbmFtZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCisgICAgICAgIGZvcmNlU2F2
ZURpYWxvZyA9IHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7Cisg
ICAgaWYgKCFwbGF0Zm9ybVVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTmVjZXNzYXJ5
IGZvciB0aGUgYmxvY2sgYmVsb3cuCisgICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdn
ZXN0ZWRVUkw7CisgICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVudDsKKworICAgIGF1dG8g
c2F2ZVRvVVJMID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7CisgICAgICAgIEFTU0VSVChhY3R1YWxV
UkwpOworCisgICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVS
TENvcHksIGFjdHVhbFVSTCk7CisKKyAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7CisgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShj
b250ZW50Q29weSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRv
cHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQu
c2l6ZSgpXSk7CisgICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwg
YXRvbWljYWxseTpZRVNdOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFtjb250ZW50Q29w
eSB3cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZyBlcnJvcjpOVUxMXTsKKworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFi
c29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIH07CisK
KyAgICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgeworICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1V
UkwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNTYXZlUGFuZWwgKnBhbmVsID0g
W05TU2F2ZVBhbmVsIHNhdmVQYW5lbF07CisgICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUg
PSBwbGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVudDsKKworICAgIC8vIElmIHdlIGhhdmUgYSBm
aWxlIFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCisgICAg
Ly8gY2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0
aGUgc3lzdGVtJ3MKKyAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJl
Y3RvcnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgorICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVV
UkwpCisgICAgICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0
aW5nTGFzdFBhdGhDb21wb25lbnRdOworCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4o
TlNJbnRlZ2VyIHJlc3VsdCkgeworICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25z
ZUNhbmNlbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBO
U01vZGFsUmVzcG9uc2VPSyk7CisgICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOworICAgIH07
CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cgPyBtX2luc3BlY3Rv
cldpbmRvdy5nZXQoKSA6IFtOU0FwcCBrZXlXaW5kb3ddOworICAgIGlmICh3aW5kb3cpCisgICAg
ICAgIFtwYW5lbCBiZWdpblNoZWV0TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5k
bGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFtwYW5lbCBydW5Nb2RhbF0pOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50KQoreworICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAg
UmV0YWluUHRyPE5TVVJMPiBhY3R1YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdl
dChzdWdnZXN0ZWRVUkwpOworICAgIC8vIERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhh
cyBhbHJlYWR5IGNvbmZpcm1lZCB0aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4KKyAgICBpZiAoIWFj
dHVhbFVSTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBb
TlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVy
cm9yOk5VTExdOworICAgIFtoYW5kbGUgc2Vla1RvRW5kT2ZGaWxlXTsKKyAgICBbaGFuZGxlIHdy
aXRlRGF0YTpbY29udGVudCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11d
OworICAgIFtoYW5kbGUgY2xvc2VGaWxlXTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2Vz
cygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBh
YnNvbHV0ZVN0cmluZ10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93RnJhbWVEaWRDaGFuZ2UoKQoreworICAgIEFTU0VS
VCghbV9pc0F0dGFjaGVkKTsKKyAgICBBU1NFUlQobV9pc1Zpc2libGUpOworICAgIEFTU0VSVCht
X2luc3BlY3RvcldpbmRvdyk7CisKKyAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJs
ZSB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU3RyaW5n
ICpmcmFtZVN0cmluZyA9IE5TU3RyaW5nRnJvbVJlY3QoW21faW5zcGVjdG9yV2luZG93IGZyYW1l
XSk7CisgICAgaW5zcGVjdGVkUGFnZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNldElu
c3BlY3RvcldpbmRvd0ZyYW1lKGZyYW1lU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0
YWNoZWQpOworICAgIEFTU0VSVChtX2lzVmlzaWJsZSk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9y
V2luZG93KTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2lu
c3BlY3RvcldpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOyAgICAKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgY3Vy
cmVudERpbWVuc2lvbikKK3sKKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkgeworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXR0
YWNoIGF2YWlsYWJpbGl0eSBjaGFuZ2VkLiBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBpbiBjYXNl
CisgICAgICAgIC8vIHRoZSBhdHRhY2htZW50IHZpZXcgaXMgbm90IHRoZSBXS1ZpZXcuCisgICAg
ICAgIGF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNo
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaW5zcGVjdGVkUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0
ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNw
ZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisKKyAgICBO
U1JlY3QgaW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKKyAgICBOU1Jl
Y3Qgb2xkSW5zcGVjdG9yVmlld0ZyYW1lID0gaW5zcGVjdG9yVmlldy5mcmFtZTsKKyAgICBOU1Jl
Y3QgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNaZXJvUmVjdDsKKyAgICBOU1JlY3QgcGFyZW50
Qm91bmRzID0gaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcuYm91bmRzOworICAgIENHRmxvYXQgaW5z
cGVjdGVkVmlld1RvcCA9IE5TTWF4WShpbnNwZWN0ZWRWaWV3RnJhbWUpOworCisgICAgc3dpdGNo
IChtX2F0dGFjaG1lbnRTaWRlKSB7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7
CisgICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1cnJlbnREaW1l
bnNpb24gPSBOU0hlaWdodChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOworCisgICAgICAgIENHRmxv
YXQgcGFyZW50SGVpZ2h0ID0gTlNIZWlnaHQocGFyZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9h
dCBpbnNwZWN0b3JIZWlnaHQgPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJh
aW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGN1cnJlbnREaW1lbnNpb24sIHBhcmVudEhlaWdodCk7
CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVk
IHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4KKyAgICAgICAgaW5zcGVjdGVk
Vmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCBpbnNwZWN0b3JIZWlnaHQsIE5TV2lkdGgocGFyZW50
Qm91bmRzKSwgaW5zcGVjdGVkVmlld1RvcCAtIGluc3BlY3RvckhlaWdodCk7CisgICAgICAgIG5l
d0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRW
aWV3RnJhbWUpLCBpbnNwZWN0b3JIZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDogeworICAgICAgICBpZiAoIWN1cnJlbnREaW1l
bnNpb24pCisgICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0
b3JWaWV3RnJhbWUpOworCisgICAgICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBh
cmVudEJvdW5kcyk7CisgICAgICAgIENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVu
dERpbWVuc2lvbiwgcGFyZW50V2lkdGgpOworCisgICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3Ag
cG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxs
IHdvcmsuIEJ1dCBkb24ndCB1c2UgdGhhdAorICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRo
ZSBpbnNwZWN0b3IgdmlldyBzaW5jZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBh
cyB0aGUgaW5zcGVjdGVkIHZpZXcuCisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFr
ZVJlY3QoMCwgMCwgcGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1Rv
cCk7CisgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QocGFyZW50V2lk
dGggLSBpbnNwZWN0b3JXaWR0aCwgMCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJv
dW5kcykpOworCisgICAgICAgIGlmIChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVj
dG9yVmlldy53aW5kb3cpIHsKKyAgICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9
IFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29u
dGVudExheW91dFJlY3QgZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgICAgIG5ld0luc3BlY3RvclZp
ZXdGcmFtZSA9IE5TSW50ZXJzZWN0aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRl
bnRMYXlvdXRSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpMZWZ0OiB7CisgICAgICAgIGlmICghY3VycmVudERpbWVuc2lv
bikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZp
ZXdGcmFtZSk7CisKKyAgICAgICAgQ0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50
Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGlt
ZW5zaW9uLCBwYXJlbnRXaWR0aCk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3Np
dGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29y
ay4gQnV0IGRvbid0IHVzZSB0aGF0CisgICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGlu
c3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRo
ZSBpbnNwZWN0ZWQgdmlldy4KKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVj
dChpbnNwZWN0b3JXaWR0aCwgMCwgcGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVj
dGVkVmlld1RvcCk7CisgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3Qo
MCwgMCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOworCisgICAgICAg
IGlmIChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsK
KyAgICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1
cGVydmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJv
bVZpZXc6bmlsXTsKKyAgICAgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJz
ZWN0aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgaWYgKE5TRXF1YWxS
ZWN0cyhvbGRJbnNwZWN0b3JWaWV3RnJhbWUsIG5ld0luc3BlY3RvclZpZXdGcmFtZSkgJiYgTlNF
cXVhbFJlY3RzKFtpbnNwZWN0ZWRWaWV3IGZyYW1lXSwgaW5zcGVjdGVkVmlld0ZyYW1lKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyB0byBtYWtlIHN1
cmUgdGhlIGxheWVycyBmb3IgYm90aCB2aWV3cyByZXNpemUgaW4gc3luYy4KKyAgICBbaW5zcGVj
dG9yVmlldy53aW5kb3cgZGlzYWJsZVNjcmVlblVwZGF0ZXNVbnRpbEZsdXNoXTsKKworICAgIFtp
bnNwZWN0b3JWaWV3IHNldEZyYW1lOm5ld0luc3BlY3RvclZpZXdGcmFtZV07CisgICAgW2luc3Bl
Y3RlZFZpZXcgc2V0RnJhbWU6aW5zcGVjdGVkVmlld0ZyYW1lXTsKK30KKwordW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICBO
U1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1l
bnRWaWV3KCk7CisgICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcg
ZnJhbWVdOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1Jl
Y3Quc2l6ZS5oZWlnaHQpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0g
aW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIE5TUmVjdCBp
bnNwZWN0ZWRWaWV3UmVjdCA9IFtpbnNwZWN0ZWRWaWV3IGZyYW1lXTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluc3BlY3RlZFZpZXdSZWN0LnNpemUud2lkdGgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgTlNWaWV3ICpp
bnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50Vmlldygp
OworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9s
bGVyIHdlYlZpZXddOworCisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFtt
X2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JX
aW5kb3cgY2xvc2VdOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9CisK
KyAgICBbaW5zcGVjdG9yVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIENHRmxvYXQg
Y3VycmVudERpbWVuc2lvbjsKKyAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBj
YXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1
dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3TWF4WU1hcmdpbl07Cisg
ICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dGFjaG1l
bnRTaWRlOjpSaWdodDoKKyAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWluWE1hcmdpbl07CisgICAgICAgIGN1cnJl
bnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hl
ZFdpZHRoKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6
CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0
U2l6YWJsZSB8IE5TVmlld01heFhNYXJnaW5dOworICAgICAgICBjdXJyZW50RGltZW5zaW9uID0g
aW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoY3Vy
cmVudERpbWVuc2lvbik7CisKKyAgICBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgYWRkU3Vidmll
dzppbnNwZWN0b3JWaWV3IHBvc2l0aW9uZWQ6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOmluc3Bl
Y3RlZFZpZXddOworICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6
aW5zcGVjdG9yVmlld107Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0
YWNoKCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmlu
c3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0g
W21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisKKyAgICBbaW5zcGVjdG9yVmll
dyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNp
emluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07CisKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzaXplIHRoZSBpbnNwZWN0ZWQgdmlldydzIGZyYW1lIGFm
dGVyIGRldGFjaGluZyBzbyB0aGF0IGl0IHRha2VzIHVwIHRoZSBzcGFjZSB0aGF0IHRoZQorICAg
IC8vIGF0dGFjaGVkIGluc3BlY3RvciB1c2VkIHRvLiBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9u
IG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgor
CisgICAgaW5zcGVjdGVkVmlldy5mcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNw
ZWN0ZWRWaWV3LnN1cGVydmlldy5ib3VuZHMpLCBOU01heFkoaW5zcGVjdGVkVmlldy5mcmFtZSkp
OworCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdlIGFyZSBub3QgdmlzaWJsZS4gVGhpcyBtZWFu
cyB0aGUgaW5zcGVjdG9yIHdhcyBjbG9zZWQgd2hpbGUgYXR0YWNoZWQKKyAgICAvLyBhbmQgd2Ug
c2hvdWxkIG5vdCBjcmVhdGUgYW5kIHNob3cgdGhlIGluc3BlY3RvciB3aW5kb3cuCisgICAgaWYg
KCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgb3BlbigpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIGhlaWdodCkKK3sKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKGhlaWdodCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKK3sKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKQoreworICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVy
IHdlYlZpZXddLT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9
IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JV
SSJdOworICAgIGlmICghYnVuZGxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBO
U1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAiTWFpbiIgb2ZUeXBlOkAi
aHRtbCJdOworICAgIEFTU0VSVChwYXRoICYmIHBhdGgubGVuZ3RoKTsKKyAgICBpZiAoIXBhdGgp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICBOU0J1bmRs
ZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
Ykluc3BlY3RvclVJIl07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIC8vIFdlIG1pZ2h0IG5vdCBoYXZlIGEgVGVzdC5odG1sIGluIFByb2R1Y3Rpb24g
YnVpbGRzLgorICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJU
ZXN0IiBvZlR5cGU6QCJodG1sIl07CisgICAgaWYgKCFwYXRoKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0
b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JCYXNlVVJMKCkKK3sKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1
bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAgaWYg
KCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5nICpwYXRo
ID0gYnVuZGxlLnJlc291cmNlUGF0aDsKKyAgICBBU1NFUlQocGF0aCAmJiBwYXRoLmxlbmd0aCk7
CisKKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5OllF
U10uYWJzb2x1dGVTdHJpbmc7Cit9CisKK3N0YXRpYyBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNp
b25QbGlzdCgpCit7CisgICAgTlNTdHJpbmcgKnN5c3RlbUxpYnJhcnlQYXRoID0gW05TU2VhcmNo
UGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1E
b21haW5NYXNrLCBZRVMpIG9iamVjdEF0SW5kZXg6MF07CisgICAgTlNTdHJpbmcgKnN5c3RlbVZl
cnNpb25QbGlzdFBhdGggPSBbc3lzdGVtTGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QiXTsKKyAgICBOU0Rp
Y3Rpb25hcnkgKnN5c3RlbVZlcnNpb25JbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aENvbnRlbnRzT2ZGaWxlOnN5c3RlbVZlcnNpb25QbGlzdFBhdGhdOworICAgIHJldHVybiBzeXN0
ZW1WZXJzaW9uSW5mbzsKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5
OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICBOU0RpY3Rpb25hcnkgKnBsaXN0ID0g
c3lzdGVtVmVyc2lvblBsaXN0KCk7CisKKyAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgcmVzdWx0Owor
ICAgIHJlc3VsdC5kZWJ1Z2dhYmxlVHlwZSA9IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6Oldl
YlBhZ2U7CisgICAgcmVzdWx0LnRhcmdldFBsYXRmb3JtTmFtZSA9ICJtYWNPUyJfczsKKyAgICBy
ZXN1bHQudGFyZ2V0QnVpbGRWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0QnVpbGRWZXJzaW9uIl07
CisgICAgcmVzdWx0LnRhcmdldFByb2R1Y3RWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0VXNlclZp
c2libGVWZXJzaW9uIl07CisgICAgcmVzdWx0LnRhcmdldElzU2ltdWxhdG9yID0gZmFsc2U7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmJlZTVjZGZmMzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90
ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgor
CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJBUElEZWJ1Z2dhYmxl
SW5mby5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGlj
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRCgpOworcHVibGljOgorICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3Rv
ckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJn
ZXRJRCB0YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkK
KyAgICAgICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKKyAg
ICAgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCisgICAgICAgICwgbV9j
b25uZWN0aW9uSUQoY29ubmVjdGlvbklEKQorICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQp
CisgICAgICAgICwgbV9kZWJ1Z2dhYmxlVHlwZShkZWJ1Z2dhYmxlVHlwZSkKKyAgICB7CisgICAg
ICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKKyAgICB9CisKKyAgICB+UmVtb3RlSW5zcGVj
dG9yUHJveHkoKQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KG51bGxwdHIpOwor
ICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkKCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0
aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQu
CisgICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1Z2dhYmxlSW5mbyA9IEFQSTo6
RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpOworICAg
ICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUobV9kZWJ1Z2dhYmxlVHlwZSk7
CisgICAgICAgIG1fcHJveHktPmxvYWQoV1RGTW92ZShkZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVj
dG9yQ2xpZW50LmJhY2tlbmRDb21tYW5kc1VSTCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNob3co
KQorICAgIHsKKyAgICAgICAgbV9wcm94eS0+c2hvdygpOworICAgIH0KKworICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICB7CisgICAgICAg
IG1fcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKKyAgICB9CisKKyAgICB2
b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1f
Y29ubmVjdGlvbklELCBtX3RhcmdldElELCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICB2b2lkIGNs
b3NlRnJvbUZyb250ZW5kKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xp
ZW50LmNsb3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElEKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3Byb3h5Owor
ICAgIFJlbW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgQ29ubmVj
dGlvbklEIG1fY29ubmVjdGlvbklEOworICAgIFRhcmdldElEIG1fdGFyZ2V0SUQ7CisgICAgSW5z
cGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBtX2RlYnVnZ2FibGVUeXBlOworfTsKKworUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoVVJMIHVybCwgUmVtb3RlSW5zcGVj
dG9yT2JzZXJ2ZXImIG9ic2VydmVyKQorICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKK3sKKyAg
ICBpZiAoIXVybC5ob3N0KCkgfHwgIXVybC5wb3J0KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJ
bnZhbGlkIGluc3BlY3RvciB1cmw6ICVzIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0SW5l
dCh1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5wb3J0KCkudmFsdWUoKSk7CisgICAgaWYg
KCFtX2Nvbm5lY3Rpb25JRCkgeworICAgICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBjbGllbnQg
Y291bGQgbm90IGNvbm5lY3QgdG8gJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCk7
Cit9CisKK1JlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCit7
Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQo
Y29uc3QgU3RyaW5nJiBldmVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVChtX2Nvbm5lY3Rpb25JRC5oYXNWYWx1ZSgpKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBl
dmVudC51dGY4KCk7CisgICAgc2VuZChtX2Nvbm5lY3Rpb25JRC52YWx1ZSgpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRhdGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkp
OworfQorCitIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlzcGF0Y2hN
YXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhh
bmRsZXI+PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4oeworICAg
ICAgICB7ICJCYWNrZW5kQ29tbWFuZHMiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVt
b3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpIH0sCisgICAgICAgIHsgIlNl
dFRhcmdldExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZXRUYXJnZXRMaXN0KSB9LAorICAgICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRl
bmQiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQpIH0sCisgICAgfSk7CisKKyAgICByZXR1cm4gZGlzcGF0Y2hN
YXA7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzdGFydEluaXRpYWxDb21tdW5p
Y2F0aW9uKCkKK3sKKyAgICBhdXRvIGV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBldmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9zKTsK
KyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwor
dm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25DbG9zZWQoKQoreworICAgIG1f
dGFyZ2V0cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKKyAgICBt
X29ic2VydmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOworICAgIG1fb2JzZXJ2ZXIudGFyZ2V0
TGlzdENoYW5nZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlk
Q2xvc2UoQ29ubmVjdGlvbklEKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAg
ICAgICAgY29ubmVjdGlvbkNsb3NlZCgpOworICAgIH0pOworfQorCit2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0
YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKK3sKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9w
YWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJ
RCwgZGVidWdnYWJsZVR5cGVdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5z
cGVjdG9yUHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlw
ZSk7CisgICAgfSk7CisKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAg
IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3coKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gc2V0dXBFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
c2V0dXBFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwIl9zKTsKKyAgICBzZXR1cEV2
ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7CisgICAgc2V0
dXBFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKKyAgICBzZW5kV2Vi
SW5zcGVjdG9yRXZlbnQoc2V0dXBFdmVudC0+dG9KU09OU3RyaW5nKCkpOworCisgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFy
Z2V0SUQgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBhdXRvIGJhY2tl
bmRFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRT
dHJpbmcoImV2ZW50Il9zLCAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiX3MpOworICAgIGJhY2tlbmRF
dmVudC0+c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAgIGJh
Y2tlbmRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKKyAgICBiYWNr
ZW5kRXZlbnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSk7CisgICAgc2VuZFdlYklu
c3BlY3RvckV2ZW50KGJhY2tlbmRFdmVudC0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIFJl
bW90ZUluc3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklEIGNvbm5l
Y3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCit7CisgICAgYXV0byBjbG9zZWRFdmVudCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgY2xvc2VkRXZlbnQtPnNldFN0cmluZygiZXZlbnQi
X3MsICJGcm9udGVuZERpZENsb3NlIl9zKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdlcigi
Y29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRl
Z2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChj
bG9zZWRFdmVudC0+dG9KU09OU3RyaW5nKCkpOworCisgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5y
ZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworfQorCit2b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IEV2ZW50JiBl
dmVudCkKK3sKKyAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VT
dHJpbmcoImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQu
bWVzc2FnZS0+dXRmOCgpKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRU
YXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIWV2ZW50LmNvbm5lY3Rp
b25JRCB8fCAhZXZlbnQubWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBtZXNzYWdlVmFsdWU7CisgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSwgbWVzc2FnZVZhbHVlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdlQXJyYXk7CisgICAgaWYgKCFtZXNzYWdl
VmFsdWUtPmFzQXJyYXkobWVzc2FnZUFycmF5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPFRhcmdldD4gdGFyZ2V0TGlzdDsKKyAgICBmb3IgKGF1dG8mIGl0ZW1WYWx1ZSA6ICptZXNz
YWdlQXJyYXkpIHsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRlbU9iamVjdDsKKyAg
ICAgICAgaWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgVGFyZ2V0IHRhcmdldDsKKyAgICAgICAgaWYgKCFpdGVtT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0LmlkKQorICAgICAgICAgICAgfHwg
IWl0ZW1PYmplY3QtPmdldFN0cmluZygibmFtZSJfcywgdGFyZ2V0Lm5hbWUpCisgICAgICAgICAg
ICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHRhcmdldC51cmwpCisgICAgICAg
ICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0YXJnZXQudHlwZSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXRMaXN0LmFwcGVuZChXVEZNb3Zl
KHRhcmdldCkpOworICAgIH0KKworICAgIGF1dG8gY29ubmVjdGlvbklEID0gZXZlbnQuY29ubmVj
dGlvbklELnZhbHVlKCk7CisKKyAgICAvLyBGaW5kIGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0
aGVtLgorICAgIFZlY3RvcjxUYXJnZXRJRCwgND4gdGFyZ2V0c1RvUmVtb3ZlOworICAgIGZvciAo
YXV0byYgcGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5cygpKSB7CisgICAgICAgIGlmIChw
YWlyLmZpcnN0ICE9IGNvbm5lY3Rpb25JRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiB0YXJn
ZXRMaXN0KSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IHBhaXIuc2Vjb25kKSB7Cisg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAg
IHRhcmdldHNUb1JlbW92ZS5hcHBlbmQocGFpci5zZWNvbmQpOworICAgIH0KKyAgICBmb3IgKGF1
dG8mIHRhcmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQorICAgICAgICBtX2luc3BlY3RvclByb3h5
TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7CisKKyAg
ICBtX3RhcmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAg
bV9vYnNlcnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50KQor
eworICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZl
bnQubWVzc2FnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcm94eSA9IG1faW5zcGVj
dG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgp
LCBldmVudC50YXJnZXRJRC52YWx1ZSgpKSk7CisgICAgaWYgKCFwcm94eSkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByb3h5
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi45ZjUxZDYzZGVhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKQEAg
LTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlQ29u
dHJvbGxhYmxlVGFyZ2V0Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRGVidWdn
YWJsZVR5cGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7
CitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsKKworY2xhc3MgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflJlbW90ZUluc3BlY3Rvck9ic2VydmVyKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNs
aWVudCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvbkNsb3NlZChSZW1vdGVJbnNw
ZWN0b3JDbGllbnQmKSA9IDA7Cit9OworCit1c2luZyBDb25uZWN0aW9uSUQgPSBJbnNwZWN0b3I6
OkNvbm5lY3Rpb25JRDsKK3VzaW5nIFRhcmdldElEID0gSW5zcGVjdG9yOjpUYXJnZXRJRDsKKwor
Y2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6UmVt
b3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQoKTsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQoVVJMLCBSZW1vdGVJbnNw
ZWN0b3JPYnNlcnZlciYpOworICAgIH5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKTsKKworICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgdXBkYXRlIHRoZSBtZXNzYWdpbmcgcHJvdG9jb2wgdG8gdXNlIERl
YnVnZ2FibGVUeXBlIGluc3RlYWQgb2YgU3RyaW5nIGZvciB0aGUgdGFyZ2V0IHR5cGUuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjA0NworICAgIHN0
cnVjdCBUYXJnZXQgeworICAgICAgICBUYXJnZXRJRCBpZDsKKyAgICAgICAgU3RyaW5nIHR5cGU7
CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgdXJsOworICAgIH07CisKKyAg
ICBjb25zdCBIYXNoTWFwPENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+JiB0YXJnZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRzOyB9CisgICAgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29t
bWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQorCisgICAg
dm9pZCBpbnNwZWN0KENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIEluc3BlY3Rvcjo6RGVidWdnYWJs
ZVR5cGUpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklELCBUYXJn
ZXRJRCwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0
aW9uSUQsIFRhcmdldElEKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0
cm95ZWQ8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PjsKKworICAgIHZvaWQgc3RhcnRJbml0aWFsQ29t
bXVuaWNhdGlvbigpOworICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZCgpOworCisgICAgdm9pZCBz
ZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50Jik7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRl
bmQoY29uc3QgRXZlbnQmKTsKKyAgICB2b2lkIHNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBFdmVu
dCYpOworCisgICAgdm9pZCBkaWRDbG9zZShDb25uZWN0aW9uSUQpIGZpbmFsOworICAgIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4mIGRpc3BhdGNoTWFwKCkgZmluYWw7CisKKyAgICB2b2lk
IHNlbmRXZWJJbnNwZWN0b3JFdmVudChjb25zdCBTdHJpbmcmKTsKKworICAgIFN0cmluZyBtX2Jh
Y2tlbmRDb21tYW5kc1VSTDsKKyAgICBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgbV9vYnNlcnZl
cjsKKyAgICBPcHRpb25hbDxDb25uZWN0aW9uSUQ+IG1fY29ubmVjdGlvbklEOworICAgIEhhc2hN
YXA8Q29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOworICAgIEhhc2hNYXA8
c3RkOjpwYWlyPENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQ+LCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
SW5zcGVjdG9yUHJveHk+PiBtX2luc3BlY3RvclByb3h5TWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yUHJvdG9jb2xIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2JjNDU1ZDNlNjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
clByb3RvY29sSGFuZGxlci5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlci5oIgorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJBUElM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJ
VXNlckNvbnRlbnRXb3JsZC5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCisj
aW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworY2xhc3MgU2NyaXB0TWVzc2FnZUNsaWVudCBmaW5hbCA6IHB1YmxpYyBX
ZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBTY3JpcHRNZXNzYWdlQ2xpZW50KFJlbW90ZUluc3BlY3RvclBy
b3RvY29sSGFuZGxlciYgaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKQorICAgICAgICA6IG1faW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyKGluc3BlY3RvclByb3RvY29sSGFuZGxlcikgeyB9CisKKyAg
ICB+U2NyaXB0TWVzc2FnZUNsaWVudCgpIHsgfQorCisgICAgdm9pZCBkaWRQb3N0TWVzc2FnZShX
ZWJQYWdlUHJveHkmIHBhZ2UsIEZyYW1lSW5mb0RhdGEmJiwgV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlJiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvIHRva2VucyA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS50b1N0cmluZygpLnNwbGl0KCI6
Iik7CisgICAgICAgIGlmICh0b2tlbnMuc2l6ZSgpICE9IDMpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgVVJMIHJlcXVlc3RVUkwgeyB7IH0sIHBhZ2UucGFnZUxvYWRTdGF0ZSgpLnVy
bCgpIH07CisgICAgICAgIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmluc3BlY3QocmVxdWVz
dFVSTC5ob3N0QW5kUG9ydCgpLCB0b2tlbnNbMF0udG9VSW50U3RyaWN0KCksIHRva2Vuc1sxXS50
b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzJdKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlcjsKK307
CisKK2NsYXNzIExvYWRlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkxvYWRlckNsaWVudCB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTG9hZGVyQ2xpZW50
KEZ1bmN0aW9uPHZvaWQoKT4mJiBsb2FkZWRDYWxsYmFjaykKKyAgICAgICAgOiBtX2xvYWRlZENh
bGxiYWNrIHsgV1RGTW92ZShsb2FkZWRDYWxsYmFjaykgfSB7IH0KKworICAgIHZvaWQgZGlkRmlu
aXNoTG9hZEZvckZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVBy
b3h5JiwgQVBJOjpOYXZpZ2F0aW9uKiwgQVBJOjpPYmplY3QqKSBmaW5hbAorICAgIHsKKyAgICAg
ICAgbV9sb2FkZWRDYWxsYmFjaygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2
b2lkKCk+IG1fbG9hZGVkQ2FsbGJhY2s7Cit9OworCitzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZT4gcGFyc2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiBkZWJ1Z2dhYmxlVHlwZVN0cmluZykKK3sKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJp
bmcgPT0gImphdmFzY3JpcHQiX3MpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2Fi
bGVUeXBlOjpKYXZhU2NyaXB0OworICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAicGFn
ZSJfcykKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OlBhZ2U7Cisg
ICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJzZXJ2aWNlLXdvcmtlciJfcykKKyAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OlNlcnZpY2VXb3JrZXI7CisgICAg
aWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJ3ZWItcGFnZSJfcykKKyAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7CisKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6aW5zcGVj
dChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBU
YXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8gZGVidWdn
YWJsZVR5cGUgPSBwYXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmluZyh0eXBlKTsKKyAgICBpZiAo
IWRlYnVnZ2FibGVUeXBlKSB7CisgICAgICAgIExPR19FUlJPUigiVW5rbm93biBkZWJ1Z2dhYmxl
IHR5cGU6IFwiJXNcIiIsIHR5cGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JDbGllbnQpCisgICAgICAgIG1faW5zcGVjdG9yQ2xp
ZW50LT5pbnNwZWN0KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVUeXBlLnZhbHVl
KCkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6cnVuU2NyaXB0
KGNvbnN0IFN0cmluZyYgc2NyaXB0KQoreworICAgIG1fcGFnZS5ydW5KYXZhU2NyaXB0SW5NYWlu
RnJhbWUoeyBzY3JpcHQsIGZhbHNlLCBXVEY6Om51bGxvcHQsIGZhbHNlIH0sIAorICAgICAgICBb
XShBUEk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIE9wdGlvbmFsPFdlYkNvcmU6OkV4Y2VwdGlv
bkRldGFpbHM+IGV4Y2VwdGlvbkRldGFpbHMsIENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAg
ICAgICAgIGlmIChleGNlcHRpb25EZXRhaWxzKQorICAgICAgICAgICAgICAgIExPR19FUlJPUigi
RXhjZXB0aW9uIHJ1bm5pbmcgc2NyaXB0IFwiJXNcIiIsIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3Nh
Z2UudXRmOCgpLmRhdGEoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyOjp0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGNs
aWVudCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGh0bWw7CisgICAgaWYgKGNsaWVudC50YXJnZXRz
KCkuaXNFbXB0eSgpKQorICAgICAgICBodG1sLmFwcGVuZCgiPHA+Tm8gdGFyZ2V0cyBmb3VuZDwv
cD4iX3MpOworICAgIGVsc2UgeworICAgICAgICBodG1sLmFwcGVuZCgiPHRhYmxlPiIpOworICAg
ICAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb25JRCA6IGNsaWVudC50YXJnZXRzKCkua2V5cygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IGNsaWVudC50YXJnZXRzKCkuZ2V0KGNv
bm5lY3Rpb25JRCkpIHsKKyAgICAgICAgICAgICAgICBodG1sLmFwcGVuZChtYWtlU3RyaW5nKAor
ICAgICAgICAgICAgICAgICAgICAiPHRib2R5Pjx0cj4iCisgICAgICAgICAgICAgICAgICAgICI8
dGQgY2xhc3M9XCJkYXRhXCI+PGRpdiBjbGFzcz1cInRhcmdldG5hbWVcIj4iLCB0YXJnZXQubmFt
ZSwgIjwvZGl2PjxkaXYgY2xhc3M9XCJ0YXJnZXR1cmxcIj4iLCB0YXJnZXQudXJsLCAiPC9kaXY+
PC90ZD4iCisgICAgICAgICAgICAgICAgICAgICI8dGQgY2xhc3M9XCJpbnB1dFwiPjxpbnB1dCB0
eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJJbnNwZWN0XCIgb25jbGljaz1cIndpbmRvdy53ZWJraXQu
bWVzc2FnZUhhbmRsZXJzLmluc3BlY3Rvci5wb3N0TWVzc2FnZShcXCciLCBjb25uZWN0aW9uSUQs
ICI6IiwgdGFyZ2V0LmlkLCAiOiIsIHRhcmdldC50eXBlLCAiXFwnKTtcIj48L3RkPiIKKyAgICAg
ICAgICAgICAgICAgICAgIjwvdHI+PC90Ym9keT4iCisgICAgICAgICAgICAgICAgKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaHRtbC5hcHBlbmQoIjwvdGFibGU+Iik7Cisg
ICAgfQorICAgIG1fdGFyZ2V0TGlzdHNIdG1sID0gaHRtbC50b1N0cmluZygpOworICAgIGlmICht
X3BhZ2VMb2FkZWQpCisgICAgICAgIHVwZGF0ZVRhcmdldExpc3QoKTsKK30KKwordm9pZCBSZW1v
dGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnVwZGF0ZVRhcmdldExpc3QoKQoreworICAgIGlm
ICghbV90YXJnZXRMaXN0c0h0bWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJ1blNjcmlwdChtYWtl
U3RyaW5nKCJ1cGRhdGVUYXJnZXRzKGAiLCBtX3RhcmdldExpc3RzSHRtbCwgImApOyIpKTsKKyAg
ICAgICAgbV90YXJnZXRMaXN0c0h0bWwgPSB7IH07CisgICAgfQorfQorCit2b2lkIFJlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlcjo6cGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiBw
YWdlUHJveHksIFdlYlVSTFNjaGVtZVRhc2smIHRhc2spCit7CisgICAgYXV0byYgcmVxdWVzdFVS
TCA9IHRhc2sucmVxdWVzdCgpLnVybCgpOworCisgICAgLy8gRGVzdHJveSB0aGUgY2xpZW50IGJl
Zm9yZSBjcmVhdGluZyBhIG5ldyBjb25uZWN0aW9uIHNvIGl0IGNhbiBjb25uZWN0IHRvIHRoZSBz
YW1lIHBvcnQKKyAgICBtX2luc3BlY3RvckNsaWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNwZWN0
b3JDbGllbnQgPSBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvckNsaWVudD4ocmVxdWVzdFVSTCwg
KnRoaXMpOworCisgICAgLy8gU2V0dXAgdGFyZ2V0IHBvc3RNZXNzYWdlIGxpc3RlbmVyCisgICAg
YXV0byBoYW5kbGVyID0gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OmNyZWF0ZShtYWtlVW5pcXVl
PFNjcmlwdE1lc3NhZ2VDbGllbnQ+KCp0aGlzKSwgImluc3BlY3RvciIsIEFQSTo6VXNlckNvbnRl
bnRXb3JsZDo6bm9ybWFsV29ybGQoKSk7CisgICAgcGFnZVByb3h5LnBhZ2VHcm91cCgpLnVzZXJD
b250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihoYW5kbGVyLmdl
dCgpKTsKKworICAgIC8vIFNldHVwIGxvYWRlciBjbGllbnQgdG8gZ2V0IG5vdGlmaWVkIG9mIHBh
Z2UgbG9hZAorICAgIG1fcGFnZS5zZXRMb2FkZXJDbGllbnQobWFrZVVuaXF1ZTxMb2FkZXJDbGll
bnQ+KFt0aGlzXSB7CisgICAgICAgIG1fcGFnZUxvYWRlZCA9IHRydWU7CisgICAgICAgIHVwZGF0
ZVRhcmdldExpc3QoKTsKKyAgICB9KSk7CisgICAgbV9wYWdlTG9hZGVkID0gZmFsc2U7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIGh0bWxCdWlsZGVyOworICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgKKyAg
ICAgICAgIjxodG1sPjxoZWFkPjx0aXRsZT5SZW1vdGUgSW5zcGVjdG9yPC90aXRsZT4iCisgICAg
ICAgICI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRt
bDsgY2hhcnNldD11dGYtOFwiIC8+IgorICAgICAgICAiPHN0eWxlPiIKKyAgICAgICAgIiAgaDEg
eyBjb2xvcjogI2JhYmRiNjsgdGV4dC1zaGFkb3c6IDAgMXB4IDAgd2hpdGU7IG1hcmdpbi1ib3R0
b206IDA7IH0iCisgICAgICAgICIgIGh0bWwgeyBmb250LWZhbWlseTogLXdlYmtpdC1zeXN0ZW0t
Zm9udDsgZm9udC1zaXplOiAxMXB0OyBjb2xvcjogIzJlMzQzNjsgcGFkZGluZzogMjBweCAyMHB4
IDAgMjBweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmNDsgIgorICAgICAgICAiICAgICAgICAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0
IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZWVlZWVjKSwgY29sb3Itc3RvcCgxLCAjZjZmNmY0KSk7
IgorICAgICAgICAiICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDVlbTsgYmFja2dyb3Vu
ZC1yZXBlYXQ6IG5vLXJlcGVhdDsgfSIKKyAgICAgICAgIiAgdGFibGUgeyB3aWR0aDogMTAwJTsg
Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgdGFibGUtbGF5b3V0OiBmaXhlZDsgfSIKKyAgICAg
ICAgIiAgdGFibGUsIHRkIHsgYm9yZGVyOiAxcHggc29saWQgI2QzZDdjZjsgYm9yZGVyLWxlZnQ6
IG5vbmU7IGJvcmRlci1yaWdodDogbm9uZTsgfSIKKyAgICAgICAgIiAgcCB7IG1hcmdpbi1ib3R0
b206IDMwcHg7IH0iCisgICAgICAgICIgIHRkIHsgcGFkZGluZzogMTVweDsgfSIKKyAgICAgICAg
IiAgdGQuZGF0YSB7IHdpZHRoOiAyMDBweDsgfSIKKyAgICAgICAgIiAgLnRhcmdldG5hbWUgeyBm
b250LXdlaWdodDogYm9sZDsgb3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6bm93cmFwOyB0
ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfSIKKyAgICAgICAgIiAgLnRhcmdldHVybCB7IGNvbG9y
OiAjYmFiZGI2OyBiYWNrZ3JvdW5kOiAjZWVlOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IG92ZXJm
bG93LXdyYXA6IGJyZWFrLXdvcmQ7IH0iCisgICAgICAgICIgIHRkLmlucHV0IHsgd2lkdGg6IDY0
cHg7IH0iCisgICAgICAgICIgIGlucHV0IHsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IDhweDsgfSIK
KyAgICAgICAgIjwvc3R5bGU+IgorICAgICAgICAiPC9oZWFkPjxib2R5PjxoMT5JbnNwZWN0YWJs
ZSB0YXJnZXRzPC9oMT4iCisgICAgICAgICI8ZGl2IGlkPVwidGFyZ2V0bGlzdFwiPjxwPk5vIHRh
cmdldHMgZm91bmQ8L3A+PC9kaXY+PC9ib2R5PiIKKyAgICAgICAgIjxzY3JpcHQ+IgorICAgICAg
ICAiZnVuY3Rpb24gdXBkYXRlVGFyZ2V0cyhzdHIpIHsiCisgICAgICAgICAgICAibGV0IHRhcmdl
dERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXRsaXN0Jyk7IgorICAgICAgICAg
ICAgInRhcmdldERpdi5pbm5lckhUTUwgPSBzdHI7IgorICAgICAgICAifSIKKyAgICAgICAgIjwv
c2NyaXB0PiIpOworICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPC9odG1sPiIpOworCisgICAgYXV0
byBodG1sID0gaHRtbEJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgYXV0byBkYXRhID0g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoaHRtbC5kYXRhKCksIGh0bWwubGVuZ3RoKCkpOworICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvaHRtbCJfcywgaHRtbC5s
ZW5ndGgoKSwgIlVURi04Il9zKTsKKyAgICB0YXNrLmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25z
ZSk7CisgICAgdGFzay5kaWRSZWNlaXZlRGF0YShXVEZNb3ZlKGRhdGEpKTsKKyAgICB0YXNrLmRp
ZENvbXBsZXRlKFJlc291cmNlRXJyb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMGY2MDBlZmRlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxl
ci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNs
aWVudC5oIgorI2luY2x1ZGUgIldlYlVSTFNjaGVtZUhhbmRsZXIuaCIKKworbmFtZXNwYWNlIFdU
RiB7CitjbGFzcyBVUkw7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJVUkxT
Y2hlbWVUYXNrOworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIgZmluYWwg
OiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIsIHB1YmxpYyBXZWJVUkxTY2hlbWVIYW5k
bGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYgcGFnZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIocGFnZSkpOyB9CisKKyAgICB2b2lkIGluc3Bl
Y3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9ydCwgQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29u
c3QgU3RyaW5nJiB0eXBlKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXIoV2ViUGFnZVByb3h5JiBwYWdlKQorICAgICAgICA6IG1fcGFnZShwYWdlKSB7IH0K
KworICAgIC8vIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyCisgICAgdm9pZCB0YXJnZXRMaXN0Q2hh
bmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIGNvbm5lY3Rpb25D
bG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgZmluYWwgeyB9CisKKyAgICAvLyBXZWJVUkxT
Y2hlbWVIYW5kbGVyCisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmLCBX
ZWJVUkxTY2hlbWVUYXNrJikgZmluYWw7CisgICAgdm9pZCBwbGF0Zm9ybVN0b3BUYXNrKFdlYlBh
Z2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KKyAgICB2b2lkIHBsYXRmb3Jt
VGFza0NvbXBsZXRlZChXZWJVUkxTY2hlbWVUYXNrJikgZmluYWwgeyB9CisKKyAgICB2b2lkIHVw
ZGF0ZVRhcmdldExpc3QoKTsKKworICAgIHZvaWQgcnVuU2NyaXB0KGNvbnN0IFN0cmluZyYpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvckNsaWVudD4gbV9pbnNwZWN0b3JD
bGllbnQ7CisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CisgICAgYm9vbCBtX3BhZ2VMb2FkZWQg
eyBmYWxzZSB9OworICAgIFN0cmluZyBtX3RhcmdldExpc3RzSHRtbDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYklu
c3BlY3RvclByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93
aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4zOTBjMmI5NGYyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4u
Y3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIExQQ1RT
VFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCA9IFRFWFQoIlJlbW90ZVdlYklu
c3BlY3RvclByb3h5UG9pbnRlciIpOworY29uc3QgTFBDV1NUUiBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsYXNzTmFtZSA9IEwiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7CisKK0xSRVNV
TFQgQ0FMTEJBQ0sgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2MoSFdORCBod25kLCBV
SU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQ
cm9wKSk7CisKKyAgICBzd2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAg
cmV0dXJuIGNsaWVudC0+c2l6ZUNoYW5nZSgpOworICAgIGNhc2UgV01fQ0xPU0U6CisgICAgICAg
IHJldHVybiBjbGllbnQtPm9uQ2xvc2UoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBs
UGFyYW0pOworfQorCitzdGF0aWMgQVRPTSByZWdpc3RlcldpbmRvd0NsYXNzKCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhh
dmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgV05E
Q0xBU1NFWCB3Y2V4OworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworICAg
IHdjZXguc3R5bGUgICAgICAgICAgPSAwOworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0g
MDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmhJbnN0YW5jZSAgICAg
ID0gMDsKKyAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgICAg
ICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCAg
PSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOworICAgIHdjZXgubHBzekNsYXNzTmFt
ZSAgPSBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKKyAgICB3Y2V4LmhJY29uU20g
ICAgICAgID0gMDsKKworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOworICAg
IHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK0xSRVNVTFQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnNpemVDaGFuZ2UoKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJlY3QobV9m
cm9udGVuZEhhbmRsZSwgJnJlY3QpOworICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlldy0+d2lu
ZG93KCksIDAsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJl
Y3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgcmV0dXJuIDA7Cit9CisK
K0xSRVNVTFQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9uQ2xvc2UoKQoreworICAgIDo6U2hv
d1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19ISURFKTsKKyAgICBmcm9udGVuZERpZENsb3Nl
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBSZWZQ
dHI8V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShT
dHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7CisgICAgcHJlZmVyZW5jZXMtPnNldEFs
bG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyh0cnVlKTsKKworI2lmIEVOQUJMRShERVZFTE9QRVJf
TU9ERSkKKyAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsK
KyAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJs
ZWQodHJ1ZSk7CisjZW5kaWYKKworICAgIFJlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCA9
IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQYWdl
KG51bGxwdHIpKTsKKworICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bv
b2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFnZShudWxscHRyKSkp
OworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQo
KSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkp
OworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KDYwLCAyMDAsIDE1MDAsIDEwMDApOworICAg
IHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKKyAgICBtX2Zyb250ZW5kSGFuZGxlID0gOjpDcmVhdGVX
aW5kb3dFeCgwLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwgV1NfT1ZFUkxB
UFBFRFdJTkRPVywKKyAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCksIDAsIDAsIDAsIDApOworCisgICAgOjpTZXRQcm9wKG1fZnJvbnRlbmRIYW5k
bGUsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8
SEFORExFPih0aGlzKSk7CisgICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSGFuZGxlLCBTV19TSE9X
KTsKKworICAgIFJFQ1QgcjsKKyAgICA6OkdldENsaWVudFJlY3QobV9mcm9udGVuZEhhbmRsZSwg
JnIpOworICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJhdGlv
biwgbV9mcm9udGVuZEhhbmRsZSk7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOworfQor
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkgeyB9
Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0K
K3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvJikgeyB9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIDo6RGVzdHJveVdpbmRv
dyhtX2Zyb250ZW5kSGFuZGxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJkZWFjOTczMTc5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJ
bnNwZWN0b3JQcm94eVdpbi5jcHAKQEAgLTAsMCArMSw0NTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5j
bHVkZSAiQVBJTmF2aWdhdGlvbi5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIK
KyNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnRJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAi
V2ViUHJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2luY2x1ZGUg
IldlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVX
aW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+CisjaW5jbHVkZSA8V2ViS2l0
L1dLUGFnZS5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPHd0Zi9jZi9DRlVSTEV4dHJhcy5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgTFBDV1NUUiBX
ZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gTCJXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIi
Oworc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUgPSBMIldl
Ykluc3BlY3RvclByb3h5Q2xhc3MiOworCitzdHJ1Y3QgSW5zcGVjdGVkV2luZG93SW5mbyB7Cisg
ICAgaW50IGxlZnQ7CisgICAgaW50IHRvcDsKKyAgICBpbnQgdmlld1dpZHRoOworICAgIGludCB2
aWV3SGVpZ2h0OworICAgIGludCBwYXJlbnRXaWR0aDsKKyAgICBpbnQgcGFyZW50SGVpZ2h0Owor
fTsKKworc3RhdGljIEluc3BlY3RlZFdpbmRvd0luZm8gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhI
V05EIGluc3BlY3RlZFdpbmRvdywgSFdORCBwYXJlbnRXaW5kb3cpCit7CisgICAgUkVDVCByZWN0
OworICAgIDo6R2V0Q2xpZW50UmVjdChpbnNwZWN0ZWRXaW5kb3csICZyZWN0KTsKKyAgICA6Ok1h
cFdpbmRvd1BvaW50cyhpbnNwZWN0ZWRXaW5kb3csIHBhcmVudFdpbmRvdywgKExQUE9JTlQpJnJl
Y3QsIDIpOworCisgICAgUkVDVCBwYXJlbnRSZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChwYXJl
bnRXaW5kb3csICZwYXJlbnRSZWN0KTsKKyAgICByZXR1cm4geyByZWN0LmxlZnQsIHJlY3QudG9w
LCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBwYXJlbnRS
ZWN0LnJpZ2h0IC0gcGFyZW50UmVjdC5sZWZ0LCBwYXJlbnRSZWN0LmJvdHRvbSAtIHBhcmVudFJl
Y3QudG9wIH07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd1JlY2VpdmVkTWVz
c2FnZShIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSBsUGFyYW0pCit7CisgICAg
c3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOiB7CisgICAgICAg
IGlmICghbV9pc0F0dGFjaGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8g
d2luZG93UG9zID0gcmVpbnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFyYW0pOworCisgICAg
ICAgIGlmICh3aW5kb3dQb3MtPmZsYWdzICYgU1dQX05PU0laRSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBIV05EIHBhcmVudCA9IEdldFBhcmVudChod25kKTsKKyAgICAgICAgUkVD
VCBwYXJlbnRSZWN0OworICAgICAgICBHZXRDbGllbnRSZWN0KHBhcmVudCwgJnBhcmVudFJlY3Qp
OworCisgICAgICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKKyAgICAgICAgR2V0Q2xpZW50UmVjdCht
X2luc3BlY3RvclZpZXdXaW5kb3csICZpbnNwZWN0b3JSZWN0KTsKKworICAgICAgICBzd2l0Y2gg
KG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9t
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JIZWlnaHQgPSBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0
KGluc3BlY3RvclJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3AsIHdpbmRvd1Bvcy0+Y3kp
OworICAgICAgICAgICAgd2luZG93UG9zLT5jeSAtPSBpbnNwZWN0b3JIZWlnaHQ7CisgICAgICAg
ICAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+
eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9y
SGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6UmlnaHQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvcldpZHRoID0gV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdp
bmRvd1dpZHRoKGluc3BlY3RvclJlY3QucmlnaHQgLSBpbnNwZWN0b3JSZWN0LmxlZnQsIHdpbmRv
d1Bvcy0+Y3gpOworICAgICAgICAgICAgd2luZG93UG9zLT5jeCAtPSBpbnNwZWN0b3JXaWR0aDsK
KyAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2lu
ZG93UG9zLT54ICsgd2luZG93UG9zLT5jeCwgd2luZG93UG9zLT55LCBpbnNwZWN0b3JXaWR0aCwg
d2luZG93UG9zLT5jeSwgU1dQX05PWk9SREVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclByb3h5Ojp3bmRQcm9jKEhXTkQgaHdu
ZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgV2ViSW5z
cGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkq
Pig6OkdldFByb3AoaHduZCwgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOworICAgIHN3
aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAgICA6OlNldFdpbmRvd1Bvcyhj
bGllbnQtPm1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgTE9XT1JEKGxQYXJhbSksIEhJ
V09SRChsUGFyYW0pLCBTV1BfTk9aT1JERVIpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNl
IFdNX0NMT1NFOgorICAgICAgICBjbGllbnQtPmNsb3NlKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gOjpEZWZXaW5k
b3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworfQorCitib29sIFdlYkluc3BlY3Rv
clByb3h5OjpyZWdpc3RlcldpbmRvd0NsYXNzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVn
aXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5k
b3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dD
bGFzcyA9IHRydWU7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBz
aXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSA9IDA7CisgICAgd2NleC5scGZuV25k
UHJvYyA9IHduZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4LmNiV25k
RXh0cmEgPSAwOworICAgIHdjZXguaEluc3RhbmNlID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUo
KTsKKyAgICB3Y2V4LmhJY29uID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgPSBMb2FkQ3Vyc29yKDAs
IElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kID0gMDsKKyAgICB3Y2V4Lmxwc3pN
ZW51TmFtZSA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yUHJveHlD
bGFzc05hbWU7CisgICAgd2NleC5oSWNvblNtID0gMDsKKyAgICByZXR1cm4gOjpSZWdpc3RlckNs
YXNzRXgoJndjZXgpOworfQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlv
bkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJh
bWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgorICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFt
ZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKKyAgICBpZiAo
c291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAgIHRv
SW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQod2Vi
SW5zcGVjdG9yUHJveHkpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qg
PSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKKworICAgIC8vIEFsbG93
IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYkluc3BlY3Rv
clByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7CisgICAg
ICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBp
bnNwZWN0b3IncyBwYWdlLgorICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOworCisg
ICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgd2Vi
SW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1
ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3Bl
Y3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0PHZv
aWQqPihjbGllbnRJbmZvKSk7CisgICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKKyAgICB3
ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCitXZWJQYWdlUHJveHkqIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNT
RVJUKGluc3BlY3RlZFBhZ2UoKSk7CisKKyAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVy
ZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7CisjaWYgRU5B
QkxFKERFVkVMT1BFUl9NT0RFKQorICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0
aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5n
cy4KKyAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAg
ICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQo
dHJ1ZSk7CisjZW5kaWYKKyAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdz
KHsgfSk7CisgICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0
b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKKyAgICBhdXRv
IHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Cisg
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9v
bChpbnNwZWN0aW9uTGV2ZWwoKSkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJl
bmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VH
cm91cChwYWdlR3JvdXAucHRyKCkpOworCisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5h
dmlnYXRpb25DbGllbnQgPSB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorICAgICAgICBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5
Rm9yUGx1Z2luTG9hZAorICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2
aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lv
bmFsTmF2aWdhdGlvbgorICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRmFpbE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZEluU3ViZnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRM
b2FkCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KKyAgICAg
ICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAgICAgICBudWxs
cHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgd2ViUHJv
Y2Vzc0RpZENyYXNoLAorICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5
CisKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQorICAgICAg
ICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3Zl
TmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAorICAgIH07CisKKyAgICBSRUNUIHIgPSB7IDAsIDAs
IHN0YXRpY19jYXN0PExPTkc+KGluaXRpYWxXaW5kb3dXaWR0aCksIHN0YXRpY19jYXN0PExPTkc+
KGluaXRpYWxXaW5kb3dIZWlnaHQpIH07CisgICAgYXV0byBwYWdlID0gaW5zcGVjdGVkUGFnZSgp
OworICAgIG1faW5zcGVjdGVkVmlld1dpbmRvdyA9IHBhZ2UtPnZpZXdXaWRnZXQoKTsKKyAgICBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSA6OkdldFBhcmVudChtX2luc3BlY3RlZFZpZXdX
aW5kb3cpOworICAgIGF1dG8gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJh
dGlvbiwgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICBtX2luc3BlY3RvclZpZXcg
PSAmdmlldy5sZWFrUmVmKCk7CisgICAgYXV0byBpbnNwZWN0b3JQYWdlID0gbV9pbnNwZWN0b3JW
aWV3LT5wYWdlKCk7CisgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gaW5zcGVjdG9yUGFnZS0+
dmlld1dpZGdldCgpOworICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGlu
c3BlY3RvclBhZ2UpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKworICAgIHJldHVybiBpbnNw
ZWN0b3JQYWdlOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRj
YXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisgICAg
bV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRy
OworICAgIGlmIChtX2luc3BlY3RvclZpZXdXaW5kb3cpIHsKKyAgICAgICAgOjpEZXN0cm95V2lu
ZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlld1dpbmRv
dyA9IG51bGxwdHI7CisgICAgfQorICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewor
ICAgICAgICA6OlJlbW92ZVByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3Rv
clByb3h5UG9pbnRlclByb3ApOworICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IG51bGxwdHI7
CisgICAgfQorICAgIG1faW5zcGVjdGVkVmlld1dpbmRvdyA9IG51bGxwdHI7CisgICAgbV9pbnNw
ZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gbnVsbHB0cjsKK30KKworU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRy
PENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChX
ZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIk1haW4iKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZT
VFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVS
TFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworU3RyaW5n
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisjaWYgVVNFKENG
KQorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVD
b3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJUZXN0IiksIENG
U1RSKCJodG1sIiksIENGU1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJM
R2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2Vu
ZGlmCit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCit7
CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYmFzZVVSTFJlZiA9IGFkb3B0
Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RS
KCJXZWJJbnNwZWN0b3JVSSIpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcmV0dXJuIENGVVJM
R2V0U3RyaW5nKGJhc2VVUkxSZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2Vu
ZGlmCit9CisKK0RlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpCit7CisgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIw
NTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEuCisgICAgcmV0dXJuIERl
YnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICBSRUNUIHJlY3Q7Cisg
ICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOworICAgIHJl
dHVybiByZWN0LmJvdHRvbSAtIHJlY3QudG9wOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgUkVDVCByZWN0Owor
ICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKKyAgICBy
ZXR1cm4gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1BdHRhY2goKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0
QXR0YWNoZWRTaXplID0gMzAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0
YWNoZWRXaWR0aCA9IDc1MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFj
aGVkSGVpZ2h0ID0gMjUwOworCisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93ICYmIDo6
R2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdykgPT0gbV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cpIHsKKyAgICAgICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cpOworICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3csIFNXX0hJREUpOworICAgIH0KKworICAgIFdlYkNvcmU6OldpbmRvd01lc3Nh
Z2VCcm9hZGNhc3Rlcjo6YWRkTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsK
KworICAgIGlmIChtX2F0dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsK
KyAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0
ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVs
dEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dXaWR0aCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dX
aWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFj
aGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7CisgICAgfQorICAgIDo6U2hvd1dpbmRv
dyhtX2luc3BlY3RvclZpZXdXaW5kb3csIFNXX1NIT1cpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhh
c1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnNwZWN0
b3JEZXRhY2hXaW5kb3cpIHsKKyAgICAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgICAg
ICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IDo6Q3JlYXRlV2luZG93RXgoMCwgV2ViSW5zcGVj
dG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgICAgICAgICBD
V19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxX
aW5kb3dIZWlnaHQsCisgICAgICAgICAgICAwLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgp
LCAwKTsKKyAgICAgICAgOjpTZXRQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNw
ZWN0b3JQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwor
ICAgIH0KKworICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlz
dGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKworICAgIFJFQ1QgcmVjdDsKKyAg
ICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csICZyZWN0KTsKKyAgICBh
dXRvIHdpbmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dp
bmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICA6OlNldFBhcmVudChtX2lu
c3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsKKyAgICA6OlNldFdp
bmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIHJlY3QucmlnaHQgLSByZWN0
LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRX
aW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRv
d0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5k
b3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworCisg
ICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRh
Y2hXaW5kb3csIFNXX1NIT1cpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBhdXRvIHdp
bmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywg
bV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3Bl
Y3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWln
aHQgLSBoZWlnaHQsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIGhl
aWdodCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdX
aW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFy
ZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2lu
ZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBh
dXRvIHdpbmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dp
bmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICA6OlNldFdpbmRvd1Bvcyht
X2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aWR0aCwg
d2luZG93SW5mby50b3AsIHdpZHRoLCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0lu
Zm8udG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmll
d1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5w
YXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3
aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUlzRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRT
dGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgLyogdXJsICov
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2
YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCAvKiBhdmFpbGFibGUgKi8pCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFdpbmRvdygpCit7CisgICAgcGxhdGZvcm1EZXRhY2goKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MjhjYTJmYmZiLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JUYXJnZXRQcm94eS5oIgotCi0jaW5jbHVkZSAiUHJvdmlzaW9uYWxQYWdlUHJveHkuaCIK
LSNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oIgotI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotc3RkOjp1bmlxdWVfcHRyPEluc3Bl
Y3RvclRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFdlYlBhZ2VQcm94
eSYgcGFnZSwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlIHR5cGUpCi17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+KHBhZ2UsIHRhcmdldElkLCB0eXBlKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
clRhcmdldFByb3h5PiBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y3JlYXRlKFByb3Zpc2lvbmFsUGFn
ZVByb3h5JiBwcm92aXNpb25hbFBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQotewotICAgIGF1dG8gdGFyZ2V0ID0gSW5zcGVj
dG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UucGFnZSgpLCB0YXJnZXRJZCwg
dHlwZSk7Ci0gICAgdGFyZ2V0LT5tX3Byb3Zpc2lvbmFsUGFnZSA9IG1ha2VXZWFrUHRyKHByb3Zp
c2lvbmFsUGFnZSk7Ci0gICAgcmV0dXJuIHRhcmdldDsKLX0KLQotSW5zcGVjdG9yVGFyZ2V0UHJv
eHk6Okluc3BlY3RvclRhcmdldFByb3h5KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUpCi0gICAgOiBt
X3BhZ2UocGFnZSkKLSAgICAsIG1faWRlbnRpZmllcih0YXJnZXRJZCkKLSAgICAsIG1fdHlwZSh0
eXBlKQotewotfQotCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5Ojpjb25uZWN0KEluc3BlY3Rv
cjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAg
ICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKLSAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpLCBjb25u
ZWN0aW9uVHlwZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fcGFnZS5o
YXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6Q29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCksIGNvbm5lY3Rpb25UeXBlKSk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmRpc2Nvbm5lY3QoKQotewotICAgIGlmIChpc1Bh
dXNlZCgpKQotICAgICAgICByZXN1bWUoKTsKLQotICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkg
ewotICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlz
Y29ubmVjdEluc3BlY3RvcihpZGVudGlmaWVyKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wYWdlLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRlbnRpZmllcigpKSk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAobV9wcm92aXNpb25hbFBhZ2Up
IHsKLSAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fcGFnZS5oYXNSdW5uaW5nUHJvY2VzcygpKQot
ICAgICAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VuZE1lc3NhZ2VUb1Rhcmdl
dEJhY2tlbmQoaWRlbnRpZmllcigpLCBtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCkKLXsKLSAgICBtX3Byb3Zpc2lv
bmFsUGFnZSA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmlzUHJv
dmlzaW9uYWwoKSBjb25zdAotewotICAgIHJldHVybiAhIW1fcHJvdmlzaW9uYWxQYWdlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3JUYXJnZXRQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjIzOWNl
YzhlMS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
VGFyZ2V0UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBQcm92aXNpb25hbFBhZ2VQcm94eTsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLQot
Ly8gTk9URTogVGhpcyBVSVByb2Nlc3Mgc2lkZSBJbnNwZWN0b3JUYXJnZXQgZG9lc24ndCBjYXJl
IGFib3V0IHRoZSBmcm9udGVuZCBjaGFubmVsLCBzaW5jZQotLy8gYW55IHRhcmdldCAtPiBmcm9u
dGVuZCBtZXNzYWdlcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUgV2ViUGFnZVByb3h5IHdpdGggYSB0
YXJnZXRJZC4KLQotY2xhc3MgSW5zcGVjdG9yVGFyZ2V0UHJveHkgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclRhcmdldFByb3h5KTsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5PiBjcmVhdGUo
V2ViUGFnZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JUYXJnZXRUeXBlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdl
dFByb3h5PiBjcmVhdGUoUHJvdmlzaW9uYWxQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwotICAgIEluc3BlY3RvclRhcmdl
dFByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgfkluc3BlY3RvclRhcmdldFByb3h5KCkgPSBkZWZh
dWx0OwotCi0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotCi0gICAgdm9pZCBkaWRDb21taXRQcm92aXNp
b25hbFRhcmdldCgpOwotICAgIGJvb2wgaXNQcm92aXNpb25hbCgpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjb25uZWN0KCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSBtX3R5cGU7Ci0gICAgV2Vh
a1B0cjxQcm92aXNpb25hbFBhZ2VQcm94eT4gbV9wcm92aXNpb25hbFBhZ2U7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5
MmMyOWY0MTguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZVdlYkluc3BlY3RvclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUg
IkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1
ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpCi0gICAgOiBtX2RlYnVnZ2FibGVJbmZvKEFQSTo6
RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpKQotewot
fQotCi1SZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6flJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkK
LXsKLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
VEVMRU1FVFJZKQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OlJlbW90ZVdlYkluc3BlY3RvclVJOjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFp
bGFibGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGF2YWlsYWJsZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6bG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiBkZWJ1Z2dhYmxlSW5mbywgY29u
c3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpCi17Ci0gICAgY3JlYXRlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7Ci0KLSAgICBtX2RlYnVnZ2FibGVJbmZvID0gV1RGTW92ZShkZWJ1Z2dhYmxl
SW5mbyk7Ci0gICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBiYWNrZW5kQ29tbWFuZHNVUkw7Ci0K
LSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJ
OjpJbml0aWFsaXplKG1fZGVidWdnYWJsZUluZm8tPmRlYnVnZ2FibGVJbmZvRGF0YSgpLCBiYWNr
ZW5kQ29tbWFuZHNVUkwpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChV
UkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb21CYWNrZW5kKCkKLXsKLSAgICBjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpjbG9zZUZyb21DcmFzaCgpCi17Ci0gICAgLy8gQmVoYXZlIGFzIGlmIHRoZSBmcm9udGVu
ZCBqdXN0IGNsb3NlZCwgc28gY2xpZW50cyBhcmUgaW5mb3JtZWQgdGhlIGZyb250ZW5kIGlzIGdv
bmUuCi0gICAgZnJvbnRlbmREaWRDbG9zZSgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpzaG93KCkKLXsKLSAgICBicmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5Ojpmcm9udGVuZERpZENsb3NlKCkKLXsKLSAgICBSZWY8UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgaWYgKG1fY2xpZW50
KQotICAgICAgICBtX2NsaWVudC0+Y2xvc2VGcm9tRnJvbnRlbmQoKTsKLQotICAgIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnJlb3BlbigpCi17Ci0gICAgQVNTRVJUKCFtX2JhY2tlbmRDb21tYW5kc1VSTC5pc0VtcHR5KCkp
OwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICBsb2FkKG1fZGVidWdn
YWJsZUluZm8uY29weVJlZigpLCBtX2JhY2tlbmRDb21tYW5kc1VSTCk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnJlc2V0U3RhdGUoKQotewotICAgIHBsYXRmb3JtUmVzZXRT
dGF0ZSgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQo
KQotewotICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsK
LSAgICBwbGF0Zm9ybVNhdmUoc3VnZ2VzdGVkVVJMLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBm
b3JjZVNhdmVEaWFsb2cpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjphcHBl
bmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsK
LSAgICBwbGF0Zm9ybUFwcGVuZChzdWdnZXN0ZWRVUkwsIGNvbnRlbnQpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIHBsYXRmb3JtU2V0U2hlZXRSZWN0KHJlY3QpOwotfQotCi12b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQotewotICAgIHBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Jbk5l
d1RhYihjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBwbGF0Zm9ybU9wZW5Jbk5ld1RhYih1cmwp
OwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29u
c3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlVG9CYWNrZW5k
KG1lc3NhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7Ci0KLSAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdl
LCBudWxscHRyKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotICAgIG1faW5z
cGVjdG9yUGFnZS0+cHJvY2VzcygpLmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwoKm1faW5zcGVj
dG9yUGFnZSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkK
LXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9p
bnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3Rv
clBhZ2UtPndlYlBhZ2VJRCgpKTsKLQotICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVj
dG9yUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOwotCi0gICAgcGxhdGZv
cm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi0jaWYgIUVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKSB8fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikpCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsg
fQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Ci12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKSB7
IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNvbnN0IENlcnRpZmljYXRlSW5mbyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpIHsgfQotI2VuZGlmIC8vICFF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWI1OGY4Y2UwNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi1PQkpDX0NMQVNTIE5T
VVJMOwotT0JKQ19DTEFTUyBOU1dpbmRvdzsKLU9CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29u
dHJvbGxlcjsKLU9CSkNfQ0xBU1MgV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
OwotT0JKQ19DTEFTUyBXS1dlYlZpZXc7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotfQotCi1uYW1lc3BhY2UgQVBJIHsKLWNsYXNzIERlYnVn
Z2FibGVJbmZvOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5
OwotY2xhc3MgV2ViVmlldzsKLQotY2xhc3MgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQg
ewotcHVibGljOgotICAgIHZpcnR1YWwgflJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpID0gMDsK
LX07Ci0KLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IDogcHVibGljIFJlZkNvdW50ZWQ8
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eSgpKTsKLSAgICB9Ci0KLSAgICB+UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKTsKLQotICAg
IHZvaWQgc2V0Q2xpZW50KFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBjbGllbnQpIHsg
bV9jbGllbnQgPSBjbGllbnQ7IH0KLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShi
b29sKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdm9pZCBsb2FkKFJlZjxBUEk6
OkRlYnVnZ2FibGVJbmZvPiYmLCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7Ci0g
ICAgdm9pZCBjbG9zZUZyb21CYWNrZW5kKCk7Ci0gICAgdm9pZCBzaG93KCk7Ci0KLSAgICB2b2lk
IHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIE5TV2luZG93ICp3aW5kb3coKSBjb25zdCB7IHJldHVybiBtX3dpbmRv
dy5nZXQoKTsgfQotICAgIFdLV2ViVmlldyAqd2ViVmlldygpIGNvbnN0OwotCi0gICAgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVj
dDsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCB1cGRhdGVXaW5kb3dU
aXRsZShjb25zdCBDU3RyaW5nJik7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykK
LSAgICBMUkVTVUxUIHNpemVDaGFuZ2UoKTsKLSAgICBMUkVTVUxUIG9uQ2xvc2UoKTsKLQotICAg
IHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFS
QU0pOwotI2VuZGlmCi0KLSAgICB2b2lkIGNsb3NlRnJvbUNyYXNoKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKLQotICAgIC8vIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IG1lc3Nh
Z2VzLgotICAgIHZvaWQgZnJvbnRlbmREaWRDbG9zZSgpOwotICAgIHZvaWQgcmVvcGVuKCk7Ci0g
ICAgdm9pZCByZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLSAgICB2b2lk
IHNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29s
IGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOwotICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCk7Ci0gICAgdm9pZCBzZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdGFydFdpbmRv
d0RyYWcoKTsKLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAg
dm9pZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi0g
ICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lkIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Ci0KLSAgICAvLyBQbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMu
Ci0gICAgV2ViUGFnZVByb3h5KiBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygp
OwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHZv
aWQgcGxhdGZvcm1SZXNldFN0YXRlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgp
OwotICAgIHZvaWQgcGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0
cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7Ci0gICAg
dm9pZCBwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBw
bGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsK
LQotICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIg
fTsKLSAgICBXZWJQYWdlUHJveHkqIG1faW5zcGVjdG9yUGFnZSB7IG51bGxwdHIgfTsKLQotICAg
IFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBtX2RlYnVnZ2FibGVJbmZvOwotICAgIFN0cmluZyBt
X2JhY2tlbmRDb21tYW5kc1VSTDsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcj4gbV9pbnNwZWN0b3JWaWV3OwotICAgIFJldGFpblB0
cjxOU1dpbmRvdz4gbV93aW5kb3c7Ci0gICAgUmV0YWluUHRyPFdLUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKLSAgICBIYXNoTWFwPFN0cmluZywgUmV0
YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsKLSAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgbV9zaGVldFJlY3Q7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShHVEspCi0gICAgR3Rr
V2lkZ2V0KiBtX3dlYlZpZXcgeyBudWxscHRyIH07Ci0gICAgR3RrV2lkZ2V0KiBtX3dpbmRvdyB7
IG51bGxwdHIgfTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKLSAgICBIV05EIG1f
ZnJvbnRlbmRIYW5kbGU7Ci0gICAgUmVmUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsKLSNlbmRpZgot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTA5MWI3OGZiNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4K
KysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclByb3h5IHsKLSAg
ICBGcm9udGVuZERpZENsb3NlKCkKLSAgICBSZW9wZW4oKQotICAgIFJlc2V0U3RhdGUoKQotICAg
IEJyaW5nVG9Gcm9udCgpCi0KLSAgICBTYXZlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRl
bnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKLSAgICBBcHBlbmQoU3Ry
aW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCkKLQotICAgIFNldFNoZWV0UmVjdChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKLQotICAgIFN0YXJ0V2luZG93RHJhZygpCi0KLSAgICBPcGVuSW5O
ZXdUYWIoU3RyaW5nIHVybCkKLSAgICBTaG93Q2VydGlmaWNhdGUoV2ViQ29yZTo6Q2VydGlmaWNh
dGVJbmZvIGNlcnRpZmljYXRlSW5mbykKLQotICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmlu
ZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk4MzkxYzQy
MGMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1zdHJ1Y3QgSGlnaGxpZ2h0OwotfQotCi1AaW50ZXJmYWNl
IFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldyA6IFVJVmlldyB7Ci0gICAgTlNNdXRhYmxlQXJyYXkg
Kl9sYXllcnM7IC8vIENBU2hhcGVMYXllcnMuCi19Ci0tICh2b2lkKXVwZGF0ZTooY29uc3QgV2Vi
Q29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQ7Ci1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVmMGMwM2UzMy4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCisrKyAvZGV2
L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIldLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIgotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLQotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yT3Zlcmxh
eS5oPgotCi1AaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBfbGF5ZXJzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNd
OwotICAgIFtfbGF5ZXJzIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAo
dm9pZClfcmVtb3ZlQWxsTGF5ZXJzCi17Ci0gICAgZm9yIChDQVNoYXBlTGF5ZXIgKmxheWVyIGlu
IF9sYXllcnMpCi0gICAgICAgIFtsYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgW19s
YXllcnMgcmVtb3ZlQWxsT2JqZWN0c107Ci19Ci0KLS0gKHZvaWQpX2NyZWF0ZUxheWVyczooTlNV
SW50ZWdlciludW1MYXllcnMKLXsKLSAgICBpZiAoW19sYXllcnMgY291bnRdID09IG51bUxheWVy
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107Ci0KLSAg
ICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgewotICAgICAgICBD
QVNoYXBlTGF5ZXIgKmxheWVyID0gW1tDQVNoYXBlTGF5ZXIgYWxsb2NdIGluaXRdOwotICAgICAg
ICBbX2xheWVycyBhZGRPYmplY3Q6bGF5ZXJdOwotICAgICAgICBbc2VsZi5sYXllciBhZGRTdWJs
YXllcjpsYXllcl07Ci0gICAgICAgIFtsYXllciByZWxlYXNlXTsKLSAgICB9Ci19Ci0KLXN0YXRp
YyBib29sIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHAxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwMiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgZDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGQyLCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pIAotewotICAgIC8vIERvIHRoZSBsaW5lcyBp
bnRlcnNlY3Q/Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Q
b2ludDsKLSAgICBpZiAoIWZpbmRJbnRlcnNlY3Rpb24ocDEsIHAyLCBkMSwgZDIsIHRlbXBvcmFy
eUludGVyc2VjdGlvblBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXMg
dGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIG9uIHRoZSBsaW5lPwotICAg
IGlmIChwMS54KCkgPj0gcDIueCgpKSB7Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rp
b25Qb2ludC54KCkgPiBwMS54KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpIDwg
cDIueCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPiBwMi54KCkgfHwgdGVtcG9yYXJ5
SW50ZXJzZWN0aW9uUG9pbnQueCgpIDwgcDEueCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAocDEueSgpID49IHAyLnkoKSkgewotICAgICAgICBpZiAodGVtcG9y
YXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpID4gcDEueSgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlv
blBvaW50LnkoKSA8IHAyLnkoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpID4gcDIueSgp
IHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA8IHAxLnkoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnRlcnNlY3Rpb24gPSB0ZW1wb3JhcnlJbnRl
cnNlY3Rpb25Qb2ludDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhpcyBxdWFkIGludGVy
c2VjdGlvbiB3b3JrcyBiZWNhdXNlIHRoZSB0d28gcXVhZHMgYXJlIGtub3duIHRvIGJlIGF0IHRo
ZSBzYW1lCi0vLyByb3RhdGlvbiBhbmQgY2xvY2t3aXNlLW5lc3MuCi1zdGF0aWMgV2ViQ29yZTo6
RmxvYXRRdWFkIHF1YWRJbnRlcnNlY3Rpb24oV2ViQ29yZTo6RmxvYXRRdWFkIGJvdW5kcywgV2Vi
Q29yZTo6RmxvYXRRdWFkIHRvQ2xhbXApCi17Ci0gICAgLy8gUmVzdWx0aW5nIHBvaW50cy4KLSAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IHAxLCBwMiwgcDMsIHA0OwotICAgIGJvb2wgY29udGFpbnNQ
b2ludDEgPSBmYWxzZTsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQyID0gZmFsc2U7Ci0gICAgYm9v
bCBjb250YWluc1BvaW50MyA9IGZhbHNlOwotICAgIGJvb2wgY29udGFpbnNQb2ludDQgPSBmYWxz
ZTsKLSAgICBib29sIGludGVyc2VjdEZvclBvaW50MSA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJz
ZWN0Rm9yUG9pbnQyID0gZmFsc2U7Ci0gICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDMgPSBmYWxz
ZTsKLSAgICBib29sIGludGVyc2VjdEZvclBvaW50NCA9IGZhbHNlOwotCi0gICAgLy8gVG9wIC8g
Ym90dG9tIHZlcnRpY2FsIGNsYW1waW5nLgotICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0
b0NsYW1wLnAxKCkpKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1ZTsKLSAgICAgICAg
cDEgPSB0b0NsYW1wLnAxKCk7Ci0gICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MSA9
IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMu
cDIoKSwgdG9DbGFtcC5wMSgpLCB0b0NsYW1wLnA0KCksIHAxKSkpCi0gICAgICAgIHAxID0gdG9D
bGFtcC5wMSgpOwotCi0gICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDIoKSkp
IHsKLSAgICAgICAgY29udGFpbnNQb2ludDIgPSB0cnVlOwotICAgICAgICBwMiA9IHRvQ2xhbXAu
cDIoKTsKLSAgICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQyID0gZmluZEludGVyc2Vj
dGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wMigpLCB0b0NsYW1w
LnAyKCksIHRvQ2xhbXAucDMoKSwgcDIpKSkKLSAgICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7Ci0K
LSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMygpKSkgewotICAgICAgICBj
b250YWluc1BvaW50MyA9IHRydWU7Ci0gICAgICAgIHAzID0gdG9DbGFtcC5wMygpOwotICAgIH0g
ZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDMgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0
d2VlblBvaW50cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDIoKSwgdG9DbGFt
cC5wMygpLCBwMykpKQotICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKLQotICAgIGlmIChib3Vu
ZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnA0KCkpKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQ0
ID0gdHJ1ZTsKLSAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7Ci0gICAgfSBlbHNlIGlmICghKGlu
dGVyc2VjdEZvclBvaW50NCA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJv
dW5kcy5wNCgpLCBib3VuZHMucDMoKSwgdG9DbGFtcC5wMSgpLCB0b0NsYW1wLnA0KCksIHA0KSkp
Ci0gICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOwotCi0gICAgLy8gSWYgb25seSBvbmUgb2YgdGhl
IHBvaW50cyBpbnRlcnNlY3RlZCBvbiBlaXRoZXIgdGhlIHRvcCBvciBib3R0b20gbGluZSB0aGVu
IHdlCi0gICAgLy8gY2FuIGNsYW1wIHRoZSBvdGhlciBwb2ludCBvbiB0aGF0IGxpbmUgdG8gdGhl
IGNvcm5lciBvZiB0aGUgYm91bmRzLgotICAgIGlmICghY29udGFpbnNQb2ludDEgJiYgaW50ZXJz
ZWN0Rm9yUG9pbnQyICYmICFpbnRlcnNlY3RGb3JQb2ludDEpIHsKLSAgICAgICAgY29udGFpbnNQ
b2ludDEgPSB0cnVlOwotICAgICAgICBwMSA9IGJvdW5kcy5wMSgpOwotICAgIH0gZWxzZSBpZiAo
IWNvbnRhaW5zUG9pbnQyICYmIGludGVyc2VjdEZvclBvaW50MSAmJiAhaW50ZXJzZWN0Rm9yUG9p
bnQyKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKLSAgICAgICAgcDIgPSBib3Vu
ZHMucDIoKTsKLSAgICB9Ci0gICAgaWYgKCFjb250YWluc1BvaW50NCAmJiBpbnRlcnNlY3RGb3JQ
b2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50NCkgewotICAgICAgICBjb250YWluc1BvaW50NCA9
IHRydWU7Ci0gICAgICAgIHA0ID0gYm91bmRzLnA0KCk7Ci0gICAgfSBlbHNlIGlmICghY29udGFp
bnNQb2ludDMgJiYgaW50ZXJzZWN0Rm9yUG9pbnQ0ICYmICFpbnRlcnNlY3RGb3JQb2ludDMpIHsK
LSAgICAgICAgY29udGFpbnNQb2ludDMgPSB0cnVlOwotICAgICAgICBwMyA9IGJvdW5kcy5wMygp
OwotICAgIH0KLQotICAgIC8vIE5vdyB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBob3Jpem9udGFs
IGNsYW1waW5nIGZvciB1bmFkanVzdGVkIHBvaW50cy4KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQy
ICYmICFpbnRlcnNlY3RGb3JQb2ludDIpCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVC
ZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMigpLCBib3VuZHMucDMoKSwgcDEsIHAyLCBwMik7Ci0gICAg
aWYgKCFjb250YWluc1BvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKQotICAgICAgICBmaW5k
SW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCks
IHA0LCBwMywgcDMpOwotICAgIGlmICghY29udGFpbnNQb2ludDEgJiYgIWludGVyc2VjdEZvclBv
aW50MSkKLSAgICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRz
LnAxKCksIGJvdW5kcy5wNCgpLCBwMSwgcDIsIHAxKTsKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQ0
ICYmICFpbnRlcnNlY3RGb3JQb2ludDQpCi0gICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVC
ZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwgcDQsIHAzLCBwNCk7Ci0KLSAg
ICByZXR1cm4gV2ViQ29yZTo6RmxvYXRRdWFkKHAxLCBwMiwgcDMsIHA0KTsKLX0KLQotc3RhdGlj
IHZvaWQgbGF5ZXJQYXRoV2l0aEhvbGUoQ0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgaG9sZVF1
YWQpCi17Ci0gICAgLy8gTm90aGluZyB0byBzaG93LgotICAgIGlmIChvdXRlclF1YWQgPT0gaG9s
ZVF1YWQgfHwgaG9sZVF1YWQuY29udGFpbnNRdWFkKG91dGVyUXVhZCkpIHsKLSAgICAgICAgbGF5
ZXIucGF0aCA9IE5VTEw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVy
ZSBpcyBhIG5lZ2F0aXZlIG1hcmdpbiAvIHBhZGRpbmcgdGhlbiB0aGUgb3V0ZXIgYm94IG1pZ2h0
IG5vdAotICAgIC8vIGZ1bGx5IGNvbnRhaW4gdGhlIGhvbGUgYm94LiBJbiBzdWNoIGNhc2VzIHdl
IHJlY2FsY3VsYXRlIHRoZSBob2xlIHRvCi0gICAgLy8gYmUgdGhlIGludGVyc2VjdGlvbiBvZiB0
aGUgdHdvIHF1YWRzLgotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBpbm5lckhvbGU7Ci0gICAgaWYg
KG91dGVyUXVhZC5jb250YWluc1F1YWQoaG9sZVF1YWQpKQotICAgICAgICBpbm5lckhvbGUgPSBo
b2xlUXVhZDsKLSAgICBlbHNlCi0gICAgICAgIGlubmVySG9sZSA9IHF1YWRJbnRlcnNlY3Rpb24o
b3V0ZXJRdWFkLCBob2xlUXVhZCk7Ci0KLSAgICAvLyBDbG9ja3dpc2UgaW5zaWRlIHJlY3QgKGhv
bGUpLCBDb3VudGVyLUNsb2Nrd2lzZSBvdXRzaWRlIHJlY3QgKGZpbGwpLgotICAgIENHTXV0YWJs
ZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLSAgICBDR1BhdGhNb3ZlVG9Q
b2ludChwYXRoLCAwLCBpbm5lckhvbGUucDEoKS54KCksIGlubmVySG9sZS5wMSgpLnkoKSk7Ci0g
ICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAyKCkueCgpLCBpbm5l
ckhvbGUucDIoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVy
SG9sZS5wMygpLngoKSwgaW5uZXJIb2xlLnAzKCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Q
b2ludChwYXRoLCAwLCBpbm5lckhvbGUucDQoKS54KCksIGlubmVySG9sZS5wNCgpLnkoKSk7Ci0g
ICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAxKCkueCgpLCBvdXRlclF1
YWQucDEoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVh
ZC5wNCgpLngoKSwgb3V0ZXJRdWFkLnA0KCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2lu
dChwYXRoLCAwLCBvdXRlclF1YWQucDMoKS54KCksIG91dGVyUXVhZC5wMygpLnkoKSk7Ci0gICAg
Q0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAyKCkueCgpLCBvdXRlclF1
YWQucDIoKS55KCkpOwotICAgIGxheWVyLnBhdGggPSBwYXRoOwotICAgIENHUGF0aFJlbGVhc2Uo
cGF0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxheWVyUGF0aChDQVNoYXBlTGF5ZXIgKmxheWVyLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCkKLXsKLSAgICBDR011dGFibGVQYXRo
UmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7Ci0gICAgQ0dQYXRoTW92ZVRvUG9pbnQo
cGF0aCwgMCwgb3V0ZXJRdWFkLnAxKCkueCgpLCBvdXRlclF1YWQucDEoKS55KCkpOwotICAgIENH
UGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wNCgpLngoKSwgb3V0ZXJRdWFk
LnA0KCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQu
cDMoKS54KCksIG91dGVyUXVhZC5wMygpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
cGF0aCwgMCwgb3V0ZXJRdWFkLnAyKCkueCgpLCBvdXRlclF1YWQucDIoKS55KCkpOwotICAgIGxh
eWVyLnBhdGggPSBwYXRoOwotICAgIENHUGF0aFJlbGVhc2UocGF0aCk7Ci19Ci0KLS0gKHZvaWQp
X2xheW91dEZvck5vZGVIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxp
Z2h0IG9mZnNldDoodW5zaWduZWQpb2Zmc2V0Ci17Ci0gICAgQVNTRVJUKFtfbGF5ZXJzIGNvdW50
XSA+PSBvZmZzZXQgKyA0KTsKLSAgICBBU1NFUlQoaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSA+PSBv
ZmZzZXQgKyA0KTsKLSAgICBpZiAoW19sYXllcnMgY291bnRdIDwgb2Zmc2V0ICsgNCB8fCBoaWdo
bGlnaHQucXVhZHMuc2l6ZSgpIDwgb2Zmc2V0ICsgNCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q0FTaGFwZUxheWVyICptYXJnaW5MYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0
XTsKLSAgICBDQVNoYXBlTGF5ZXIgKmJvcmRlckxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRl
eDpvZmZzZXQgKyAxXTsKLSAgICBDQVNoYXBlTGF5ZXIgKnBhZGRpbmdMYXllciA9IFtfbGF5ZXJz
IG9iamVjdEF0SW5kZXg6b2Zmc2V0ICsgMl07Ci0gICAgQ0FTaGFwZUxheWVyICpjb250ZW50TGF5
ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDNdOwotCi0gICAgV2ViQ29yZTo6
RmxvYXRRdWFkIG1hcmdpblF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0XTsKLSAgICBXZWJD
b3JlOjpGbG9hdFF1YWQgYm9yZGVyUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAxXTsK
LSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgcGFkZGluZ1F1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zm
c2V0ICsgMl07Ci0gICAgV2ViQ29yZTo6RmxvYXRRdWFkIGNvbnRlbnRRdWFkID0gaGlnaGxpZ2h0
LnF1YWRzW29mZnNldCArIDNdOwotCi0gICAgbWFyZ2luTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVk
Q0dDb2xvcihoaWdobGlnaHQubWFyZ2luQ29sb3IpOwotICAgIGJvcmRlckxheWVyLmZpbGxDb2xv
ciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmJvcmRlckNvbG9yKTsKLSAgICBwYWRkaW5nTGF5
ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQucGFkZGluZ0NvbG9yKTsKLSAg
ICBjb250ZW50TGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuY29udGVu
dENvbG9yKTsKLQotICAgIGxheWVyUGF0aFdpdGhIb2xlKG1hcmdpbkxheWVyLCBtYXJnaW5RdWFk
LCBib3JkZXJRdWFkKTsKLSAgICBsYXllclBhdGhXaXRoSG9sZShib3JkZXJMYXllciwgYm9yZGVy
UXVhZCwgcGFkZGluZ1F1YWQpOwotICAgIGxheWVyUGF0aFdpdGhIb2xlKHBhZGRpbmdMYXllciwg
cGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkKTsKLSAgICBsYXllclBhdGgoY29udGVudExheWVyLCBj
b250ZW50UXVhZCk7Ci19Ci0KLS0gKHZvaWQpX2xheW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0Oihj
b25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAotewotICAgIGlmICghaGlnaGxpZ2h0
LnF1YWRzLnNpemUoKSkgewotICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IGhpZ2hsaWdodC5x
dWFkcy5zaXplKCkgLyA0OwotICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bm9kZUNvdW50ICogNF07
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpCi0gICAgICAg
IFtzZWxmIF9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0OmhpZ2hsaWdodCBvZmZzZXQ6aSAqIDRdOwot
fQotCi0tICh2b2lkKV9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGln
aGxpZ2h0JiloaWdobGlnaHQKLXsKLSAgICBOU1VJbnRlZ2VyIG51bUxheWVycyA9IGhpZ2hsaWdo
dC5xdWFkcy5zaXplKCk7Ci0gICAgaWYgKCFudW1MYXllcnMpIHsKLSAgICAgICAgW3NlbGYgX3Jl
bW92ZUFsbExheWVyc107Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBbc2VsZiBfY3Jl
YXRlTGF5ZXJzOm51bUxheWVyc107Ci0KLSAgICBDR0NvbG9yUmVmIGNvbnRlbnRDb2xvciA9IGNh
Y2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7Ci0gICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKLSAgICAgICAgQ0FTaGFwZUxheWVyICpsYXll
ciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGxheWVyLmZpbGxDb2xvciA9
IGNvbnRlbnRDb2xvcjsKLSAgICAgICAgbGF5ZXJQYXRoKGxheWVyLCBoaWdobGlnaHQucXVhZHNb
aV0pOwotICAgIH0KLX0KLQotLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdo
dCYpaGlnaGxpZ2h0Ci17Ci0gICAgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hs
aWdodFR5cGU6Ok5vZGUgfHwgaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlw
ZTo6Tm9kZUxpc3QpCi0gICAgICAgIFtzZWxmIF9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDpo
aWdobGlnaHRdOwotICAgIGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hs
aWdodFR5cGU6OlJlY3RzKQotICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6
aGlnaGxpZ2h0XTsKLX0KLQotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjNkNzA1ZTgzZTcuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
Ykluc3BlY3RvclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24u
aCIKLSNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJB
UElVSUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkF1dG9tYXRpb25TZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV2ViRnJhbWVQcm94eS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvck1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rv
clVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2lu
Y2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRl
SW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0RW5jb2RpbmcuaD4KLSNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KLQotI2lmIFBM
QVRGT1JNKEdUSykKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNvbnN0
IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93V2lkdGggPSA1MDA7Ci1j
b25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd0hlaWdodCA9IDQw
MDsKLQotY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0
aCA9IDEwMDA7Ci1jb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRv
d0hlaWdodCA9IDY1MDsKLQotV2ViSW5zcGVjdG9yUHJveHk6OldlYkluc3BlY3RvclByb3h5KFdl
YlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKLSNpZiBQTEFURk9STShNQUMpCi0gICAgOiBtX2Ns
b3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZX
ZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQp
Ci0jZW5kaWYKLXsKLSAgICBpZiAoaW5zcGVjdGVkUGFnZSAmJiBpbnNwZWN0ZWRQYWdlLT5oYXNS
dW5uaW5nUHJvY2VzcygpKSB7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBh
Z2U7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9p
bnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotICAgIH0KLX0KLQotV2ViSW5zcGVj
dG9yUHJveHk6On5XZWJJbnNwZWN0b3JQcm94eSgpCi17Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0aW9uTGV2ZWwoKSBjb25zdAotewotICAgIHJldHVybiBpbnNwZWN0
b3JMZXZlbEZvclBhZ2UoaW5zcGVjdGVkUGFnZSgpKTsKLX0KLQotV2ViUHJlZmVyZW5jZXMmIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdAotewotICAg
IEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAgIHJldHVybiBtX2luc3BlY3RvclBhZ2UtPnBh
Z2VHcm91cCgpLnByZWZlcmVuY2VzKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Omlu
dmFsaWRhdGUoKQotewotICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIG1faW5zcGVj
dGVkUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQ
YWdlSUQoKSk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotICAgIHBsYXRm
b3JtSW52YWxpZGF0ZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlID0gbnVsbHB0cjsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKLX0KLQotLy8gUHVibGljIEFQSXMKLWJv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzRnJvbnQoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1Jc0Zyb250
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNvbm5lY3QoKQotewotICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zaG93TWVzc2Fn
ZVNlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gdHJ1ZTsK
LSAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gdHJ1ZTsKLQotICAgIGNyZWF0ZUZyb250
ZW5kUGFnZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpLCAwKTsK
LSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvdygp
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCi17Ci0gICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7
Ci0gICAgICAgIGJyaW5nVG9Gcm9udCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29ubmVjdCgpOwotCi0gICAgLy8gRG9uJ3QgaWdub3JlIHRoZSBmaXJzdCBicmluZ1RvRnJvbnQg
c28gaXQgb3BlbnMgdGhlIEluc3BlY3Rvci4KLSAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250
ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmhpZGUoKQotewotICAgIGlm
ICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzVmlzaWJsZSA9
IGZhbHNlOwotCi0gICAgcGxhdGZvcm1IaWRlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OkNs
b3NlKCkpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgY2xvc2UoKTsKLQotICAg
IHBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFzaCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpyZW9wZW4oKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjbG9zZSgpOwotICAgIHNob3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRl
SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKTsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5kZWxldGVJbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7Ci0gICAgaW5zcGVjdG9yUGFnZVByZWZl
cmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKTsKLSAgICBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOwotICAgIGlu
c3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7Ci0K
LSAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cmVzZXQoKQotewotICAgIGlmIChtX2luc3BlY3RlZFBhZ2UpIHsKLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBh
Z2VJRCgpKTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQ
cm94eSogaW5zcGVjdGVkUGFnZSkKLXsKLSAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7Ci0g
ICAgQVNTRVJUKGluc3BlY3RlZFBhZ2UpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVj
dGVkUGFnZTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKLQotICAgIGlmIChtX2luc3BlY3Rv
clBhZ2UpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24oKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZp
ZXIpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRGcm9udGVu
ZENvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvd0NvbnNvbGUoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAgIG1faW5zcGVj
dGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93Q29uc29sZSgpKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd1Jlc291cmNlcygpCi17Ci0gICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFn
ZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlNob3dSZXNvdXJjZXMoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dNYWlu
UmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSkKLXsKLSAgICBpZiAoIW1faW5z
cGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7
Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hv
d01haW5SZXNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFtZUlEKCkpKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6YXR0YWNoQm90dG9tKCkKLXsKLSAgICBhdHRhY2goQXR0YWNobWVudFNp
ZGU6OkJvdHRvbSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaFJpZ2h0KCkK
LXsKLSAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OlJpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YXR0YWNoTGVmdCgpCi17Ci0gICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpM
ZWZ0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRl
IHNpZGUpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UgfHwgIWNhbkF0dGFjaCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2lzQXR0YWNoZWQgPSB0cnVlOwotICAgIG1fYXR0YWNobWVu
dFNpZGUgPSBzaWRlOwotCi0gICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVj
dG9yQXR0YWNobWVudFNpZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNpZGUpKTsKLQotICAgIGlm
IChtX2lzVmlzaWJsZSkKLSAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWQodHJ1ZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSkpOwotCi0gICAgc3dpdGNo
IChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgot
ICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpB
dHRhY2hlZEJvdHRvbSgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpSaWdodDoKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEF0dGFjaG1lbnRTaWRlOjpMZWZ0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHBsYXRmb3JtQXR0YWNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OmRldGFjaCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwotCi0gICAgaWYgKG1faXNWaXNpYmxlKQot
ICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZChmYWxzZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFsc2UpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKLQotICAgIHBsYXRmb3JtRGV0
YWNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5z
ZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChoZWlnaHQpOwotICAgIHBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBpbnNwZWN0b3JQYWdl
UHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hlZFdpZHRoKHdpZHRoKTsKLSAgICBwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHBsYXRm
b3JtU2V0U2hlZXRSZWN0KHJlY3QpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzdGFy
dFdpbmRvd0RyYWcoKQotewotICAgIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2dsZVBhZ2VQcm9maWxpbmcoKQotewotICAgIGlmICgh
bV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1Byb2ZpbGlu
Z1BhZ2UpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTdG9wUGFnZVByb2ZpbGluZygpKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdGFydFBhZ2VQcm9maWxpbmcoKSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKQot
ewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlKSB7Ci0gICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVj
dGlvbkNoYW5nZSA9IHRydWU7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTdG9wRWxlbWVudFNlbGVjdGlvbigpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBjb25uZWN0KCk7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSk7Ci0gICAgfQotfQotCi1i
b29sIFdlYkluc3BlY3RvclByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVS
TCYgdXJsKQotewotICAgIC8vIFVzZSBVUkwgc28gd2UgY2FuIGNvbXBhcmUgdGhlIHBhdGhzIGFu
ZCBwcm90b2NvbHMuCi0gICAgVVJMIG1haW5QYWdlVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yUGFnZVVSTCgpKTsKLSAgICBpZiAodXJsLnByb3RvY29sKCkgPT0gbWFpblBh
Z2VVUkwucHJvdG9jb2woKSAmJiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkg
PT0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1haW5QYWdlVVJMLnBhdGgoKSkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0IFVSTCBpbiBQ
cm9kdWN0aW9uIGJ1aWxkcy4KLSAgICBTdHJpbmcgdGVzdFBhZ2VVUkxTdHJpbmcgPSBXZWJJbnNw
ZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKTsKLSAgICBpZiAodGVzdFBhZ2VVUkxT
dHJpbmcuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFVSTCB0ZXN0UGFn
ZVVSTChVUkwoKSwgdGVzdFBhZ2VVUkxTdHJpbmcpOwotICAgIHJldHVybiB1cmwucHJvdG9jb2wo
KSA9PSB0ZXN0UGFnZVVSTC5wcm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1
cmwucGF0aCgpKSA9PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModGVzdFBhZ2VVUkwucGF0aCgp
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsK
LSAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3Bl
Y3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpOwotICAgIEFTU0VSVChtX2lu
c3BlY3RvclBhZ2UpOwotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlLCBtX2luc3BlY3RlZFBh
Z2UpOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lu
c3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgKnRoaXMpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwoKm1faW5zcGVjdG9yUGFnZSwgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29s
IHVuZGVyVGVzdCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmhhc0xv
Y2FsRnJvbnRlbmQoKSkgewotICAgICAgICBzaG93KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsKLSAgICBjcmVhdGVGcm9udGVuZFBhZ2Uo
KTsKLQotICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOwotICAgIGlmICghbV9pbnNwZWN0b3JQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpFc3RhYmxpc2hDb25uZWN0aW9uKG1faW5zcGVjdGVkUGFnZS0+
aWRlbnRpZmllcigpLCBpbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCksIG1fdW5kZXJUZXN0LCBpbnNw
ZWN0aW9uTGV2ZWwoKSkpOwotCi0gICAgQVNTRVJUKCFtX2lzQWN0aXZlRnJvbnRlbmQpOwotICAg
IG1faXNBY3RpdmVGcm9udGVuZCA9IHRydWU7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKLQotICAgIGlmICghbV91bmRl
clRlc3QpIHsKLSAgICAgICAgbV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRh
Y2gpOwotICAgICAgICBtX2lzQXR0YWNoZWQgPSBzaG91bGRPcGVuQXR0YWNoZWQoKTsKLSAgICAg
ICAgbV9hdHRhY2htZW50U2lkZSA9IHN0YXRpY19jYXN0PEF0dGFjaG1lbnRTaWRlPihpbnNwZWN0
b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpKTsKLQotICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNo
ZWQobV9pc0F0dGFjaGVkKSk7Ci0KLSAgICAgICAgaWYgKG1faXNBdHRhY2hlZCkgewotICAgICAg
ICAgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7Ci0gICAgICAgICAgICBjYXNlIEF0dGFj
aG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0Ogot
ICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgICAgICAgICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OkRldGFjaGVkKCkpOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsK
LSAgICB9Ci0KLSAgICAvLyBOb3RpZnkgV2ViS2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVj
dG9yIGF0dGFjaGVzIHNvIHRoYXQgaXQgbWF5IGluc3RhbGwgZGVsZWdhdGVzIHByaW9yIHRvIHRo
ZSBfV0tJbnNwZWN0b3IgbG9hZGluZyBpdHMgZnJvbnRlbmQuCi0gICAgbV9pbnNwZWN0ZWRQYWdl
LT51aUNsaWVudCgpLmRpZEF0dGFjaEluc3BlY3RvcigqbV9pbnNwZWN0ZWRQYWdlLCAqdGhpcyk7
Ci0KLSAgICAvLyBCYWlsIG91dCBpZiB0aGUgY2xpZW50IGNsb3NlZCB0aGUgaW5zcGVjdG9yIGZy
b20gdGhlIGRlbGVnYXRlIG1ldGhvZC4KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCks
IG1fdW5kZXJUZXN0ID8gV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkg
OiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6Om9wZW4oKQotewotICAgIGlmIChtX3VuZGVyVGVzdCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFNldEZvclNjb3BlPGJvb2w+IGlzT3BlbmluZyhtX2lzT3BlbmluZywgdHJ1ZSk7Ci0gICAg
bV9pc1Zpc2libGUgPSB0cnVlOwotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOwotCi0gICAgaWYgKG1f
aXNBdHRhY2hlZCkKLSAgICAgICAgcGxhdGZvcm1BdHRhY2goKTsKLSAgICBlbHNlCi0gICAgICAg
IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsKLQotICAgIHBsYXRmb3JtQnJpbmdUb0Zy
b250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmRpZENsb3NlKCkKLXsKLSAgICBj
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RvclBh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNWaXNpYmxlID0gZmFsc2U7Ci0gICAgbV9p
c1Byb2ZpbGluZ1BhZ2UgPSBmYWxzZTsKLSAgICBtX3Nob3dNZXNzYWdlU2VudCA9IGZhbHNlOwot
ICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKLQotICAgIHVudHJhY2tJbnNw
ZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKLSAg
ICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVk
UGFnZS0+aWRlbnRpZmllcigpKTsKLQotICAgIGlmIChtX2lzQWN0aXZlRnJvbnRlbmQpIHsKLSAg
ICAgICAgbV9pc0FjdGl2ZUZyb250ZW5kID0gZmFsc2U7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqdGhpcyk7Ci0gICAg
fQotCi0gICAgaWYgKG1faXNBdHRhY2hlZCkKLSAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKLQot
ICAgIC8vIE51bGwgb3V0IG1faW5zcGVjdG9yUGFnZSBhZnRlciBwbGF0Zm9ybURldGFjaCgpLCBz
byB0aGUgdmlld3MgY2FuIGJlIGNsZWFuZWQgdXAgY29ycmVjdGx5LgotICAgIG1faW5zcGVjdG9y
UGFnZSA9IG51bGxwdHI7Ci0KLSAgICBtX2lzQXR0YWNoZWQgPSBmYWxzZTsKLSAgICBtX2NhbkF0
dGFjaCA9IGZhbHNlOwotICAgIG1fdW5kZXJUZXN0ID0gZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybUNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3Nh
Z2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpmcm9udGVuZExvYWRlZCgpCi17Ci0g
ICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRv
KiBhdXRvbWF0aW9uU2Vzc2lvbiA9IG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkKLSAgICAgICAgYXV0b21hdGlvblNlc3Npb24tPmlu
c3BlY3RvckZyb250ZW5kTG9hZGVkKCptX2luc3BlY3RlZFBhZ2UpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQoKQotewotICAgIC8vIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwgdGVsbHMgdXMgdG8gZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50
IHRvCi0gICAgLy8gaWdub3JlIGl0IG9uY2UgaWYgd2Ugb25seSB3YW50ZWQgdG8gY29ubmVjdC4g
VGhpcyBhbGxvd3MgdGhlIEluc3BlY3RvciB0byBsYXRlcgotICAgIC8vIHJlcXVlc3QgdG8gYmUg
YnJvdWdodCB0byB0aGUgZnJvbnQgd2hlbiBhIGJyZWFrcG9pbnQgaXMgaGl0IG9yIHNvbWUgb3Ro
ZXIgYWN0aW9uLgotICAgIGlmIChtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250KSB7Ci0gICAgICAg
IG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX2lzVmlzaWJsZSkKLSAgICAgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQo
KTsKLSAgICBlbHNlCi0gICAgICAgIG9wZW4oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgcGxhdGZvcm1CcmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2
YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgYm9vbCBwcmV2aW91c0Nh
bkF0dGFjaCA9IG1fY2FuQXR0YWNoOwotCi0gICAgbV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0
dGFjaChhdmFpbGFibGUpOwotCi0gICAgaWYgKHByZXZpb3VzQ2FuQXR0YWNoID09IG1fY2FuQXR0
YWNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JQYWdlICYmICFtX3Vu
ZGVyVGVzdCkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwotCi0gICAgcGxh
dGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKG1fY2FuQXR0YWNoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKLXsKLSAgICBwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQotewotICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRl
KGNlcnRpZmljYXRlSW5mbyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVsZW1lbnRT
ZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIG1fZWxlbWVudFNlbGVjdGlvbkFj
dGl2ZSA9IGFjdGl2ZTsKLQotICAgIGlmIChtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2Up
IHsKLSAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7Ci0gICAg
ICAgIGlmICghbV9pc1Zpc2libGUpCi0gICAgICAgICAgICBjbG9zZSgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGFjdGl2ZSkKLSAgICAgICAgcGxhdGZvcm1CcmluZ0luc3Bl
Y3RlZFBhZ2VUb0Zyb250KCk7Ci0gICAgZWxzZSBpZiAoaXNDb25uZWN0ZWQoKSkKLSAgICAgICAg
YnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRpbWVsaW5lUmVj
b3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGFj
dGl2ZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0TW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJp
ZGUoZW5hYmxlZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKLSNlbmRpZgot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJs
ZShib29sIGF2YWlsYWJsZSkKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAg
ICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQ
YWdlLT53ZWJQYWdlSUQoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOwot
I2VuZGlmCi19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNhdmUoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlQXMpCi17Ci0gICAgcGxhdGZvcm1TYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNl
NjRFbmNvZGVkLCBmb3JjZVNhdmVBcyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmFw
cGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0g
ICAgcGxhdGZvcm1BcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpOwotfQotCi1ib29sIFdlYkluc3Bl
Y3RvclByb3h5OjpzaG91bGRPcGVuQXR0YWNoZWQoKQotewotICAgIHJldHVybiBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpICYmIGNhbkF0dGFjaCgp
OwotfQotCi0vLyBVbnN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBw
cm92aWRlZCBoZXJlLgotCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYg
IVBMQVRGT1JNKFdJTikKLQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtRGlkQ2xvc2VGb3JDcmFzaCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3Rh
dGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJv
bnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlm
aWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBi
b29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hl
aWdodCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5z
aWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBG
bG9hdFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3Rv
clByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykg
JiYgIVBMQVRGT1JNKFdJTikKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmIxZmRmY2ExZGYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiQXR0YWNobWVudC5oIgotI2lu
Y2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgotI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShNQUMp
Ci0jaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNTIE5T
VmlldzsKLU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLV2ViSW5zcGVjdG9yUHJv
eHlPYmpDQWRhcHRlcjsKLU9CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLSNl
bGlmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViRnJhbWVQcm94eTsKLWNsYXNzIFdlYkluc3BlY3RvclByb3h5Q2xp
ZW50OwotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJlZmVyZW5jZXM7Ci0KLWVudW0g
Y2xhc3MgQXR0YWNobWVudFNpZGUgewotICAgIEJvdHRvbSwKLSAgICBSaWdodCwKLSAgICBMZWZ0
LAotfTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKLSAgICA6IHB1YmxpYyBBUEk6Ok9iamVj
dEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KLSAgICAsIHB1YmxpYyBJUEM6Ok1l
c3NhZ2VSZWNlaXZlcgotICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0
ZW5lcgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JQcm94
eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3BlY3RlZFBhZ2UpKTsKLSAg
ICB9Ci0KLSAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgp
OwotCi0gICAgLy8gUHVibGljIEFQSXMKLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KLSAgICBXZWJQYWdlUHJveHkqIGlu
c3BlY3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2U7IH0KLQotICAgIGJv
b2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVjdG9yUGFnZTsgfQotICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0KLSAgICBib29s
IGlzRnJvbnQoKTsKLQotICAgIHZvaWQgY29ubmVjdCgpOwotCi0gICAgdm9pZCBzaG93KCk7Ci0g
ICAgdm9pZCBoaWRlKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgY2xvc2VGb3JDcmFz
aCgpOwotICAgIHZvaWQgcmVvcGVuKCk7Ci0gICAgdm9pZCByZXNldFN0YXRlKCk7Ci0KLSAgICB2
b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJv
eHkqKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBlbnVtIGNsYXNzIEluc3BlY3Rpb25UYXJn
ZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNXaW5kb3c+
IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9u
VGFyZ2V0VHlwZSk7Ci0KLSAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29u
c3Q7Ci0gICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCA9IDApOwot
ICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB2b2lkIHdpbmRvd0Z1bGxTY3Jl
ZW5EaWRDaGFuZ2UoKTsKLSAgICBOU1dpbmRvdyogaW5zcGVjdG9yV2luZG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KLQotICAgIHZvaWQgY2xvc2VGcm9udGVu
ZFBhZ2UoKTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVk
KCk7Ci0KLSAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywg
TlNWaWV3ICpuZXdWaWV3KTsKLSAgICB2b2lkIGF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3co
TlNXaW5kb3cgKm9sZFdpbmRvdyk7Ci0gICAgdm9pZCBhdHRhY2htZW50RGlkTW92ZVRvV2luZG93
KE5TV2luZG93ICpuZXdXaW5kb3cpOwotCi0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
aGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShHVEspCi0gICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3KCkgY29uc3QgeyByZXR1
cm4gbV9pbnNwZWN0b3JWaWV3OyB9OwotICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2hvd0Nv
bnNvbGUoKTsKLSAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNob3dNYWluUmVz
b3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7Ci0KLSAgICBBdHRhY2htZW50U2lkZSBhdHRh
Y2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0KLSAgICBib29s
IGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KLSAgICB2b2lkIGF0
dGFjaFJpZ2h0KCk7Ci0gICAgdm9pZCBhdHRhY2hMZWZ0KCk7Ci0gICAgdm9pZCBhdHRhY2hCb3R0
b20oKTsKLSAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpC
b3R0b20pOwotICAgIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQpOwotCi0gICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
Ci0KLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwotCi0gICAgYm9vbCBpc1Byb2ZpbGluZ1Bh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQotICAgIHZvaWQgdG9nZ2xl
UGFnZVByb2ZpbGluZygpOwotCi0gICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KLSAgICB2b2lkIHRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24oKTsKLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJl
dHVybiBtX3VuZGVyVGVzdDsgfQotCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWls
YWJsZShib29sKTsKLQotICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYkluc3BlY3RvclBy
b3h5IGltcGxlbWVudGF0aW9ucy4KLSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclBhZ2VVUkwo
KTsKLSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJMKCk7Ci0gICAgc3RhdGlj
IFN0cmluZyBpbnNwZWN0b3JCYXNlVVJMKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0
SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmKTsKLSAgICBzdGF0aWMgRGVidWdnYWJsZUluZm9EYXRh
IGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
aW5pbXVtV2luZG93V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5k
b3dIZWlnaHQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd1dpZHRo
OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0OwotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSopOwotCi0g
ICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdl
QW5kV2luZG93KCk7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
Ci0KLSAgICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAgQ29ubmVj
dGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb25uZWN0
aW9uVHlwZTo6TG9jYWw7IH0KLQotICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFBhZ2UoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsKLSAg
ICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIHZvaWQg
cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUo
KTsKLSAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1Ccmlu
Z1RvRnJvbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgp
OwotICAgIHZvaWQgcGxhdGZvcm1IaWRlKCk7Ci0gICAgYm9vbCBwbGF0Zm9ybUlzRnJvbnQoKTsK
LSAgICB2b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2
b2lkIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lk
IHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
OwotICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCk7Ci0gICAgdW5z
aWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOwotICAgIHZvaWQgcGxhdGZvcm1B
dHRhY2goKTsKLSAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5k
b3dEcmFnKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
QXMpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIHBsYXRm
b3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7Ci0jZWxzZQotICAgIGJvb2wg
cGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKSB7IHJldHVybiB3ZWJQ
cm9jZXNzQ2FuQXR0YWNoOyB9Ci0jZW5kaWYKLQotICAgIC8vIENhbGxlZCBieSBXZWJJbnNwZWN0
b3JQcm94eSBtZXNzYWdlcwotICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9v
bCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKLSAgICB2b2lkIHNldEZyb250ZW5kQ29ubmVj
dGlvbihJUEM6OkF0dGFjaG1lbnQpOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7Ci0gICAgdm9pZCBkaWRD
bG9zZSgpOwotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBicmluZ0luc3BlY3Rl
ZFBhZ2VUb0Zyb250KCk7Ci0gICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wp
OwotICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lk
IHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB2
b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKLQotICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50KTsKLQotICAgIGJvb2wgY2FuQXR0YWNoKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW5BdHRhY2g7IH0KLSAgICBib29sIHNob3VsZE9wZW5BdHRhY2hlZCgpOwotCi0g
ICAgdm9pZCBvcGVuKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25zdDsK
LQotICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdDsK
LQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQotICAgIHZvaWQgdXBkYXRlSW5z
cGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQot
ICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOwotICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwotICAgIHZvaWQgd2luZG93
UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKSBvdmVycmlkZTsKLSNl
bmRpZgotCi0gICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2UgeyBudWxscHRyIH07Ci0g
ICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07Ci0KLSAgICBib29s
IG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNWaXNpYmxlIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2NhbkF0dGFjaCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lnbm9yZUZpcnN0QnJp
bmdUb0Zyb250IHsgZmFsc2UgfTsKLSAgICBib29sIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0FjdGl2
ZUZyb250ZW5kIHsgZmFsc2UgfTsKLQotICAgIEF0dGFjaG1lbnRTaWRlIG1fYXR0YWNobWVudFNp
ZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJl
dGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXdDb250cm9s
bGVyOwotICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JXaW5kb3c7Ci0gICAgUmV0
YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKLSAg
ICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcDsKLSAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94eT4gbV9jbG9zZUZyb250
ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7Ci0gICAgU3RyaW5nIG1fdXJsU3RyaW5nOwotICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKLSAgICBib29sIG1faXNPYnNlcnZpbmdDb250
ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVudDsKLSAgICBHdGtXaWRn
ZXQqIG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1faW5zcGVj
dG9yV2luZG93IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV9oZWFkZXJCYXIgeyBudWxs
cHRyIH07Ci0gICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOwotI2VsaWYgUExBVEZPUk0o
V0lOKQotICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhX
TkQgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9p
bnNwZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0b3JEZXRh
Y2hXaW5kb3cgeyBudWxscHRyIH07Ci0gICAgUmVmUHRyPFdlYlZpZXc+IG1faW5zcGVjdG9yVmll
dzsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmI3NzU1M2M2Yi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KKysrIC9k
ZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclByb3h5IHsKLSAgICBPcGVu
TG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCi0g
ICAgU2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRp
ZmllcikKLQotICAgIFNlbmRNZXNzYWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQotCi0gICAg
RnJvbnRlbmRMb2FkZWQoKQotICAgIERpZENsb3NlKCkKLSAgICBCcmluZ1RvRnJvbnQoKQotICAg
IEJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotICAgIFJlb3BlbigpCi0gICAgUmVzZXRTdGF0
ZSgpCi0KLSAgICBJbnNwZWN0ZWRVUkxDaGFuZ2VkKFN0cmluZyB1cmxTdHJpbmcpCi0gICAgU2hv
d0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8pCi0g
ICAgRWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi0gICAgVGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotICAgIFNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQotCi0gICAgU2F2ZShTdHJpbmcgZmls
ZW5hbWUsIFN0cmluZyBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
QXMpCi0gICAgQXBwZW5kKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQpCi0KLSAgICBB
dHRhY2hCb3R0b20oKQotICAgIEF0dGFjaFJpZ2h0KCkKLSAgICBBdHRhY2hMZWZ0KCkKLSAgICBE
ZXRhY2goKQotCi0gICAgQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkK
LQotICAgIFNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLSAgICBTZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotCi0gICAgU2V0U2hlZXRSZWN0KFdl
YkNvcmU6OkZsb2F0UmVjdCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmVhMTVlZTY1Ny4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiQVBJUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlTnVtYmVycy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdHlwZWRlZiBIYXNoTWFw
PFdlYlBhZ2VQcm94eSosIHVuc2lnbmVkPiBQYWdlTGV2ZWxNYXA7Ci0KLXN0YXRpYyBQYWdlTGV2
ZWxNYXAmIHBhZ2VMZXZlbE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBhZ2VM
ZXZlbE1hcD4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXVuc2lnbmVkIGluc3BlY3Rvckxl
dmVsRm9yUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2UpIHsKLSAgICAg
ICAgYXV0byBmaW5kUmVzdWx0ID0gcGFnZUxldmVsTWFwKCkuZmluZChwYWdlKTsKLSAgICAgICAg
aWYgKGZpbmRSZXN1bHQgIT0gcGFnZUxldmVsTWFwKCkuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmluZFJlc3VsdC0+dmFsdWUgKyAxOwotICAgIH0KLQotICAgIHJldHVybiAxOwotfQotCi1T
dHJpbmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5KiBw
YWdlKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJfX1dlYkluc3BlY3RvclBhZ2VHcm91cExl
dmVsIiwgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKHBhZ2UpLCAiX18iKTsKLX0KLQotdm9pZCB0cmFj
a0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlLCBXZWJQYWdlUHJveHkq
IGluc3BlY3RlZFBhZ2UpCi17Ci0gICAgcGFnZUxldmVsTWFwKCkuc2V0KGluc3BlY3RvclBhZ2Us
IGluc3BlY3RvckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKSk7Ci19Ci0KLXZvaWQgdW50cmFj
a0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKQotewotICAgIHBhZ2VM
ZXZlbE1hcCgpLnJlbW92ZShpbnNwZWN0b3JQYWdlKTsKLX0KLQotc3RhdGljIFdlYlByb2Nlc3NQ
b29sKiBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbDsKLXN0YXRpYyBXZWJQcm9jZXNzUG9vbCog
c19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbDsKLQotV2ViUHJvY2Vzc1Bvb2wmIGluc3BlY3Rv
clByb2Nlc3NQb29sKHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKLXsKLSAgICAvLyBIYXZpbmcg
b3VyIG93biBwcm9jZXNzIHBvb2wgcmVtb3ZlcyB1cyBmcm9tIHRoZSBtYWluIHByb2Nlc3MgcG9v
bCBhbmQKLSAgICAvLyBndWFyYW50ZWVzIG5vIHByb2Nlc3Mgc2hhcmluZyBmb3Igb3VyIHVzZXIg
aW50ZXJmYWNlLgotICAgIFdlYlByb2Nlc3NQb29sKiYgcG9vbCA9IChpbnNwZWN0aW9uTGV2ZWwg
PT0gMSkgPyBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCA6IHNfbmVzdGVkSW5zcGVjdG9yUHJv
Y2Vzc1Bvb2w7Ci0gICAgaWYgKCFwb29sKSB7Ci0gICAgICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcG9vbCA9
ICZXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24uZ2V0KCkpLmxlYWtSZWYoKTsK
LSAgICAgICAgLy8gRG8gbm90IGRlbGF5IHByb2Nlc3MgbGF1bmNoIGZvciBpbnNwZWN0b3IgcGFn
ZXMgYXMgaW5zcGVjdG9yIHBhZ2VzIGRvIG5vdCBrbm93IGhvdyB0byB0cmFuc2l0aW9uIGZyb20g
YSB0ZXJtaW5hdGVkIHByb2Nlc3MuCi0gICAgICAgIHBvb2wtPmRpc2FibGVEZWxheWVkV2ViUHJv
Y2Vzc0xhdW5jaCgpOwotICAgIH0KLSAgICByZXR1cm4gKnBvb2w7Ci19Ci0KLWJvb2wgaXNJbnNw
ZWN0b3JQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCi17Ci0gICAgcmV0
dXJuIChzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCAmJiBzX21haW5JbnNwZWN0b3JQcm9jZXNz
UG9vbCA9PSAmcHJvY2Vzc1Bvb2wpCi0gICAgICAgIHx8IChzX25lc3RlZEluc3BlY3RvclByb2Nl
c3NQb29sICYmIHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQb29sKTsK
LX0KLQotYm9vbCBpc0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQotewotICAg
IHJldHVybiBwYWdlTGV2ZWxNYXAoKS5jb250YWlucygmd2ViUGFnZSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5z
cGVjdG9yVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JV
dGlsaXRpZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5ZWE3NTg4Y2MuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxp
dGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKLQot
Ly8gVGhlIGluc3BlY3RvciBwYWdlIGdyb3VwcyBhcmUgdXNlZCB0byBnaXZlIGRpZmZlcmVudCBw
cmVmZXJlbmNlcyB0byBlYWNoCi0vLyBpbnNwZWN0b3IgbGV2ZWwgYnkgc2V0dGluZyBhIHBlci1s
ZXZlbCBwYWdlIGdyb3VwIGlkZW50aWZpZXIuCi11bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBh
Z2UoV2ViUGFnZVByb3h5Kik7Ci1TdHJpbmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZv
clBhZ2UoV2ViUGFnZVByb3h5Kik7Ci12b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJv
eHkqIGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSk7Ci12b2lkIHVu
dHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSk7Ci0KLVdlYlBy
b2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwp
OwotYm9vbCBpc0luc3BlY3RvclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJik7Ci1ib29sIGlz
SW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmKTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiZWJiZGY4N2FjZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZURlYnVnZ2FibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZURlYnVnZ2FibGUuaCIKLQotI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgotI2luY2x1ZGUgIldl
YlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1XZWJQ
YWdlRGVidWdnYWJsZTo6V2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVByb3h5JiBwYWdlKQotICAg
IDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLVN0cmluZyBXZWJQYWdlRGVidWdnYWJsZTo6bmFtZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX25hbWVPdmVycmlkZS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG1fbmFtZU92ZXJyaWRlOwotCi0gICAgaWYgKCFtX3BhZ2UubWFpbkZyYW1lKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBtX3BhZ2UubWFpbkZyYW1lKCktPnRp
dGxlKCk7Ci19Ci0KLVN0cmluZyBXZWJQYWdlRGVidWdnYWJsZTo6dXJsKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6YmxhbmtVUkwo
KS5zdHJpbmcoKTsKLQotICAgIFN0cmluZyB1cmwgPSBtX3BhZ2UubWFpbkZyYW1lKCktPnVybCgp
LnN0cmluZygpOwotICAgIGlmICh1cmwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGOjpi
bGFua1VSTCgpLnN0cmluZygpOwotCi0gICAgcmV0dXJuIHVybDsKLX0KLQotYm9vbCBXZWJQYWdl
RGVidWdnYWJsZTo6aGFzTG9jYWxEZWJ1Z2dlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFn
ZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuaGFzTG9jYWxGcm9udGVuZCgpOwotfQotCi12b2lkIFdl
YlBhZ2VEZWJ1Z2dhYmxlOjpjb25uZWN0KEZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCwgYm9vbCBp
c0F1dG9tYXRpY0Nvbm5lY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSkKLXsKLSAgICBtX3Bh
Z2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZChjaGFubmVsLCBpc0F1dG9t
YXRpY0Nvbm5lY3Rpb24sIGltbWVkaWF0ZWx5UGF1c2UpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1
Z2dhYmxlOjpkaXNjb25uZWN0KEZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKLXsKLSAgICBtX3Bh
Z2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZChjaGFubmVsKTsKLX0K
LQotdm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6ZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5k
aXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZURl
YnVnZ2FibGU6OnNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5nKQotewotICAgIG1fcGFnZS5p
bnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5kaWNhdGluZyhpbmRpY2F0aW5nKTsKLX0KLQotdm9p
ZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICBtX25hbWVPdmVycmlkZSA9IG5hbWU7Ci0gICAgdXBkYXRlKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGY4NDhkZTExNmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3Rpb25UYXJnZXQuaD4KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94
eTsKLQotY2xhc3MgV2ViUGFnZURlYnVnZ2FibGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpS
ZW1vdGVJbnNwZWN0aW9uVGFyZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlRGVidWdnYWJsZSk7Ci1wdWJsaWM6Ci0gICAg
V2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVByb3h5Jik7Ci0gICAgfldlYlBhZ2VEZWJ1Z2dhYmxl
KCkgPSBkZWZhdWx0OwotCi0gICAgSW5zcGVjdG9yOjpSZW1vdGVDb250cm9sbGFibGVUYXJnZXQ6
OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJv
bGxhYmxlVGFyZ2V0OjpUeXBlOjpXZWJQYWdlOyB9Ci0KLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
IGZpbmFsOwotICAgIFN0cmluZyB1cmwoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGhhc0xvY2Fs
RGVidWdnZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0aW9uID0gZmFsc2UsIGJvb2wg
aW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBmaW5hbDsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKSBmaW5hbDsKLSAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5hbDsKLSAgICB2b2lkIHNldElu
ZGljYXRpbmcoYm9vbCkgZmluYWw7Ci0KLSAgICBjb25zdCBTdHJpbmcmIG5hbWVPdmVycmlkZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZU92ZXJyaWRlOyB9Ci0gICAgdm9pZCBzZXROYW1lT3ZlcnJp
ZGUoY29uc3QgU3RyaW5nJik7Ci0KLXByaXZhdGU6Ci0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7
Ci0gICAgU3RyaW5nIG1fbmFtZU92ZXJyaWRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ09OVFJPTExBQkxFX1RBUkdFVChXZWJLaXQ6Oldl
YlBhZ2VEZWJ1Z2dhYmxlLCBXZWJQYWdlKTsKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWUyOGJm
NzE2My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLQotI2luY2x1
ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgot
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJhc2UuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotc3RhdGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNpb25hbFBhZ2VQ
cm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Ojp0b1RhcmdldElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Ci19Ci0KLVdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZnJvbnRlbmRSb3V0ZXIo
RnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQotICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigpKSkKLXsKLSAg
ICBhdXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9m
cm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7Ci0KLSAgICBt
X3RhcmdldEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7Ci0KLSAgICBtX2FnZW50cy5hcHBlbmQo
V1RGTW92ZSh0YXJnZXRBZ2VudCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjppbml0KCkKLXsKLSAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOwotICAgIGNyZWF0ZUluc3Bl
Y3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6
UGFnZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQo
KQotewotICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIG1fYWdlbnRzLmRpc2Nh
cmRWYWx1ZXMoKTsKLX0KLQotYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzTG9j
YWxGcm9udGVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0ZXItPmhhc0xv
Y2FsRnJvbnRlbmQoKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29u
bmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWws
IGJvb2wsIGJvb2wpCi17Ci0gICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVuZCA9ICFtX2Zy
b250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXItPmNv
bm5lY3RGcm9udGVuZChmcm9udGVuZENoYW5uZWwpOwotCi0gICAgaWYgKGNvbm5lY3RpbmdGaXJz
dEZyb250ZW5kKQotICAgICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
Jm1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKLQot
ICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0
ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICBpZiAoaGFzTG9jYWxGcm9udGVuZCgpKQotICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9y
SW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVsJiBmcm9udGVu
ZENoYW5uZWwpCi17Ci0gICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZyb250ZW5kKGZy
b250ZW5kQ2hhbm5lbCk7Ci0KLSAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQgPSAh
bV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCk7Ci0gICAgaWYgKGRpc2Nvbm5lY3RpbmdM
YXN0RnJvbnRlbmQpCi0gICAgICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RvckRlc3Ryb3llZCk7Ci0KLSAgICBtX3BhZ2Uu
ZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVu
ZENvdW50KCkpOwotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgaWYgKGRpc2Nv
bm5lY3RpbmdMYXN0RnJvbnRlbmQpCi0gICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZv
cm1hdGlvbkRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKQotewotICAgIC8vIEZJWE1FOiBIYW5k
bGUgYSBsb2NhbCBpbnNwZWN0b3IgY2xpZW50LgotCi0gICAgaWYgKCFtX2Zyb250ZW5kUm91dGVy
LT5oYXNGcm9udGVuZHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90aWZ5IGFnZW50
cyBmaXJzdCwgc2luY2UgdGhleSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xpZW50LgotICAg
IG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246
Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7Ci0KLSAgICAvLyBEaXNjb25uZWN0IGFueSByZW1h
aW5pbmcgcmVtb3RlIGZyb250ZW5kcy4KLSAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0
QWxsRnJvbnRlbmRzKCk7Ci0KLSAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRD
b3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOwotCi0jaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCi0gICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlk
Q2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKLX0KLQotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCi17Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgbV9wYWdlLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Ci0jZWxzZQotICAgIGlmIChp
bmRpY2F0aW5nKQotICAgICAgICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fcGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOwotI2VuZGlm
Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5z
cGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSB0eXBlKQotewotICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dElkKQotewotICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7Ci0gICAgaWYg
KGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGFyZ2V0QWdl
bnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKLSAgICBtX3RhcmdldHMucmVtb3ZlKGl0
KTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0lu
c3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250
ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9u
dGVuZHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byogdGFyZ2V0ID0gbV90
YXJnZXRzLmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKLSAgICBBU1NFUlQodGFy
Z2V0KTsKLSAgICByZXR1cm4gdGFyZ2V0LT5pc1BhdXNlZCgpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92
aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBjYWxsYmFjaykKLXsKLSAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdl
dElEKHByb3Zpc2lvbmFsUGFnZSkpOwotICAgIEFTU0VSVCh0YXJnZXQpOwotICAgIHRhcmdldC0+
c2V0UmVzdW1lQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQ
YWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKLXsKLSAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFs
UGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOwotfQotCi12b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShj
b25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIGRlc3Ry
b3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci19Ci0KLXZv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIG5ld1dlYlBhZ2VJRCkKLXsKLSAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7Ci0gICAgU3RyaW5nIG5ld0lEID0gV2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOwotICAgIGF1dG8g
bmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOwotICAgIEFTU0VSVChuZXdUYXJnZXQp
OwotICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKLSAgICBtX3Rh
cmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOwotCi0g
ICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCBy
ZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCi0gICAgLy8gd2UgZGVzdHJveSBldmVyeXRo
aW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgotICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMjAyOTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRo
ZSBjb21taXR0ZWQgcGFnZS4KLSAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1
ZXMoKSkKLSAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOwot
ICAgIG1fdGFyZ2V0cy5jbGVhcigpOwotICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVu
dGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+JiYgdGFyZ2V0KQotewotICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQoKnRhcmdl
dCk7Ci0gICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZSh0YXJn
ZXQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzhjYWVkZjBjMGMuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFnZW50UmVnaXN0cnkuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwotY2xhc3Mg
RnJvbnRlbmRDaGFubmVsOwotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlciB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIpOwotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
KFdlYlBhZ2VQcm94eSYpOwotCi0gICAgdm9pZCBpbml0KCk7Ci0gICAgdm9pZCBwYWdlQ2xvc2Vk
KCk7Ci0KLSAgICBib29sIGhhc0xvY2FsRnJvbnRlbmQoKSBjb25zdDsKLQotICAgIHZvaWQgY29u
bmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRp
Y0luc3BlY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpOwotICAg
IHZvaWQgZGlzY29ubmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7Ci0g
ICAgdm9pZCBkaXNjb25uZWN0QWxsRnJvbnRlbmRzKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoTWVz
c2FnZUZyb21Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi0jaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCi0gICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wpOwotI2VuZGlmCi0K
LSAgICB2b2lkIGNyZWF0ZUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOwotICAgIHZvaWQgZGVzdHJveUluc3BlY3Rv
clRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9J
bnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwotCi0gICAgYm9vbCBzaG91bGRQYXVzZUxvYWRpbmcoY29uc3QgUHJvdmlzaW9uYWxQ
YWdlUHJveHkmKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKGNv
bnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiwgV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0g
ICAgdm9pZCBkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsK
LSAgICB2b2lkIHdpbGxEZXN0cm95UHJvdmlzaW9uYWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFn
ZVByb3h5Jik7Ci0gICAgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIgb2xkV2ViUGFnZUlELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBuZXdXZWJQ
YWdlSUQpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3JUYXJnZXRQcm94eT4mJik7Ci0KLSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAg
ICBSZWY8SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKLSAgICBS
ZWY8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLSAg
ICBJbnNwZWN0b3I6OkFnZW50UmVnaXN0cnkgbV9hZ2VudHM7Ci0gICAgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JUYXJnZXRBZ2VudCogbV90YXJnZXRBZ2VudDsKLSAgICBIYXNoTWFwPFN0cmluZywgc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFByb3h5Pj4gbV90YXJnZXRzOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
bGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
bGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGQ5ZDUwZGMyODZiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKLQot
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiQVBJRGVidWdnYWJsZUlu
Zm8uaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvclV0aWxzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eUNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKLXB1YmxpYzoK
LSAgICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3Rv
ckNsaWVudCwgdWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKLSAgICAg
ICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKLSAgICAgICAg
LCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCi0gICAgICAgICwgbV9jb25uZWN0
aW9uSUQoY29ubmVjdGlvbklEKQotICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCi0gICAg
ewotICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQodGhpcyk7Ci0gICAgfQotCi0gICAgflJlbW90
ZUluc3BlY3RvclByb3h5KCkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxs
cHRyKTsKLSAgICAgICAgbV9wcm94eS0+aW52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIHZvaWQg
bG9hZCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1
NTM2PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcg
dGFyZ2V0LgotICAgICAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8g
PSBBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgp
KTsKLSAgICAgICAgZGVidWdnYWJsZUluZm8tPnNldERlYnVnZ2FibGVUeXBlKEluc3BlY3Rvcjo6
RGVidWdnYWJsZVR5cGU6OldlYlBhZ2UpOwotICAgICAgICBtX3Byb3h5LT5sb2FkKFdURk1vdmUo
ZGVidWdnYWJsZUluZm8pLCBtX2luc3BlY3RvckNsaWVudC5iYWNrZW5kQ29tbWFuZHNVUkwoKSk7
Ci0gICAgfQotCi0gICAgdm9pZCBzaG93KCkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNob3co
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFRhcmdldE5hbWUoY29uc3QgQ1N0cmluZyYgbmFtZSkK
LSAgICB7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBtX3Byb3h5LT51cGRhdGVXaW5kb3dU
aXRsZShuYW1lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIG1fcHJveHktPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IG1faW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBt
X3RhcmdldElELCBtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5k
KCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZy
b250ZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElEKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3Byb3h5OwotICAgIFJlbW90ZUluc3Bl
Y3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7Ci0gICAgdWludDY0X3QgbV9jb25uZWN0aW9u
SUQ7Ci0gICAgdWludDY0X3QgbV90YXJnZXRJRDsKLX07Ci0KLWNvbnN0IFNvY2tldENvbm5lY3Rp
b246Ok1lc3NhZ2VIYW5kbGVycyYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjptZXNzYWdlSGFuZGxl
cnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTb2NrZXRDb25uZWN0aW9u
OjpNZXNzYWdlSGFuZGxlcnM+IG1lc3NhZ2VIYW5kbGVycyA9IFNvY2tldENvbm5lY3Rpb246Ok1l
c3NhZ2VIYW5kbGVycyh7Ci0gICAgeyAiRGlkQ2xvc2UiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29j
a2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7IHsgfSwKLSAgICAgICAgW10oU29ja2V0
Q29ubmVjdGlvbiYsIEdWYXJpYW50KiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAg
IGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2Vy
RGF0YSk7Ci0gICAgICAgICAgICBjbGllbnQuY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0gICAgICAg
IH19Ci0gICAgfSwKLSAgICB7ICJEaWRTZXR1cEluc3BlY3RvckNsaWVudCIsIHN0ZDo6cGFpcjxD
U3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIihheSkiLAotICAg
ICAgICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVy
IHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVt
b3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgR1JlZlB0cjxHVmFy
aWFudD4gYmFja2VuZENvbW1hbmRzVmFyaWFudDsKLSAgICAgICAgICAgIGdfdmFyaWFudF9nZXQo
cGFyYW1ldGVycywgIihAYXkpIiwgJmJhY2tlbmRDb21tYW5kc1ZhcmlhbnQub3V0UHRyKCkpOwot
ICAgICAgICAgICAgY2xpZW50LnNldEJhY2tlbmRDb21tYW5kcyhnX3ZhcmlhbnRfZ2V0X2J5dGVz
dHJpbmcoYmFja2VuZENvbW1hbmRzVmFyaWFudC5nZXQoKSkpOwotICAgICAgICB9fQotICAgIH0s
Ci0gICAgeyAiU2V0VGFyZ2V0TGlzdCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0
aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0YSh0c3NzYikpIiwKLSAgICAgICAgW10oU29ja2V0
Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgewot
ICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNs
aWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklEOwotICAg
ICAgICAgICAgR1VuaXF1ZU91dFB0cjxHVmFyaWFudEl0ZXI+IGl0ZXI7Ci0gICAgICAgICAgICBn
X3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodGEodHNzc2IpKSIsICZjb25uZWN0aW9uSUQsICZp
dGVyLm91dFB0cigpKTsKLSAgICAgICAgICAgIHNpemVfdCB0YXJnZXRDb3VudCA9IGdfdmFyaWFu
dF9pdGVyX25fY2hpbGRyZW4oaXRlci5nZXQoKSk7Ci0gICAgICAgICAgICBWZWN0b3I8UmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpUYXJnZXQ+IHRhcmdldExpc3Q7Ci0gICAgICAgICAgICB0YXJnZXRM
aXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGFyZ2V0Q291bnQpOwotICAgICAgICAgICAgZ3Vp
bnQ2NCB0YXJnZXRJRDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHR5cGU7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lOwotICAgICAgICAgICAgY29uc3QgY2hhciogdXJsOwotICAgICAg
ICAgICAgZ2Jvb2xlYW4gaGFzTG9jYWxEZWJ1Z2dlcjsKLSAgICAgICAgICAgIHdoaWxlIChnX3Zh
cmlhbnRfaXRlcl9sb29wKGl0ZXIuZ2V0KCksICIodCZzJnMmc2IpIiwgJnRhcmdldElELCAmdHlw
ZSwgJm5hbWUsICZ1cmwsICZoYXNMb2NhbERlYnVnZ2VyKSkgewotICAgICAgICAgICAgICAgIGlm
ICghZ19zdHJjbXAwKHR5cGUsICJXZWIiKSB8fCAhZ19zdHJjbXAwKHR5cGUsICJKYXZhU2NyaXB0
IikpCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldExpc3QudW5jaGVja2VkQXBwZW5kKHsgdGFy
Z2V0SUQsIHR5cGUsIG5hbWUsIHVybCB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNs
aWVudC5zZXRUYXJnZXRMaXN0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7Ci0g
ICAgICAgIH19Ci0gICAgfSwKLSAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiLCBzdGQ6OnBh
aXI8Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodHRzKSIs
Ci0gICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3Bv
aW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2Fz
dDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBndWludDY0
IGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQ7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdl
OwotICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHR0JnMpIiwgJmNvbm5l
Y3Rpb25JRCwgJnRhcmdldElELCAmbWVzc2FnZSk7Ci0gICAgICAgICAgICBjbGllbnQuc2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgICAg
ICB9fQotICAgIH0KLSAgICB9KTsKLSAgICByZXR1cm4gbWVzc2FnZUhhbmRsZXJzOwotfQotCi1S
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFyKiBh
ZGRyZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIp
Ci0gICAgOiBtX2hvc3RBbmRQb3J0KFN0cmluZzo6ZnJvbVVURjgoYWRkcmVzcykgKyAnOicgKyBT
dHJpbmc6Om51bWJlcihwb3J0KSkKLSAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCi0gICAgLCBt
X2NhbmNlbGxhYmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKLXsKLSAgICBHUmVm
UHRyPEdTb2NrZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGll
bnRfbmV3KCkpOwotICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29j
a2V0Q2xpZW50LmdldCgpLCBtX2hvc3RBbmRQb3J0LnV0ZjgoKS5kYXRhKCksIDAsIG1fY2FuY2Vs
bGFibGUuZ2V0KCksCi0gICAgICAgIFtdKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgICAgICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25u
ZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNo
KEdfU09DS0VUX0NMSUVOVChvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotICAg
ICAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9DQU5DRUxMRUQpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IGF1dG8qIGNsaWVudCA9IHN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJE
YXRhKTsKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKQotICAgICAgICAgICAgICAgIGNsaWVu
dC0+c2V0dXBDb25uZWN0aW9uKFNvY2tldENvbm5lY3Rpb246OmNyZWF0ZShXVEZNb3ZlKGNvbm5l
Y3Rpb24pLCBtZXNzYWdlSGFuZGxlcnMoKSwgY2xpZW50KSk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlJlbW90ZUluc3BlY3RvckNsaWVudCBmYWls
ZWQgdG8gY29ubmVjdCB0byBpbnNwZWN0b3Igc2VydmVyOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsK
LSAgICAgICAgICAgICAgICBjbGllbnQtPm1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqY2xp
ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICB9LCB0aGlzKTsKLX0KLQotUmVtb3RlSW5zcGVjdG9y
Q2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkKLXsKLSAgICBnX2NhbmNlbGxhYmxlX2Nh
bmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OnNldHVwQ29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQot
ewotICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoY29ubmVjdGlvbik7Ci0gICAgbV9z
b2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBnX3Zh
cmlhbnRfbmV3KCIoQGF5KSIsIGdfdmFyaWFudF9uZXdfYnl0ZXN0cmluZyhJbnNwZWN0b3I6OmJh
Y2tlbmRDb21tYW5kc0hhc2goKS5kYXRhKCkpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciogYmFja2VuZENvbW1hbmRzKQot
ewotICAgIGlmICghYmFja2VuZENvbW1hbmRzIHx8ICFiYWNrZW5kQ29tbWFuZHNbMF0pIHsKLSAg
ICAgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShi
YWNrZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpLCBiYXNlNjREYXRhKTsKLSAg
ICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9u
RGlkQ2xvc2UoKQotewotICAgIG1fdGFyZ2V0cy5jbGVhcigpOwotICAgIG1faW5zcGVjdG9yUHJv
eHlNYXAuY2xlYXIoKTsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIG1f
b2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0
SUQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShz
dGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25J
RCwgdGFyZ2V0SURdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9y
UHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKTsKLSAgICB9KTsKLSAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUtPnNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc29ja2V0Q29ubmVj
dGlvbi0+c2VuZE1lc3NhZ2UoIlNldHVwIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rp
b25JRCwgdGFyZ2V0SUQpKTsKLSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7
Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZCh1
aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2VuZE1lc3Nh
Z2VUb0JhY2tlbmQiLCBnX3ZhcmlhbnRfbmV3KCIodHRzKSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0
YXJnZXRJRCkKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JQcm94eU1hcC5jb250YWlucyhzdGQ6
Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSkpOwotICAgIG1fc29ja2V0Q29ubmVj
dGlvbi0+c2VuZE1lc3NhZ2UoIkZyb250ZW5kRGlkQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIodHQp
IiwgY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVt
b3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklE
LCBWZWN0b3I8VGFyZ2V0PiYmIHRhcmdldExpc3QpCi17Ci0gICAgLy8gRmluZCBjbG9zZWQgdGFy
Z2V0cyB0byByZW1vdmUgdGhlbS4KLSAgICBWZWN0b3I8dWludDY0X3QsIDQ+IHRhcmdldHNUb1Jl
bW92ZTsKLSAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb25UYXJnZXRQYWlyIDogbV9pbnNwZWN0b3JQ
cm94eU1hcC5rZXlzKCkpIHsKLSAgICAgICAgaWYgKGNvbm5lY3Rpb25UYXJnZXRQYWlyLmZpcnN0
ICE9IGNvbm5lY3Rpb25JRCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0TGlz
dCkgewotICAgICAgICAgICAgaWYgKHRhcmdldC5pZCA9PSBjb25uZWN0aW9uVGFyZ2V0UGFpci5z
ZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLmdldChjb25uZWN0
aW9uVGFyZ2V0UGFpciktPnNldFRhcmdldE5hbWUodGFyZ2V0Lm5hbWUpOwotICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgdGFyZ2V0c1RvUmVt
b3ZlLmFwcGVuZChjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNvbmQpOwotICAgIH0KLSAgICBmb3Ig
KGF1dG8gdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCi0gICAgICAgIG1faW5zcGVjdG9yUHJv
eHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKLQot
ICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKLSAg
ICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9u
SUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIGF1dG8g
cHJveHkgPSBtX2luc3BlY3RvclByb3h5TWFwLmdldChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9u
SUQsIHRhcmdldElEKSk7Ci0gICAgQVNTRVJUKHByb3h5KTsKLSAgICBpZiAoIXByb3h5KQotICAg
ICAgICByZXR1cm47Ci0gICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmc6OmZy
b21VVEY4KG1lc3NhZ2UpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhZGVlMDJjZTVkNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDkz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2ds
aWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL1NvY2tldENvbm5lY3Rpb24uaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX0dDYW5jZWxs
YWJsZSBHQ2FuY2VsbGFibGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1vdGVJ
bnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsKLWNsYXNzIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNsaWVu
dCYpID0gMDsKLX07Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQoKTsKLXB1YmxpYzoKLSAgICBSZW1vdGVJbnNwZWN0b3JDbGllbnQo
Y29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2
ZXImKTsKLSAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7Ci0KLSAgICBzdHJ1Y3QgVGFyZ2V0
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHVpbnQ2NF90IGlkOwotICAgICAgICBDU3RyaW5nIHR5
cGU7Ci0gICAgICAgIENTdHJpbmcgbmFtZTsKLSAgICAgICAgQ1N0cmluZyB1cmw7Ci0gICAgfTsK
LQotICAgIGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQotICAgIGNvbnN0IFN0cmluZyYgaG9zdEFuZFBv
cnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RBbmRQb3J0OyB9Ci0gICAgY29uc3QgU3RyaW5nJiBi
YWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VSTDsg
fQotCi0gICAgdm9pZCBpbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFy
Z2V0SUQpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3QgY29ubmVjdGlv
bklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBjbG9zZUZy
b21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKTsKLQot
cHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRs
ZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKLSAgICB2b2lkIHNldHVwQ29ubmVjdGlvbihSZWY8U29j
a2V0Q29ubmVjdGlvbj4mJik7Ci0gICAgdm9pZCBjb25uZWN0aW9uRGlkQ2xvc2UoKTsKLQotICAg
IHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqKTsKLSAgICB2b2lkIHNldFRhcmdl
dExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmKTsKLSAgICB2b2lk
IHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRh
cmdldElELCBjb25zdCBjaGFyKik7Ci0KLSAgICBTdHJpbmcgbV9ob3N0QW5kUG9ydDsKLSAgICBT
dHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0gICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIm
IG1fb2JzZXJ2ZXI7Ci0gICAgUmVmUHRyPFNvY2tldENvbm5lY3Rpb24+IG1fc29ja2V0Q29ubmVj
dGlvbjsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBIYXNo
TWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOwotICAgIEhhc2hNYXA8c3Rk
OjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0
b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDg4ZGQwOGIwLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYktpdEluc3BlY3Rv
cldpbmRvdy5oIgotI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgotI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnVw
ZGF0ZVdpbmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmIHRhcmdldE5hbWUpCi17Ci0gICAgaWYgKCFt
X3dpbmRvdykKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1
YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1fd2luZG93KSwgIXRhcmdldE5hbWUuaXNO
dWxsKCkgPyB0YXJnZXROYW1lLmRhdGEoKSA6IG51bGxwdHIpOwotfQotCi1zdGF0aWMgdm9pZCBy
ZW1vdGVJbnNwZWN0b3JWaWV3RGVzdHJveWVkKFJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBpbnNw
ZWN0b3JQcm94eSkKLXsKLSAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsKLX0K
LQotV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKLQotICAg
IGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2Vi
S2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8g
QWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1
aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLT5zZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1l
c3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAgIGF1dG8gcGFn
ZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmll
ckZvclBhZ2UobnVsbHB0cikpOwotCi0gICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6
UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQ
cm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51
bGxwdHIpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVu
Y2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91
cC5wdHIoKSk7Ci0gICAgbV93ZWJWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNy
ZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV93ZWJWaWV3LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0socmVtb3RlSW5zcGVjdG9yVmll
d0Rlc3Ryb3llZCksIHRoaXMpOwotICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpF
Q1QobV93ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXcpKTsKLQot
ICAgIG1fd2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KG51bGxwdHIpOwotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cpLCBtX3dlYlZpZXcpOwotICAg
IGd0a193aWRnZXRfc2hvdyhtX3dlYlZpZXcpOwotCi0gICAgZ19vYmplY3RfYWRkX3dlYWtfcG9p
bnRlcihHX09CSkVDVChtX3dpbmRvdyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93aW5k
b3cpKTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX3dpbmRvdykpOwotCi0g
ICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSht
X3dlYlZpZXcpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgaWYgKG1fd2ViVmlldykgewotICAg
ICAgICBpZiAoYXV0byogd2ViUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRf
V0VCX1ZJRVdfQkFTRShtX3dlYlZpZXcpKSkKLSAgICAgICAgICAgIHdlYlBhZ2UtPmNsb3NlKCk7
Ci0gICAgfQotICAgIGlmIChtX3dpbmRvdykKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1f
d2luZG93KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNl
dFN0YXRlKCkKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1C
cmluZ1RvRnJvbnQoKQotewotICAgIGlmIChtX3dpbmRvdykKLSAgICAgICAgZ3RrX3dpbmRvd19w
cmVzZW50KEdUS19XSU5ET1cobV93aW5kb3cpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3RlRmls
ZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIEdGaWxlKiBmaWxlID0gR19G
SUxFKHNvdXJjZU9iamVjdCk7Ci0gICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5p
c2goZmlsZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKLSAg
ICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUpKTsKLSAgICBwYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUo
cGF0aC5nZXQoKSksIHBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFs
b2cpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7Ci0KLSAgICBHUmVmUHRy
PEd0a0ZpbGVDaG9vc2VyTmF0aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nl
cl9uYXRpdmVfbmV3KCJTYXZlIEZpbGUiLAotICAgICAgICBHVEtfV0lORE9XKG1fd2luZG93KSwg
R1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOwotCi0gICAg
R3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7
Ci0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9v
c2VyLCBUUlVFKTsKLQotICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGlu
c3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAotICAgIC8vIGFzIHdlYi1pbnNw
ZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8v
IFVSTAotICAgIC8vIHVuZm9ydHVuYXRlbHkuCi0gICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVk
VVJMKTsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgotICAgIGd0a19maWxlX2No
b29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElW
RV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmluZyBkYXRh
U3RyaW5nOwotICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVj
b2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwotCi0gICAgY29uc3QgY2hh
ciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRh
VmVjdG9yLmRhdGEoKTsKLSAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVs
bCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAgIEdSZWZQ
dHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9v
c2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdl
dCgpKSk7Ci0gICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0
YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCi0gICAgICAgIEdfRklMRV9DUkVBVEVfUkVQ
TEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgcmVtb3RlRmlsZVJlcGxhY2VDb250ZW50c0NhbGxi
YWNrLCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBG
bG9hdFJlY3QmKQotewotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVN0YXJ0V2luZG93RHJhZygpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmlj
YXRlSW5mbyYpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1OTljNDQ2NTc2OC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKLQotY2xhc3MgV2ViSW5z
cGVjdG9yUHJveHlDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYkluc3BlY3RvclBy
b3h5Q2xpZW50KCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgYm9vbCBvcGVuV2luZG93KFdlYklu
c3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0
b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3Rv
clByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYklu
c3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
YXR0YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZXRhY2go
V2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFj
aGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWduZWQgaGVpZ2h0KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgoV2ViSW5zcGVjdG9yUHJveHkmLCB1
bnNpZ25lZCB3aWR0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VBdHRhY2hBdmFp
bGFiaWxpdHkoV2ViSW5zcGVjdG9yUHJveHkmLCBib29sIGF2YWlsYWJsZSkgPSAwOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2ZkZTM0OWJiNzEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bn
bm9tZS5vcmc+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2Vi
SW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRl
ICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiV0tBcnJheS5oIgotI2luY2x1ZGUg
IldLQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKLSNpbmNs
dWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0
b3JQcm94eUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNp
bmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQ
cm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9pZCBpbnNwZWN0b3JWaWV3RGVzdHJveWVkKEd0a1dp
ZGdldCosIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiBpbnNw
ZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4odXNlckRhdGEpOwot
Ci0gICAgLy8gSW5mb3JtIFdlYlByb2Nlc3MgYWJvdXQgd2ViaW5zcGVjdG9yIGNsb3N1cmUuIE5v
dCBkb2luZyBzbywKLSAgICAvLyByZXN1bHRzIGluIGZhaWx1cmUgb2Ygc3Vic2VxdWVudCBpbnZv
Y2F0aW9uIG9mIHdlYmluc3BlY3Rvci4KLSAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudD4mJiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQgPSBXVEZNb3Zl
KGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3Rvcldp
bmRvd1RpdGxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotICAg
IHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9X
KG1faW5zcGVjdG9yV2luZG93KSwgIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSA/IG1f
aW5zcGVjdGVkVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKLX0KLQotc3RhdGlj
IHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlZWRlZERhdGFiYXNlUXVvdGEoV0tQYWdlUmVmLCBXS0Zy
YW1lUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIHVu
c2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcg
Y3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBj
b25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPihl
eHBlY3RlZFVzYWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSAqIDEuMjUpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19j
YXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwot
ICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJveHktPmNs
b3NlRm9yQ3Jhc2goKTsKLX0KLQotc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRp
b25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIC8vIEFsbG93IG5vbi1tYWluIGZy
YW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KLSAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJh
bWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7Ci0gICAgaWYg
KHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAgICAgICB0
b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGNvbnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19j
YXN0PGNvbnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNTRVJUKHdl
Ykluc3BlY3RvclByb3h5KTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAvLyBBbGxv
dyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJJbnNwZWN0
b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgewotICAg
ICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUg
aW5zcGVjdG9yJ3MgcGFnZS4KLSAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKLQot
ICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIHdl
Ykluc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVx
dWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUo
V0tQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJvcG9zZWRNZW51UmVmLCBXS0FycmF5UmVm
KiBuZXdNZW51UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCop
Ci17Ci0gICAgV0tNdXRhYmxlQXJyYXlSZWYgbWVudUl0ZW1zID0gV0tNdXRhYmxlQXJyYXlDcmVh
dGUoKTsKLQotICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHByb3Bvc2VkTWVudVJl
Zik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdL
Q29udGV4dE1lbnVJdGVtUmVmIGNvbnRleHRNZW51SXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4
dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgocHJvcG9zZWRNZW51UmVmLCBpKSk7
Ci0gICAgICAgIHN3aXRjaCAoV0tDb250ZXh0TWVudUl0ZW1HZXRUYWcoY29udGV4dE1lbnVJdGVt
KSkgewotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5k
b3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5k
b3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5k
b3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5k
b3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNr
OgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdLQXJy
YXlBcHBlbmRJdGVtKG1lbnVJdGVtcywgY29udGV4dE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKm5ld01lbnVSZWYgPSBtZW51SXRlbXM7Ci19
Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRl
bmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKLSAgICBBU1NFUlQoIW1f
aW5zcGVjdG9yVmlldyk7Ci0KLSAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6
OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0jaWYgRU5BQkxFKERF
VkVMT1BFUl9NT0RFKQotICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2Vi
IEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAg
ICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAgICBwcmVm
ZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7
Ci0jZW5kaWYKLSAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7Ci0g
ICAgfSk7Ci0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0
b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKLQotICAgIGF1
dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsK
LSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQ
b29sKGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZl
cmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFn
ZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RLX1dJREdF
VCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKLSAg
ICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yVmlldyksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdChtX2luc3BlY3RvclZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JW
aWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0KLSAgICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xpZW50ID0g
ewotICAgICAgICB7IDIsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFn
ZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCi0g
ICAgICAgIG51bGxwdHIsIC8vIGNsb3NlUGFnZQotICAgICAgICBudWxscHRyLCAvLyB0YWtlRm9j
dXMKLSAgICAgICAgbnVsbHB0ciwgLy8gZm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1
cwotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKLSAgICAgICAgbnVsbHB0
ciwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm0KLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNj
cmlwdFByb21wdAotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNUZXh0Ci0gICAgICAgIG51
bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAK
LSAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRl
ZEZvclVzZVdpdGhWMAotICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAot
ICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50Ci0gICAgICAgIG51bGxw
dHIsIC8vIGFyZVRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFy
c1Zpc2libGUKLSAgICAgICAgbnVsbHB0ciwgLy8gaXNNZW51QmFyVmlzaWJsZQotICAgICAgICBu
dWxscHRyLCAvLyBzZXRNZW51QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBpc1N0YXR1
c0JhclZpc2libGUKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJsZQotICAg
ICAgICBudWxscHRyLCAvLyBpc1Jlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRSZXNp
emFibGUKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0V2luZG93RnJhbWUsCi0gICAgICAgIG51bGxw
dHIsIC8vIHNldFdpbmRvd0ZyYW1lLAotICAgICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdwotICAgICAgICBudWxs
cHRyLCAvLyBwYWdlRGlkU2Nyb2xsCi0gICAgICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKLSAg
ICAgICAgbnVsbHB0ciwgLy8gcnVuT3BlblBhbmVsLAotICAgICAgICBudWxscHRyLCAvLyBkZWNp
ZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51bGxwdHIs
IC8vIGhlYWRlckhlaWdodAotICAgICAgICBudWxscHRyLCAvLyBmb290ZXJIZWlnaHQKLSAgICAg
ICAgbnVsbHB0ciwgLy8gZHJhd0hlYWRlcgotICAgICAgICBudWxscHRyLCAvLyBkcmF3Rm9vdGVy
Ci0gICAgICAgIG51bGxwdHIsIC8vIHByaW50RnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVu
TW9kYWwKLSAgICAgICAgbnVsbHB0ciwgLy8gdW51c2VkCi0gICAgICAgIG51bGxwdHIsIC8vIHNh
dmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxk
SW50ZXJydXB0SmF2YVNjcmlwdAotICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVQYWdlCi0gICAg
ICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50Ci0gICAgICAgIG51bGxwdHIs
IC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAg
IG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9y
VXNlV2l0aFYxCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgotICAgICAgICBu
dWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkCi0gICAgfTsKLQotICAgIFdLUGFnZU5hdmlnYXRpb25DbGll
bnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAgICAgICAg
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lk
ZVBvbGljeUZvclBsdWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNp
b25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQ
cm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdh
dGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAgICAgIG51
bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQ
cm92aXNpb25hbExvYWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERv
Y3VtZW50TG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9u
Ci0gICAgICAgIG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0gICAgICAg
IG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKLSAgICAg
ICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0gICAgICAg
IHdlYlByb2Nlc3NEaWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01h
c3RlcktleQotCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUK
LSAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51
bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIGRp
ZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgV0tQYWdlQ29u
dGV4dE1lbnVDbGllbnRWMyBjb250ZXh0TWVudUNsaWVudCA9IHsKLSAgICAgICAgeyAzLCB0aGlz
IH0sCi0gICAgICAgIG51bGxwdHIsIC8vIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9k
ZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkCi0gICAgICAgIG51bGxwdHIsIC8vIGNvbnRleHRNZW51RGlzbWlzc2Vk
Ci0gICAgICAgIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSwKLSAgICAgICAgbnVsbHB0
ciwgLy8gc2hvd0NvbnRleHRNZW51Ci0gICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVu
dQotICAgIH07Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3KSk7Ci0g
ICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOwotCi0gICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRv
QVBJKGluc3BlY3RvclBhZ2UpLCAmdWlDbGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0UGFnZU5h
dmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJh
c2UpOwotICAgIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudCh0b0FQSShpbnNwZWN0b3JQ
YWdlKSwgJmNvbnRleHRNZW51Q2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3RvclBh
Z2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRX
aW5kb3coKQotewotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+b3BlbldpbmRvdygqdGhp
cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCogaW5zcGVjdGVkVmlld1BhcmVu
dCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgp
KTsKLSAgICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhpbnNw
ZWN0ZWRWaWV3UGFyZW50KSkKLSAgICAgICAgaW5zcGVjdGVkVmlld1BhcmVudCA9IG51bGxwdHI7
Ci0KLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKLSAgICBtX2luc3BlY3RvcldpbmRv
dyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhpbnNwZWN0ZWRWaWV3UGFyZW50ID8gR1RLX1dJ
TkRPVyhpbnNwZWN0ZWRWaWV3UGFyZW50KSA6IG51bGxwdHIpOwotICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOwot
ICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOwotCi0gICAgaWYgKCFtX2luc3Bl
Y3RlZFVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1Rp
dGxlKCk7Ci0KLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVj
dG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvcldpbmRvdykp
OwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VB
bmRXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKLSAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwotICAgICAgICBt
X2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkKLSAg
ICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCp0aGlzKTsKLQotICAgIGlmIChtX2luc3BlY3Rvcldp
bmRvdykgewotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOwot
ICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQotewotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAg
ICBpZiAobV9pc09wZW5pbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2NsaWVudCAm
JiBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZp
ZXcpOwotICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFy
ZW50KSkKLSAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cocGFyZW50KSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaWYgKFdlYkNvcmU6Ondp
ZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQotICAgICAgICByZXR1cm4gbV9p
c1Zpc2libGUgJiYgZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyhwYXJlbnQpKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2luc3BlY3RlZFVS
TFN0cmluZyA9IHVybDsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5pbnNw
ZWN0ZWRVUkxDaGFuZ2VkKCp0aGlzLCB1cmwpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygi
cmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9NYWluLmh0bWwi
KTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3Iv
VXNlckludGVyZmFjZS9UZXN0Lmh0bWwiKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9v
cmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlLyIpOwotfQotCi1EZWJ1Z2dhYmxlSW5m
b0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAg
IC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZl
ciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgcmV0dXJuIERl
YnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICByZXR1cm4gZ3RrX3dp
ZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7
Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d1dpZHRoKCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX3dpZHRoKGlu
c3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JW
aWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAg
ICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93
KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVj
dG9yV2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOwotICAgIH0KLQotICAg
IC8vIFNldCBhIGRlZmF1bHQgc2l6ZXMgYmFzZWQgb24gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMw
MDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsK
LQotICAgIGlmIChtX2F0dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsK
LSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0
ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVs
dEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dXaWR0aCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dX
aWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFj
aGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xp
ZW50ICYmIG1fY2xpZW50LT5hdHRhY2goKnRoaXMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3
ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNw
ZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIG1faW5zcGVjdG9yVmlldywgbV9hdHRhY2htZW50
U2lkZSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWluc3BlY3Rl
ZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1Jl
ZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0gICAgaWYg
KCFtX2NsaWVudCB8fCAhbV9jbGllbnQtPmRldGFjaCgqdGhpcykpIHsKLSAgICAgICAgLy8gRGV0
YWNoIGlzIGNhbGxlZCB3aGVuIG1faXNBdHRhY2hlZCBpcyB0cnVlLCBidXQgaXQgY291bGQgY2Fs
bGVkIGJlZm9yZQotICAgICAgICAvLyB0aGUgaW5zcGVjdG9yIGlzIG9wZW5lZCBpZiB0aGUgaW5z
cGVjdG9yIGlzIHNob3duL2Nsb3NlZCBxdWlja2x5LiBTbywKLSAgICAgICAgLy8gd2UgbWlnaHQg
bm90IGhhdmUgYSBwYXJlbnQgeWV0LgotICAgICAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBn
dGtfd2lkZ2V0X2dldF9wYXJlbnQobV9pbnNwZWN0b3JWaWV3KSkKLSAgICAgICAgICAgIGd0a19j
b250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsK
LSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlz
IG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAgIC8vIGFu
ZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KLSAg
ICBpZiAoIW1faXNWaXNpYmxlKSB7Ci0gICAgICAgIC8vIFRoZSBpbnNwZWN0b3IgdmlldyB3aWxs
IGJlIGRlc3Ryb3llZCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2Vz
cyB0byBjbG9zZSB0aGUKLSAgICAgICAgLy8gaW5zcGVjdG9yIGluIHRoaXMgY2FzZSwgc2luY2Ug
aXQncyBhbHJlYWR5IGNsb3NlZC4KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVj
dG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxs
cHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgb3BlbigpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWln
aHQoKnRoaXMsIGhlaWdodCk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3
U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSks
IGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+
ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgqdGhpcywgd2lkdGgpOwotICAgIHdlYmtpdFdlYlZpZXdC
YXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFn
ZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1T
dGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmls
ZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwotICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVu
dHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0
YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0g
ICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZl
KHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQot
ewotICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOwotCi0gICAgR3RrV2lkZ2V0KiBw
YXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwotICAgIGlm
ICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9
IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCi0gICAg
ICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNh
dmUiLCAiQ2FuY2VsIikpOwotCi0gICAgR3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklM
RV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Ci0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3Zl
cndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKLQotICAgIC8vIFNvbWUgaW5zcGVj
dG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwg
c3VjaAotICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVS
TCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAotICAgIC8vIHVuZm9ydHVuYXRlbHkuCi0gICAg
VVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hh
cmFjdGVyLgotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1
cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChndGtfbmF0
aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JF
U1BPTlNFX0FDQ0VQVCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+IGRhdGFW
ZWN0b3I7Ci0gICAgQ1N0cmluZyBkYXRhU3RyaW5nOwotICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7
Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZh
bGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFWZWN0b3Iu
c2hyaW5rVG9GaXQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQu
dXRmOCgpOwotCi0gICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8g
ZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKLSAgICBzaXplX3QgZGF0YUxl
bmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFW
ZWN0b3Iuc2l6ZSgpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2Zp
bGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRo
KGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Ci0gICAgZ19maWxlX3JlcGxhY2VfY29udGVu
dHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCi0g
ICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgZmlsZVJl
cGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAg
ICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hBdmFpbGFi
aWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRv
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5MGYwZTZmMzAuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5k
b3cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgotCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJv
eHkuaCIKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotc3RydWN0IF9XZWJLaXRJ
bnNwZWN0b3JXaW5kb3cgewotICAgIEd0a1dpbmRvdyBwYXJlbnQ7Ci0KLSAgICBHdGtXaWRnZXQq
IGhlYWRlckJhcjsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3Mgewot
ICAgIEd0a1dpbmRvd0NsYXNzIHBhcmVudDsKLX07Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0SW5z
cGVjdG9yV2luZG93LCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvdywgR1RLX1RZUEVfV0lORE9XKQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19jbGFzc19pbml0KFdlYktpdElu
c3BlY3RvcldpbmRvd0NsYXNzKikKLXsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rv
cl93aW5kb3dfaW5pdChXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdykKLXsKLSAgICB3aW5k
b3ctPmhlYWRlckJhciA9IGd0a19oZWFkZXJfYmFyX25ldygpOwotICAgIGd0a19oZWFkZXJfYmFy
X3NldF90aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIF8oIldlYiBJbnNw
ZWN0b3IiKSk7Ci0gICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3Nob3dfY2xvc2VfYnV0dG9uKEdUS19I
RUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgVFJVRSk7Ci0gICAgZ3RrX3dpbmRvd19zZXRf
dGl0bGViYXIoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ctPmhlYWRlckJhcik7Ci0gICAgZ3Rr
X3dpZGdldF9zaG93KHdpbmRvdy0+aGVhZGVyQmFyKTsKLX0KLQotR3RrV2lkZ2V0KiB3ZWJraXRJ
bnNwZWN0b3JXaW5kb3dOZXcoR3RrV2luZG93KiBwYXJlbnQpCi17Ci0gICAgcmV0dXJuIEdUS19X
SURHRVQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csICJ0eXBlIiwg
R1RLX1dJTkRPV19UT1BMRVZFTCwgInRyYW5zaWVudC1mb3IiLCBwYXJlbnQsCi0gICAgICAgICJk
ZWZhdWx0LXdpZHRoIiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwgImRl
ZmF1bHQtaGVpZ2h0IiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQsIG51
bGxwdHIpKTsKLX0KLQotdm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShXZWJL
aXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciogc3VidGl0bGUpCi17Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyh3aW5kb3cpKTsKLQot
ICAgIGd0a19oZWFkZXJfYmFyX3NldF9zdWJ0aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhl
YWRlckJhciksIHN1YnRpdGxlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZWJkYzI4ZDEwOWYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZp
bmUgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVyAgICAgICAgICAgICh3ZWJraXRfaW5zcGVj
dG9yX3dpbmRvd19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3cpKQotI2RlZmluZSBX
RUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZpbmUg
V0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5z
cGVjdG9yV2luZG93Q2xhc3MpKQotI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPV19D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZ
UEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0SW5zcGVjdG9yV2luZG93IFdlYktpdEluc3BlY3RvcldpbmRvdzsK
LXR5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJbnNwZWN0
b3JXaW5kb3dDbGFzczsKLQotR1R5cGUgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUo
dm9pZCk7Ci0KLUd0a1dpZGdldCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyog
cGFyZW50KTsKLXZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5z
cGVjdG9yV2luZG93KiwgY29uc3QgY2hhciogc3VidGl0bGUpOwotCi1HX0VORF9ERUNMUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJj
aEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNw
ZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2ZiYTY5NWU2YmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyLmg+Ci0KLUBpbnRl
cmZhY2UgV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIgOiBVSUdlc3R1cmVS
ZWNvZ25pemVyCi0tIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3OwotQGVu
ZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0lu
c3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY3ZmU3YmNjZGIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJl
UmVjb2duaXplci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1
cmVSZWNvZ25pemVyLmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxV
SUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyU3ViY2xhc3MuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNv
Z25pemVyIHsKLSAgICBSZXRhaW5QdHI8VUlUb3VjaD4gX3RvdWNoOwotfQotCi0tIChDR1BvaW50
KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2aWV3Ci17Ci0gICAgcmV0dXJuIFtfdG91Y2ggbG9j
YXRpb25JblZpZXc6dmlld107Ci19Ci0KLS0gKHZvaWQpX3Byb2Nlc3NUb3VjaGVzOihOU1NldCAq
KXRvdWNoZXMgc3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSluZXdTdGF0ZQotewotICAg
IEFTU0VSVChfdG91Y2gpOwotICAgIGlmIChbdG91Y2hlcyBjb250YWluc09iamVjdDpfdG91Y2gu
Z2V0KCldKQotICAgICAgICBzZWxmLnN0YXRlID0gbmV3U3RhdGU7Ci19Ci0KLS0gKHZvaWQpdG91
Y2hlc0JlZ2FuOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsK
LSAgICBpZiAoc2VsZi5zdGF0ZSAhPSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFfdG91Y2gpOwotICAgIF90b3VjaCA9IFt0
b3VjaGVzIGFueU9iamVjdF07Ci0KLSAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBz
dGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbl07Ci19Ci0KLS0gKHZvaWQpdG91Y2hl
c01vdmVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAg
ICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGVDaGFuZ2VkXTsKLX0KLQotLSAodm9pZCl0b3VjaGVzRW5kZWQ6KE5TU2V0ICopdG91Y2hl
cyB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudAotewotICAgIFtzZWxmIF9wcm9jZXNzVG91Y2hl
czp0b3VjaGVzIHN0YXRlOlVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkXTsKLX0KLQotLSAo
dm9pZCl0b3VjaGVzQ2FuY2VsbGVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50
ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWRdOwotfQotCi0tICh2b2lkKXJlc2V0Ci17Ci0g
ICAgX3RvdWNoID0gbmlsOwotfQotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWJkZWI1ZjZkMC4uMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFj
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQot
I2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbXBvcnQg
IlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbXBvcnQgIlJlbW90ZVdlYklu
c3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldLRnJhbWVJbmZvLmgiCi0jaW1wb3J0ICJX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25BY3Rpb24u
aCIKLSNpbXBvcnQgIldLTmF2aWdhdGlvbkRlbGVnYXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbXBvcnQgIldlYlBh
Z2VHcm91cC5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0IDxTZWN1cml0eUlu
dGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNl
L1NGQ2VydGlmaWNhdGVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5o
PgotI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLUBpbnRlcmZhY2UgV0tSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIDogTlNPYmplY3QgPE5TV2luZG93RGVsZWdhdGUsIFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4gewotICAgIFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5KilpbnNwZWN0b3JQcm94eTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcgotCi0tIChOU1JlY3Qpd2luZG93OihOU1dpbmRvdyAq
KXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1JlY3Q6KE5T
UmVjdClyZWN0Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0dXJuIE5T
TWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwgX2luc3Bl
Y3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVjdDsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktp
dDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBfaW5zcGVj
dG9yUHJveHkgPSBpbnNwZWN0b3JQcm94eTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIF9pbnNwZWN0
b3JQcm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsKLX0KLQotLSAoQk9PTClpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0OihXS0luc3BlY3RvclZpZXdDb250cm9sbGVyICop
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICByZXR1cm4gX2luc3BlY3RvclByb3h5LT5p
c1VuZGVyVGVzdCgpOwotfQotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLVdLV2ViVmlldyAqUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Ondl
YlZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBtX2luc3BlY3RvclZpZXcuZ2V0KCkud2ViVmll
dzsKLX0KLQotV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIG1fb2JqQ0FkYXB0ZXIgPSBhZG9w
dE5TKFtbV0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIGFsbG9jXSBpbml0V2l0
aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OnRoaXNdKTsKLQotICAgIG1faW5zcGVjdG9yVmlldyA9
IGFkb3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3Bl
Y3RlZFBhZ2U6bnVsbHB0cl0pOwotICAgIFttX2luc3BlY3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdh
dGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBtX3dpbmRvdyA9IFdlYkluc3BlY3RvclBy
b3h5OjpjcmVhdGVGcm9udGVuZFdpbmRvdyhOU1plcm9SZWN0LCBXZWJJbnNwZWN0b3JQcm94eTo6
SW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZSk7Ci0gICAgW21fd2luZG93IHNldERlbGVnYXRl
Om1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotICAgIFttX3dpbmRvdyBzZXRGcmFtZUF1dG9zYXZlTmFt
ZTpAIldLUmVtb3RlV2ViSW5zcGVjdG9yV2luZG93RnJhbWUiXTsKLQotICAgIE5TVmlldyAqY29u
dGVudFZpZXcgPSBtX3dpbmRvdy5nZXQoKS5jb250ZW50VmlldzsKLSAgICBbd2ViVmlldygpIHNl
dEZyYW1lOmNvbnRlbnRWaWV3LmJvdW5kc107Ci0gICAgW2NvbnRlbnRWaWV3IGFkZFN1YnZpZXc6
d2ViVmlldygpXTsKLQotICAgIHJldHVybiB3ZWJWaWV3KCktPl9wYWdlLmdldCgpOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCkKLXsKLSAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgW21fd2luZG93IHNldERl
bGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3dpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1fd2luZG93
ID0gbmlsOwotICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKLSAgICAgICAgW21f
aW5zcGVjdG9yVmlldy5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBtX2luc3BlY3Rv
clZpZXcgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1fb2JqQ0FkYXB0ZXIpCi0gICAgICAgIG1f
b2JqQ0FkYXB0ZXIgPSBuaWw7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtUmVzZXRTdGF0ZSgpCi17Ci0gICAgW05TV2luZG93IHJlbW92ZUZyYW1lVXNpbmdOYW1l
OlttX3dpbmRvdyBmcmFtZUF1dG9zYXZlTmFtZV1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCi17Ci0gICAgW21fd2luZG93IG1ha2VL
ZXlBbmRPcmRlckZyb250Om5pbF07Ci0gICAgW21fd2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp3
ZWJWaWV3KCldOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNh
dmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICAvLyBGSVhNRTog
U2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KLQotICAgIEFTU0VSVCghc3VnZ2VzdGVk
VVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0
ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKLSAgICBpZiAoIXBsYXRm
b3JtVVJMKSB7Ci0gICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3Vn
Z2VzdGVkVVJMXTsKLSAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFt
ZXMgYmVmb3JlIHdlIGNhbiBzYXZlIHRvIHRoZW0uCi0gICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9
IHRydWU7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7Ci0gICAgaWYgKCFw
bGF0Zm9ybVVSTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUg
YmxvY2sgYmVsb3cuCi0gICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7
Ci0gICAgU3RyaW5nIGNvbnRlbnRDb3B5ID0gY29udGVudDsKLQotICAgIGF1dG8gc2F2ZVRvVVJM
ID0gXihOU1VSTCAqYWN0dWFsVVJMKSB7Ci0gICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOwotCi0g
ICAgICAgIG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFj
dHVhbFVSTCk7Ci0KLSAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29w
eSwgb3V0LCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05T
RGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7
Ci0gICAgICAgICAgICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxs
eTpZRVNdOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRv
VVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
ZyBlcnJvcjpOVUxMXTsKLQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29s
dXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotICAgIH07Ci0KLSAg
ICBpZiAoIWZvcmNlU2F2ZURpYWxvZykgewotICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05T
U2F2ZVBhbmVsIHNhdmVQYW5lbF07Ci0gICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBw
bGF0Zm9ybVVSTC5sYXN0UGF0aENvbXBvbmVudDsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmaWxl
IFVSTCB3ZSd2ZSBhbHJlYWR5IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCi0gICAgLy8g
Y2FuIHByb3ZpZGUgYSBnb29kIGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUg
c3lzdGVtJ3MKLSAgICAvLyBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3Rv
cnkgdG8gc2hvdyBpbiB0aGUgZGlhbG9nLgotICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwp
Ci0gICAgICAgIHBhbmVsLmRpcmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5n
TGFzdFBhdGhDb21wb25lbnRdOwotCi0gICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJ
bnRlZ2VyIHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNh
bmNlbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01v
ZGFsUmVzcG9uc2VPSyk7Ci0gICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOwotICAgIH07Ci0K
LSAgICBOU1dpbmRvdyAqd2luZG93ID0gbV93aW5kb3cgPyBtX3dpbmRvdy5nZXQoKSA6IFtOU0Fw
cCBrZXlXaW5kb3ddOwotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIFtwYW5lbCBiZWdpblNoZWV0
TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
XTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0p
OwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIC8v
IEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFjLgotCi0gICAgQVNTRVJUKCFz
dWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVh
bFVSTCA9IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAg
Ly8gRG8gbm90IGFwcGVuZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRo
aXMgZmlsZW5hbWUgaW4gc2F2ZSgpLgotICAgIGlmICghYWN0dWFsVVJMKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBOU0ZpbGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRs
ZUZvcldyaXRpbmdUb1VSTDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRs
ZSBzZWVrVG9FbmRPZkZpbGVdOwotICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFV
c2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW2hhbmRsZSBjbG9zZUZp
bGVdOwotCi0gICAgV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlID0gd2ViVmlldygpLT5fcGFn
ZS5nZXQoKTsKLSAgICBpbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yVUk6OkRpZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSks
IGluc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fc2hlZXRSZWN0ID0gcmVjdDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIHdlYlZpZXcoKS0+X3BhZ2UtPnN0
YXJ0V2luZG93RHJhZygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBbW05TV29ya3NwYWNl
IHNoYXJlZFdvcmtzcGFjZV0gb3BlblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzp1cmxdXTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUo
Y29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgQVNTRVJUKCFj
ZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKLQotICAgIFJldGFpblB0cjxTRkNlcnRpZmljYXRl
UGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0ZVBhbmVsIGFs
bG9jXSBpbml0XSk7Ci0KLSAgICBBU1NFUlQobV93aW5kb3cpOwotI2lmIEhBVkUoU0VDX1RSVVNU
X1NFUklBTElaQVRJT04pCi0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRv
dzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNv
bnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZvLnRydXN0KCkgc2hvd0dyb3Vw
OllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6
bV93aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250
ZXh0SW5mbzpudWxscHRyIGNlcnRpZmljYXRlczooTlNBcnJheSAqKWNlcnRpZmljYXRlSW5mby5j
ZXJ0aWZpY2F0ZUNoYWluKCkgc2hvd0dyb3VwOllFU107Ci0jZW5kaWYKLQotICAgIC8vIFRoaXMg
bXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHRydXN0IHBhbmVsIGhhcyBiZWVuIGRpc3BsYXllZCwg
YmVjYXVzZSB0aGUgY2VydGlmaWNhdGVWaWV3IGRvZXNuJ3QgZXhpc3QgYmVmb3JlaGFuZC4KLSAg
ICBTRkNlcnRpZmljYXRlVmlldyAqY2VydGlmaWNhdGVWaWV3ID0gW2NlcnRpZmljYXRlUGFuZWwg
Y2VydGlmaWNhdGVWaWV3XTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlUcnVzdDpZ
RVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RWRpdGFibGVUcnVzdDpOT107Ci0gICAgW2Nl
cnRpZmljYXRlVmlldyBzZXREaXNwbGF5RGV0YWlsczpZRVNdOwotICAgIFtjZXJ0aWZpY2F0ZVZp
ZXcgc2V0RGV0YWlsc0Rpc2Nsb3NlZDpZRVNdOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhi
ZDA4ZmY5ZDQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRp
b24uaD4KLSNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1P
QkpDX0NMQVNTIFdLV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJQYWdl
UHJveHk7Ci19Ci0KLUBwcm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU7
Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkg
V0tXZWJWaWV3ICp3ZWJWaWV3OwotQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRlOwotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4p
aW5zcGVjdGVkUGFnZTsKLQotKyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJWaWV3OihOU1ZpZXcg
Kil2aWV3OwotCi1AZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVs
ZWdhdGUgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9s
bGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcjsKLS0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0
b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdD
b250cm9sbGVyOwotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6
KE5TV2luZG93ICopbmV3V2luZG93OwotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRp
ZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdD
b250cm9sbGVyOwotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9FTkQKLQotI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ5MjYzZTBmZDZlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDI3MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyLmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkFQ
SU5hdmlnYXRpb24uaCIKLSNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKLSNpbXBvcnQgIldLRnJh
bWVJbmZvLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tO
YXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgotI2lt
cG9ydCAiV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJXS1ByZWZlcmVuY2VzUHJp
dmF0ZS5oIgotI2ltcG9ydCAiV0tQcm9jZXNzUG9vbEludGVybmFsLmgiCi0jaW1wb3J0ICJXS1VJ
RGVsZWdhdGVQcml2YXRlLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3UHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViSW5zcGVjdG9y
UHJveHkuaCIKLSNpbXBvcnQgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgotI2ltcG9ydCAiV2Vi
UGFnZVByb3h5LmgiCi0jaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KLQotQGludGVyZmFjZSBX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICgpIDxXS1VJRGVsZWdhdGUsIFdLTmF2aWdhdGlvbkRl
bGVnYXRlLCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPgotQGVuZAotCi1AaW1wbGVtZW50
YXRpb24gV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB7Ci0gICAgTmFrZWRQdHI8V2ViS2l0OjpX
ZWJQYWdlUHJveHk+IF9pbnNwZWN0ZWRQYWdlOwotICAgIFJldGFpblB0cjxXS0luc3BlY3RvcldL
V2ViVmlldz4gX3dlYlZpZXc7Ci0gICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXJEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3Rl
ZFBhZ2UKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIC8vIFRoZSAobG9jYWwpIGluc3BlY3RlZCBwYWdlIGlzIG5pbCBpZiB0aGUg
Y29udHJvbGxlciBpcyBob3N0aW5nIGEgUmVtb3RlIFdlYiBJbnNwZWN0b3Igdmlldy4KLSAgICBf
aW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgaWYgKF93ZWJWaWV3KSB7Ci0gICAgICAgIFtfd2ViVmll
dyBzZXRVSURlbGVnYXRlOm5pbF07Ci0gICAgICAgIFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVs
ZWdhdGU6bmlsXTsKLSAgICAgICAgW193ZWJWaWV3IHNldEluc3BlY3RvcldLV2ViVmlld0RlbGVn
YXRlOm5pbF07Ci0gICAgICAgIF93ZWJWaWV3ID0gbmlsOwotICAgIH0KLQotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotLSAoaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4p
ZGVsZWdhdGUKLXsKLSAgICByZXR1cm4gX2RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwotfQot
Ci0tIChXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgLy8gQ29uc3RydWN0IGxhemlseSBzbyB0
aGUgY2xpZW50IGNhbiBzZXQgdGhlIGRlbGVnYXRlIGJlZm9yZSB0aGUgV2ViVmlldyBpcyBjcmVh
dGVkLgotICAgIGlmICghX3dlYlZpZXcpIHsKLSAgICAgICAgTlNSZWN0IGluaXRpYWxGcmFtZSA9
IE5TTWFrZVJlY3QoMCwgMCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRv
d1dpZHRoLCBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0KTsK
LSAgICAgICAgX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tJbnNwZWN0b3JXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6aW5pdGlhbEZyYW1lIGNvbmZpZ3VyYXRpb246W3NlbGYgY29uZmlndXJh
dGlvbl1dKTsKLSAgICAgICAgW193ZWJWaWV3IHNldFVJRGVsZWdhdGU6c2VsZl07Ci0gICAgICAg
IFtfd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfd2ViVmll
dyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW193ZWJWaWV3
IF9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6Tk9dOwotICAgICAgICBbX3dl
YlZpZXcgX3NldFVzZVN5c3RlbUFwcGVhcmFuY2U6WUVTXTsKLSAgICAgICAgW193ZWJWaWV3IHNl
dEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJs
ZV07Ci0gICAgfQotCi0gICAgcmV0dXJuIF93ZWJWaWV3LmdldCgpOwotfQotCi0tICh2b2lkKXNl
dERlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPilkZWxlZ2F0
ZQotewotICAgIF9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0tIChXS1dlYlZpZXdDb25maWd1
cmF0aW9uICopY29uZmlndXJhdGlvbgotewotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0KLSAgICBXS1ByZWZl
cmVuY2VzICpwcmVmZXJlbmNlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXM7Ci0g
ICAgcHJlZmVyZW5jZXMuX2FsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyA9IFlFUzsKLSAgICBb
Y29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsK
LSAgICBwcmVmZXJlbmNlcy5fc3RvcmFnZUJsb2NraW5nUG9saWN5ID0gX1dLU3RvcmFnZUJsb2Nr
aW5nUG9saWN5QWxsb3dBbGw7Ci0gICAgcHJlZmVyZW5jZXMuX2phdmFTY3JpcHRSdW50aW1lRmxh
Z3MgPSAwOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5z
cGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBz
ZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy5fZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCA9IFlFUzsK
LSAgICBwcmVmZXJlbmNlcy5fbG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQg
PSBZRVM7Ci0jZW5kaWYKLQotICAgIHByZWZlcmVuY2VzLl9kaWFnbm9zdGljTG9nZ2luZ0VuYWJs
ZWQgPSBZRVM7Ci0KLSAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRl
clRlc3Q6KV0pIHsKLSAgICAgICAgaWYgKFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDpzZWxmXSkgewotICAgICAgICAgICAgcHJlZmVyZW5jZXMu
X2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID0gTk87Ci0gICAgICAgICAgICBw
cmVmZXJlbmNlcy5fcGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQg
PSBOTzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFtjb25maWd1cmF0aW9uIHNldFByb2Nlc3NQ
b29sOndyYXBwZXIoV2ViS2l0OjppbnNwZWN0b3JQcm9jZXNzUG9vbChXZWJLaXQ6Omluc3BlY3Rv
ckxldmVsRm9yUGFnZShfaW5zcGVjdGVkUGFnZSkpKV07Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3Nl
dEdyb3VwSWRlbnRpZmllcjpXZWJLaXQ6Omluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJGb3JQ
YWdlKF9pbnNwZWN0ZWRQYWdlKV07Ci0KLSAgICByZXR1cm4gY29uZmlndXJhdGlvbi5hdXRvcmVs
ZWFzZSgpOwotfQotCi0rIChCT09MKXZpZXdJc0luc3BlY3RvcldlYlZpZXc6KE5TVmlldyAqKXZp
ZXcKLXsKLSAgICByZXR1cm4gW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV0tJbnNwZWN0b3JXS1dlYlZp
ZXcgY2xhc3NdXTsKLX0KLQotLy8gTUFSSzogV0tVSURlbGVnYXRlIG1ldGhvZHMKLQotLSAodm9p
ZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoQ0dSZWN0KSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIGlm
ICghX3dlYlZpZXcuZ2V0KCkud2luZG93KQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDR1Jl
Y3RaZXJvKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5TUmVjdFRvQ0dS
ZWN0KFt3ZWJWaWV3IGZyYW1lXSkpOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOihDR1JlY3QpZnJhbWUKLXsKLSAgICBpZiAoIV93ZWJW
aWV3LmdldCgpLndpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW193ZWJWaWV3LmdldCgp
LndpbmRvdyBzZXRGcmFtZTpOU1JlY3RGcm9tQ0dSZWN0KGZyYW1lKSBkaXNwbGF5OllFU107Ci19
Ci0KLS0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBydW5PcGVuUGFuZWxXaXRo
UGFyYW1ldGVyczooV0tPcGVuUGFuZWxQYXJhbWV0ZXJzICopcGFyYW1ldGVycyBpbml0aWF0ZWRC
eUZyYW1lOihXS0ZyYW1lSW5mbyAqKWZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
U0FycmF5PE5TVVJMICo+ICpVUkxzKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIE5TT3BlblBh
bmVsICpvcGVuUGFuZWwgPSBbTlNPcGVuUGFuZWwgb3BlblBhbmVsXTsKLSAgICBvcGVuUGFuZWwu
YWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24gPSBwYXJhbWV0ZXJzLmFsbG93c011bHRpcGxlU2VsZWN0
aW9uOwotCi0gICAgYXV0byByZXBvcnRTZWxlY3RlZEZpbGVzID0gXihOU0ludGVnZXIgcmVzdWx0
KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2RhbFJlc3BvbnNlT0spCi0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihvcGVuUGFuZWwuVVJMcyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0gICAgfTsKLQotICAgIGlmIChfd2ViVmll
dy5nZXQoKS53aW5kb3cpCi0gICAgICAgIFtvcGVuUGFuZWwgYmVnaW5TaGVldE1vZGFsRm9yV2lu
ZG93Ol93ZWJWaWV3LmdldCgpLndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpyZXBvcnRTZWxlY3Rl
ZEZpbGVzXTsKLSAgICBlbHNlCi0gICAgICAgIHJlcG9ydFNlbGVjdGVkRmlsZXMoW29wZW5QYW5l
bCBydW5Nb2RhbF0pOwotfQotCi0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjooV0tTZWN1cml0eU9yaWdpbiAq
KXNlY3VyaXR5T3JpZ2luIGN1cnJlbnRRdW90YToodW5zaWduZWQgbG9uZyBsb25nKWN1cnJlbnRR
dW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50T3JpZ2lu
VXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50VXNh
Z2UgZXhwZWN0ZWRVc2FnZToodW5zaWduZWQgbG9uZyBsb25nKWV4cGVjdGVkVXNhZ2UgZGVjaXNp
b25IYW5kbGVyOih2b2lkICheKSh1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEpKWRlY2lzaW9u
SGFuZGxlcgotewotICAgIGRlY2lzaW9uSGFuZGxlcihzdGQ6Om1heDx1bnNpZ25lZCBsb25nIGxv
bmc+KGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2FnZSAqIDEuMjUpKTsKLX0KLQotLSAoTlNNZW51
ICopX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgY29udGV4dE1lbnU6KE5TTWVudSAqKW1l
bnUgZm9yRWxlbWVudDooX1dLQ29udGV4dE1lbnVFbGVtZW50SW5mbyAqKWVsZW1lbnQKLXsKLSAg
ICBmb3IgKE5TSW50ZWdlciBpID0gbWVudS5udW1iZXJPZkl0ZW1zIC0gMTsgaSA+PSAwOyAtLWkp
IHsKLSAgICAgICAgTlNNZW51SXRlbSAqaXRlbSA9IFttZW51IGl0ZW1BdEluZGV4OmldOwotICAg
ICAgICBzd2l0Y2ggKGl0ZW0udGFnKSB7Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1U
YWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1U
YWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1U
YWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0ZW1U
YWdDb3B5SW1hZ2VVcmxUb0NsaXBib2FyZDoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgY2FzZSBrV0tDb250ZXh0TWVudUl0
ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgICAgIFttZW51IHJlbW92ZUl0ZW1BdElu
ZGV4OmldOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gbWVudTsKLX0KLQotLy8gTUFSSzogV0tOYXZpZ2F0aW9uRGVsZWdhdGUgbWV0aG9kcwotCi0t
ICh2b2lkKXdlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZTooV0tXZWJWaWV3ICop
d2ViVmlldwotewotICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFz
aDopXSkKLSAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3Rv
ckRpZENyYXNoOnNlbGZdOwotfQotCi0tICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZpZ2F0aW9uQWN0aW9uICop
bmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4pKFdLTmF2aWdhdGlvbkFj
dGlvblBvbGljeSkpZGVjaXNpb25IYW5kbGVyCi17Ci0gICAgLy8gQWxsb3cgbm9uLW1haW4gZnJh
bWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgotICAgIGlmICghbmF2aWdhdGlvbkFjdGlvbi50YXJn
ZXRGcmFtZS5pc01haW5GcmFtZSkgewotICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0
aW9uQWN0aW9uUG9saWN5QWxsb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
QWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBpbnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShuYXZpZ2F0aW9u
QWN0aW9uLnJlcXVlc3QuVVJMKSkgewotICAgICAgICBkZWNpc2lvbkhhbmRsZXIoV0tOYXZpZ2F0
aW9uQWN0aW9uUG9saWN5QWxsb3cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
UHJldmVudCBldmVyeXRoaW5nIGVsc2UuCi0gICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlv
bkFjdGlvblBvbGljeUNhbmNlbCk7Ci0gICAgCi0gICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBp
biB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgaWYgKF9pbnNwZWN0ZWRQYWdlKQotICAgICAgICBf
aW5zcGVjdGVkUGFnZS0+bG9hZFJlcXVlc3QobmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0KTsKLX0K
LQotLy8gTUFSSzogV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBtZXRob2RzCi0KLS0gKHZv
aWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZp
ZXcKLXsKLSAgICBpZiAoIV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBP
cHRpb25TZXQ8V2ViQ29yZTo6UmVsb2FkT3B0aW9uPiByZWxvYWRPcHRpb25zOwotICAgIGlmIChX
ZWJLaXQ6OmxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aEV4cGly
ZWRPbmx5UmVsb2FkQmVoYXZpb3IpKQotICAgICAgICByZWxvYWRPcHRpb25zLmFkZChXZWJDb3Jl
OjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KTsKLQotICAgIF9pbnNwZWN0ZWRQYWdlLT5yZWxv
YWQocmVsb2FkT3B0aW9ucyk7Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2Fk
RnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCFf
aW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX2luc3BlY3RlZFBhZ2UtPnJl
bG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwotfQotCi0tICh2b2lkKWlu
c3BlY3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3Zl
VG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYm
IFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlcjp3aWxsTW92ZVRvV2luZG93OildKQotICAgICAgICBbX2RlbGVnYXRlIGluc3BlY3Rv
clZpZXdDb250cm9sbGVyOnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOwotfQotCi0t
ICh2b2lkKWluc3BlY3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dl
YlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVU
b1dpbmRvdzopXSkKLSAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRp
ZE1vdmVUb1dpbmRvdzpzZWxmXTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tX
ZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZp
ZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3ZTc3Y2ZlN2YuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmll
dy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+Ci0KLSNpZiBQTEFURk9STShNQUMp
Ci0KLUBwcm90b2NvbCBXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOwotCi1AaW50ZXJmYWNl
IFdLSW5zcGVjdG9yV0tXZWJWaWV3IDogV0tXZWJWaWV3Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
d2VhaykgaWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+IGluc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlOwotQGVuZAotCi1AcHJvdG9jb2wgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZQotQHJlcXVpcmVkCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0
b3JXS1dlYlZpZXcgKil3ZWJWaWV3OwotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdSZWxvYWRG
cm9tT3JpZ2luOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7Ci0tICh2b2lkKWluc3Bl
Y3RvcldLV2ViVmlldzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3IHdpbGxNb3ZlVG9X
aW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93OwotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdE
aWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKLUBlbmQKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGJmZWY0YTAxYmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldLSW5zcGVjdG9y
V0tXZWJWaWV3LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIldLSW5zcGVjdG9y
UHJpdmF0ZU1hYy5oIgotI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+Ci0KLUBpbXBsZW1lbnRh
dGlvbiBXS0luc3BlY3RvcldLV2ViVmlldyB7Ci0gICAgV2Vha09iakNQdHI8aWQgPFdLSW5zcGVj
dG9yV0tXZWJWaWV3RGVsZWdhdGU+PiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci19Ci0K
LS0gKE5TUmVjdClfb3BhcXVlUmVjdEZvcldpbmRvd01vdmVXaGVuSW5UaXRsZWJhcgotewotICAg
IC8vIFRoaXMgY29udmluY2VzIEFwcEtpdCB0byBhbGxvdyB3aW5kb3cgbW92ZXMgd2hlbiBjbGlj
a2luZyBhbnl3aGVyZSBpbiB0aGUgdGl0bGViYXIgKHRvcCAyMnB0KQotICAgIC8vIHdoZW4gdGhp
cyB2aWV3J3MgY29udGVudHMgY292ZXIgdGhlIGVudGlyZSB3aW5kb3cncyBjb250ZW50cywgaW5j
bHVkaW5nIHRoZSB0aXRsZWJhci4KLSAgICByZXR1cm4gTlNaZXJvUmVjdDsKLX0KLQotLSAoTlNJ
bnRlZ2VyKXRhZwotewotICAgIHJldHVybiBXS0luc3BlY3RvclZpZXdUYWc7Ci19Ci0KLS0gKGlk
IDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZQotewotICAgIHJldHVybiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUuZ2V0QXV0b3JlbGVh
c2VkKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6KGlkIDxX
S0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilkZWxlZ2F0ZQotewotICAgIF9pbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0tIChJQkFjdGlvbilyZWxvYWQ6KGlk
KXNlbmRlcgotewotICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3Rv
cldLV2ViVmlld1JlbG9hZDpzZWxmXTsKLX0KLQotLSAoSUJBY3Rpb24pcmVsb2FkRnJvbU9yaWdp
bjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5z
cGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjpzZWxmXTsKLX0KLQotLSAodm9pZCl2aWV3
V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBbc3VwZXIgdmll
d1dpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZp
ZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXc6c2VsZiB3aWxsTW92ZVRvV2luZG93Om5ld1dp
bmRvd107Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwotewotICAgIFtzdXBlciB2
aWV3RGlkTW92ZVRvV2luZG93XTsKLSAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0
ZSBpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6c2VsZl07Ci19Ci0KLUBlbmQKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVj
dG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTcyOGQ0MzVjLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9y
UHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4MDYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgot
Ci0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMuaCIK
LSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLVmlld0lu
dGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSW5z
cGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCi0jaW1wb3J0
ICJfV0tJbnNwZWN0b3JXaW5kb3cuaCIKLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2Vy
dGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0
ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLXN0YXRp
YyBjb25zdCBOU1VJbnRlZ2VyIHdpbmRvd1N0eWxlTWFzayA9IE5TV2luZG93U3R5bGVNYXNrVGl0
bGVkIHwgTlNXaW5kb3dTdHlsZU1hc2tDbG9zYWJsZSB8IE5TV2luZG93U3R5bGVNYXNrTWluaWF0
dXJpemFibGUgfCBOU1dpbmRvd1N0eWxlTWFza1Jlc2l6YWJsZSB8IE5TV2luZG93U3R5bGVNYXNr
RnVsbFNpemVDb250ZW50VmlldzsKLQotLy8gVGhlIHRpbWUgd2Uga2VlcCBvdXIgV2ViVmlldyBh
bGl2ZSBiZWZvcmUgY2xvc2luZyBpdCBhbmQgaXRzIHByb2Nlc3MuCi0vLyBSZXVzaW5nIHRoZSBX
ZWJWaWV3IGltcHJvdmVzIHN0YXJ0IHVwIHRpbWUgZm9yIHBlb3BsZSB0aGF0IGp1bXAgaW4gYW5k
IG91dCBvZiB0aGUgSW5zcGVjdG9yLgotc3RhdGljIGNvbnN0IFNlY29uZHMgd2ViVmlld0Nsb3Nl
VGltZW91dCB7IDFfbWluIH07Ci0KLXN0YXRpYyB2b2lkKiBrV2luZG93Q29udGVudExheW91dE9i
c2VydmVyQ29udGV4dCA9ICZrV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dDsKLQot
QGludGVyZmFjZSBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgKCkgPE5TV2luZG93RGVs
ZWdhdGUsIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4KLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHkq
KWluc3BlY3RvclByb3h5OwotLSAodm9pZClpbnZhbGlkYXRlOwotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBXS1dlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgewotICAgIFdlYktpdDo6V2Vi
SW5zcGVjdG9yUHJveHkqIF9pbnNwZWN0b3JQcm94eTsKLX0KLQotLSAoV0tJbnNwZWN0b3JSZWYp
aW5zcGVjdG9yUmVmCi17Ci0gICAgcmV0dXJuIHRvQVBJKF9pbnNwZWN0b3JQcm94eSk7Ci19Ci0K
LS0gKF9XS0luc3BlY3RvciAqKWluc3BlY3RvcgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
Ci0gICAgICAgIHJldHVybiB3cmFwcGVyKCpfaW5zcGVjdG9yUHJveHkpOwotICAgIHJldHVybiBu
aWw7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJL
aXQ6OldlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQotewotICAgIEFTU0VSVF9BUkco
aW5zcGVjdG9yUHJveHksIGluc3BlY3RvclByb3h5KTsKLQotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gVW5yZXRhaW5lZCB0byBh
dm9pZCBhIHJlZmVyZW5jZSBjeWNsZS4KLSAgICBfaW5zcGVjdG9yUHJveHkgPSBpbnNwZWN0b3JQ
cm94eTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWludmFsaWRhdGUKLXsKLSAg
ICBfaW5zcGVjdG9yUHJveHkgPSBudWxscHRyOwotfQotCi0tIChOU1JlY3Qpd2luZG93OihOU1dp
bmRvdyAqKXdpbmRvdyB3aWxsUG9zaXRpb25TaGVldDooTlNXaW5kb3cgKilzaGVldCB1c2luZ1Jl
Y3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgcmV0
dXJuIE5TTWFrZVJlY3QoMCwgX2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS5oZWlnaHQoKSwg
X2luc3BlY3RvclByb3h5LT5zaGVldFJlY3QoKS53aWR0aCgpLCAwKTsKLSAgICByZXR1cm4gcmVj
dDsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRNb3ZlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94
eS0+d2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRSZXNpemU6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94
eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT53aW5kb3dGcmFtZURpZENoYW5nZSgpOwotfQot
Ci0tICh2b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
LXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmNs
b3NlKCk7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkRW50ZXJGdWxsU2NyZWVuOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAg
IF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2
b2lkKXdpbmRvd0RpZEV4aXRGdWxsU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlv
bgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+
d2luZG93RnVsbFNjcmVlbkRpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKWluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICAvLyBS
ZXNpemluZyB0aGUgdmlld3Mgd2hpbGUgaW5zaWRlIHRoaXMgbm90aWZpY2F0aW9uIGNhbiBsZWFk
IHRvIGJhZCByZXN1bHRzIHdoZW4gZW50ZXJpbmcKLSAgICAvLyBvciBleGl0aW5nIGZ1bGwgc2Ny
ZWVuLiBUbyBhdm9pZCB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgd29yayBhZnRlciBhIGRl
bGF5LiBXZSBvbmx5Ci0gICAgLy8gZGVwZW5kIG9uIHRoaXMgZm9yIGVuZm9yY2luZyB0aGUgaGVp
Z2h0IGNvbnN0cmFpbnRzLCBzbyBhIHNtYWxsIGRlbGF5IGlzbid0IHRlcnJpYmxlLiBNb3N0Ci0g
ICAgLy8gb2YgdGhlIHRpbWUgdGhlIHZpZXdzIHdpbGwgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0
IGZyYW1lcyBiZWNhdXNlIG9mIGF1dG9yZXNpemluZyBtYXNrcy4KLQotICAgIGRpc3BhdGNoX2Fm
dGVyKERJU1BBVENIX1RJTUVfTk9XLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewotICAg
ICAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICAgICAgX2luc3BlY3RvclByb3h5LT5p
bnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClvYnNl
cnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlkKW9iamVj
dCBjaGFuZ2U6KE5TRGljdGlvbmFyeTxOU0tleVZhbHVlQ2hhbmdlS2V5LCBpZD4gKiljaGFuZ2Ug
Y29udGV4dDoodm9pZCAqKWNvbnRleHQKLXsKLSAgICBpZiAoY29udGV4dCAhPSBrV2luZG93Q29u
dGVudExheW91dE9ic2VydmVyQ29udGV4dCkgewotICAgICAgICBbc3VwZXIgb2JzZXJ2ZVZhbHVl
Rm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0Om9iamVjdCBjaGFuZ2U6Y2hhbmdlIGNvbnRleHQ6
Y29udGV4dF07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93
ID0gb2JqZWN0OwotICAgIEFTU0VSVChbd2luZG93IGlzS2luZE9mQ2xhc3M6W05TV2luZG93IGNs
YXNzXV0pOwotICAgIGlmICh3aW5kb3cuaW5MaXZlUmVzaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfSk7Ci19
Ci0KLS8vIE1BUks6IFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSBtZXRob2RzCi0K
LS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDooV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0gICAgaWYg
KF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZvckNyYXNo
KCk7Ci19Ci0KLS0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JJc1VuZGVy
VGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVy
Ci17Ci0gICAgcmV0dXJuIF9pbnNwZWN0b3JQcm94eSA/IF9pbnNwZWN0b3JQcm94eS0+aXNVbmRl
clRlc3QoKSA6IGZhbHNlOwotfQotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVyOihX
S0luc3BlY3RvclZpZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2lsbE1v
dmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsKLSAgICBpZiAoX2luc3BlY3RvclBy
b3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5k
b3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOwotfQotCi0tICh2b2lk
KWluc3BlY3RvclZpZXdDb250cm9sbGVyRGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKLXsKLSAgICBpZiAoX2luc3BlY3Rv
clByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPmF0dGFjaG1lbnREaWRNb3ZlVG9XaW5k
b3coaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIud2ViVmlldy53aW5kb3cpOwotfQotCi1AZW5kCi0K
LW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywg
TlNWaWV3ICpuZXdWaWV3KQotewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKSBuYW1lOk5TVmlld0ZyYW1l
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpvbGRWaWV3XTsKLSAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkg
c2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZTopIG5hbWU6TlNW
aWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om5ld1ZpZXddOwotCi0gICAgaWYg
KG1faXNBdHRhY2hlZCkKLSAgICAgICAgYXR0YWNoKG1fYXR0YWNobWVudFNpZGUpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50V2lsbE1vdmVGcm9tV2luZG93KE5TV2lu
ZG93ICpvbGRXaW5kb3cpCi17Ci0gICAgaWYgKG1faXNPYnNlcnZpbmdDb250ZW50TGF5b3V0UmVj
dCkgewotICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVudExheW91dFJlY3QgPSBmYWxzZTsKLSAg
ICAgICAgW29sZFdpbmRvdyByZW1vdmVPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktl
eVBhdGg6QCJjb250ZW50TGF5b3V0UmVjdCIgY29udGV4dDprV2luZG93Q29udGVudExheW91dE9i
c2VydmVyQ29udGV4dF07Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRh
Y2htZW50RGlkTW92ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpCi17Ci0gICAgaWYgKG1f
aXNBdHRhY2hlZCAmJiAhIW5ld1dpbmRvdykgewotICAgICAgICBtX2lzT2JzZXJ2aW5nQ29udGVu
dExheW91dFJlY3QgPSB0cnVlOwotICAgICAgICBbbmV3V2luZG93IGFkZE9ic2VydmVyOm1fb2Jq
Q0FkYXB0ZXIuZ2V0KCkgZm9yS2V5UGF0aDpAImNvbnRlbnRMYXlvdXRSZWN0IiBvcHRpb25zOjAg
Y29udGV4dDprV2luZG93Q29udGVudExheW91dE9ic2VydmVyQ29udGV4dF07Ci0gICAgICAgIGlu
c3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAotewotICAgIGlmICgh
bV9pbnNwZWN0b3JXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGxldmVs
ID0gaW5zcGVjdGlvbkxldmVsKCk7Ci0gICAgaWYgKGxldmVsID4gMSkgewotICAgICAgICBOU1N0
cmluZyAqZGVidWdUaXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJ
TkcoIldlYiBJbnNwZWN0b3IgWyVkXSDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0
bGUgd2hlbiBpbnNwZWN0aW5nIFdlYiBJbnNwZWN0b3IiKSwgbGV2ZWwsIChOU1N0cmluZyAqKW1f
dXJsU3RyaW5nXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOmRlYnVnVGl0
bGVdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TU3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OldFQl9VSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldl
YiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1fdXJsU3RyaW5nXTsKLSAg
ICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldFRpdGxlOnRpdGxlXTsKLSAgICB9Ci19Ci0KLVJl
dGFpblB0cjxOU1dpbmRvdz4gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93
KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZSB0YXJnZXRUeXBl
KQotewotICAgIE5TUmVjdCB3aW5kb3dGcmFtZSA9ICFOU0lzRW1wdHlSZWN0KHNhdmVkV2luZG93
RnJhbWUpID8gc2F2ZWRXaW5kb3dGcmFtZSA6IE5TTWFrZVJlY3QoMCwgMCwgaW5pdGlhbFdpbmRv
d1dpZHRoLCBpbml0aWFsV2luZG93SGVpZ2h0KTsKLSAgICBhdXRvIHdpbmRvdyA9IGFkb3B0TlMo
W1tfV0tJbnNwZWN0b3JXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93RnJh
bWUgc3R5bGVNYXNrOndpbmRvd1N0eWxlTWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVy
ZWQgZGVmZXI6Tk9dKTsKLSAgICBbd2luZG93IHNldE1pblNpemU6TlNNYWtlU2l6ZShtaW5pbXVt
V2luZG93V2lkdGgsIG1pbmltdW1XaW5kb3dIZWlnaHQpXTsKLSAgICBbd2luZG93IHNldFJlbGVh
c2VkV2hlbkNsb3NlZDpOT107Ci0gICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6KFt3
aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yRnVs
bFNjcmVlblByaW1hcnkpXTsKLQotICAgIGJvb2wgZm9yUmVtb3RlVGFyZ2V0ID0gdGFyZ2V0VHlw
ZSA9PSBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlOwotICAgIFt3aW5kb3cgc2V0Rm9yUmVt
b3RlVGFyZ2V0OmZvclJlbW90ZVRhcmdldF07Ci0KLSAgICBDR0Zsb2F0IGFwcHJveGltYXRlbHlI
YWxmU2NyZWVuU2l6ZSA9IChbd2luZG93IHNjcmVlbl0uZnJhbWUuc2l6ZS53aWR0aCAvIDIpIC0g
NDsKLSAgICBDR0Zsb2F0IG1pbmltdW1GdWxsU2NyZWVuV2lkdGggPSBzdGQ6Om1heDxDR0Zsb2F0
Pig2MzYsIGFwcHJveGltYXRlbHlIYWxmU2NyZWVuU2l6ZSk7Ci0gICAgW3dpbmRvdyBzZXRNaW5G
dWxsU2NyZWVuQ29udGVudFNpemU6TlNNYWtlU2l6ZShtaW5pbXVtRnVsbFNjcmVlbldpZHRoLCBt
aW5pbXVtV2luZG93SGVpZ2h0KV07Ci0gICAgW3dpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6
KFt3aW5kb3cgY29sbGVjdGlvbkJlaGF2aW9yXSB8IE5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9y
RnVsbFNjcmVlbkFsbG93c1RpbGluZyldOwotCi0gICAgW3dpbmRvdyBzZXRUaXRsZWJhckFwcGVh
cnNUcmFuc3BhcmVudDpZRVNdOwotCi0gICAgLy8gQ2VudGVyIHRoZSB3aW5kb3cgaWYgdGhlIHNh
dmVkIGZyYW1lIHdhcyBlbXB0eS4KLSAgICBpZiAoTlNJc0VtcHR5UmVjdChzYXZlZFdpbmRvd0Zy
YW1lKSkKLSAgICAgICAgW3dpbmRvdyBjZW50ZXJdOwotCi0gICAgcmV0dXJuIHdpbmRvdzsKLX0K
LQotV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2UoKQotewotICAgIEFTU0VSVChpbnNwZWN0ZWRQYWdlKCkpOwotICAgIEFTU0VSVCghbV9p
bnNwZWN0b3JQYWdlKTsKLQotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVy
LnN0b3AoKTsKLQotICAgIGlmIChtX2luc3BlY3RvclZpZXdDb250cm9sbGVyKSB7Ci0gICAgICAg
IEFTU0VSVChtX29iakNBZGFwdGVyKTsKLSAgICAgICAgcmV0dXJuIFttX2luc3BlY3RvclZpZXdD
b250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKLSAgICB9Ci0KLSAgICBtX29iakNBZGFw
dGVyID0gYWRvcHROUyhbW1dLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5p
dFdpdGhXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3
ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpDQWRhcHRl
ci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlOikg
bmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6aW5zcGVjdGVkVmll
d107Ci0KLSAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1dLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkUGFnZTppbnNwZWN0ZWRQ
YWdlKCldKTsKLSAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0
ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgIFdlYlBhZ2VQcm94eSAqaW5zcGVjdG9yUGFn
ZSA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS5nZXQoKTsKLSAg
ICBBU1NFUlQoaW5zcGVjdG9yUGFnZSk7Ci0KLSAgICByZXR1cm4gaW5zcGVjdG9yUGFnZTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygp
Ci17Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RvcldpbmRvdyk7Ci0KLSAgICBOU1N0cmluZyAqc2F2
ZWRXaW5kb3dGcmFtZVN0cmluZyA9IGluc3BlY3RlZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVy
ZW5jZXMoKS5pbnNwZWN0b3JXaW5kb3dGcmFtZSgpOwotICAgIE5TUmVjdCBzYXZlZFdpbmRvd0Zy
YW1lID0gTlNSZWN0RnJvbVN0cmluZyhzYXZlZFdpbmRvd0ZyYW1lU3RyaW5nKTsKLQotICAgIG1f
aW5zcGVjdG9yV2luZG93ID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93
KHNhdmVkV2luZG93RnJhbWUsIEluc3BlY3Rpb25UYXJnZXRUeXBlOjpMb2NhbCk7Ci0gICAgW21f
aW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm1fb2JqQ0FkYXB0ZXIuZ2V0KCldOwotCi0gICAg
V0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld107Ci0gICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFttX2luc3BlY3RvcldpbmRvdyBjb250
ZW50Vmlld107Ci0gICAgaW5zcGVjdG9yVmlldy5mcmFtZSA9IFtjb250ZW50VmlldyBib3VuZHNd
OwotICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXddOwotCi0gICAgdXBk
YXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZFBhZ2UoKQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkIHx8ICFtX2lu
c3BlY3RvcldpbmRvdyk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlcikgewot
ICAgICAgICBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxd
OwotICAgICAgICBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIH0KLQotICAg
IGlmIChtX29iakNBZGFwdGVyKSB7Ci0gICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICAg
ICAgW21fb2JqQ0FkYXB0ZXIgaW52YWxpZGF0ZV07Ci0gICAgICAgIG1fb2JqQ0FkYXB0ZXIgPSBu
aWw7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0
ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCgpCi17Ci0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdp
bmRvdygpCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFttX2luc3Bl
Y3RvcldpbmRvdyBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cg
Y2xvc2VdOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci0KLSAgICBt
X2Nsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3Qod2ViVmlld0Ns
b3NlVGltZW91dCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xv
c2VGb3JDcmFzaCgpCi17Ci0gICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIu
c3RvcCgpOwotCi0gICAgY2xvc2VGcm9udGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZSgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIGlmIChtX2lz
QXR0YWNoZWQpIHsKLSAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewotICAgICAgICBbbV9pbnNwZWN0
b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IGNs
b3NlXTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7Ci0gICAgfQotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQotewotICAgIGluc3BlY3Rl
ZFBhZ2UoKS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JXaW5kb3dG
cmFtZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9u
dCgpCi17Ci0gICAgLy8gSWYgdGhlIFdlYiBJbnNwZWN0b3IgaXMgbm8gbG9uZ2VyIGluIHRoZSBz
YW1lIHdpbmRvdyBhcyB0aGUgaW5zcGVjdGVkIHZpZXcsCi0gICAgLy8gdGhlbiB3ZSBuZWVkIHRv
IHJlb3BlbiB0aGUgSW5zcGVjdG9yIHRvIGdldCBpdCBhdHRhY2hlZCB0byB0aGUgcmlnaHQgd2lu
ZG93LgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGRyYWdnaW5nIHRhYnMgdG8gYW5vdGhl
ciB3aW5kb3cgaW4gU2FmYXJpLgotICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgW21faW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXIgd2ViVmlld10ud2luZG93ICE9IGluc3BlY3RlZFBhZ2UoKS0+cGxhdGZv
cm1XaW5kb3coKSkgewotICAgICAgICBvcGVuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IGJy
aW5nIGEgYmFja2dyb3VuZCB0YWIgaW4gU2FmYXJpIHRvIHRoZSBmcm9udCwgb25seSBpdHMgd2lu
ZG93LgotICAgIFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cgbWFr
ZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLSAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2ViVmlld10ud2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjpbbV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3ZWJWaWV3XV07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJp
bmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17Ci0gICAgW2luc3BlY3RlZFBhZ2UoKS0+cGxhdGZv
cm1XaW5kb3coKSBtYWtlS2V5QW5kT3JkZXJGcm9udDpuaWxdOwotfQotCi1ib29sIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJv
YmxlbS8xMDkzNzY4OD46IHRoaXMgd2lsbCBub3QgcmV0dXJuIGZhbHNlIGZvciBhIGJhY2tncm91
bmQgdGFiIGluIFNhZmFyaSwgb25seSBhIGJhY2tncm91bmQgd2luZG93LgotICAgIHJldHVybiBt
X2lzVmlzaWJsZSAmJiBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS53aW5kb3cu
aXNNYWluV2luZG93OwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNhbkF0
dGFjaChib29sIHdlYlByb2Nlc3NDYW5BdHRhY2gpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRW
aWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIGlm
IChbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciB2aWV3SXNJbnNwZWN0b3JXZWJWaWV3Omluc3Bl
Y3RlZFZpZXddKQotICAgICAgICByZXR1cm4gd2ViUHJvY2Vzc0NhbkF0dGFjaDsKLQotICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0gICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NTsKLSAgICBzdGF0
aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA1MDA7Ci0KLSAgICBOU1JlY3Qg
aW5zcGVjdGVkVmlld0ZyYW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKLQotICAgIGZsb2F0IG1h
eGltdW1BdHRhY2hlZEhlaWdodCA9IE5TSGVpZ2h0KGluc3BlY3RlZFZpZXdGcmFtZSkgKiBtYXhp
bXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0
IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBOU1dp
ZHRoKGluc3BlY3RlZFZpZXdGcmFtZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICAv
LyBEbyBub3RoaW5nLgotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgbV91cmxTdHJp
bmcgPSB1cmxTdHJpbmc7Ci0KLSAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBD
ZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAgICBBU1NFUlQoIWNlcnRpZmlj
YXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWluUHRyPFNGQ2VydGlmaWNhdGVQYW5lbD4g
Y2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmljYXRlUGFuZWwgYWxsb2NdIGlu
aXRdKTsKLQotICAgIE5TV2luZG93ICp3aW5kb3c7Ci0gICAgaWYgKG1faW5zcGVjdG9yV2luZG93
KQotICAgICAgICB3aW5kb3cgPSBtX2luc3BlY3RvcldpbmRvdy5nZXQoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHdpbmRvdyA9IFtbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XSB3aW5k
b3ddOwotCi0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHdpbmRvdyA9IFtOU0FwcCBrZXlXaW5k
b3ddOwotCi0jaWYgSEFWRShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNh
dGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5pbCBkaWRF
bmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgdHJ1c3Q6Y2VydGlmaWNhdGVJbmZv
LnRydXN0KCkgc2hvd0dyb3VwOllFU107Ci0jZWxzZQotICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJl
Z2luU2hlZXRGb3JXaW5kb3c6d2luZG93IG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9y
Ok5VTEwgY29udGV4dEluZm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZp
Y2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOwotI2VuZGlmCi0KLSAg
ICAvLyBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBk
aXNwbGF5ZWQsIGJlY2F1c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9y
ZWhhbmQuCi0gICAgU0ZDZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZp
Y2F0ZVBhbmVsIGNlcnRpZmljYXRlVmlld107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNw
bGF5VHJ1c3Q6WUVTXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9d
OwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKLSAgICBbY2Vy
dGlmaWNhdGVWaWV3IHNldERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFs
b2cpCi17Ci0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBO
U1VSTCAqcGxhdGZvcm1VUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0
ZWRVUkwpLmdldCgpOwotICAgIGlmICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZvcm1V
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBUaGUg
dXNlciBtdXN0IGNvbmZpcm0gbmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhl
bS4KLSAgICAgICAgZm9yY2VTYXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQVNT
RVJUKHBsYXRmb3JtVVJMKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBOZWNlc3NhcnkgZm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcgc3Vn
Z2VzdGVkVVJMQ29weSA9IHN1Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENvcHkgPSBj
b250ZW50OwotCi0gICAgYXV0byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKLSAg
ICAgICAgQVNTRVJUKGFjdHVhbFVSTCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5zZXQoc3VnZ2VzdGVkVVJMQ29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAoYmFz
ZTY0RW5jb2RlZCkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGlu
ZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gZGF0YUNvbnRlbnQgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91
dC5kYXRhKCkgbGVuZ3RoOm91dC5zaXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVudCB3
cml0ZVRvVVJMOmFjdHVhbFVSTCBhdG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgW2NvbnRlbnRDb3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVT
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAgICAgIG1f
aW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpE
aWRTYXZlKFthY3R1YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQ
YWdlSUQoKSk7Ci0gICAgfTsKLQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7Ci0gICAgICAg
IHNhdmVUb1VSTChwbGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBO
U1NhdmVQYW5lbCAqcGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKLSAgICBwYW5lbC5u
YW1lRmllbGRTdHJpbmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OwotCi0g
ICAgLy8gSWYgd2UgaGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxl
IHRvIGEgcGF0aCBhbmQKLSAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNo
b3cuIE90aGVyd2lzZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1bHQgYmVoYXZpb3Ig
Zm9yIHRoZSBpbml0aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCi0gICAgaWYg
KHBsYXRmb3JtVVJMLmlzRmlsZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3Bs
YXRmb3JtVVJMIFVSTEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0KLSAgICBhdXRvIGNv
bXBsZXRpb25IYW5kbGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gTlNNb2RhbFJlc3BvbnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAgICAgc2F2ZVRvVVJM
KHBhbmVsLlVSTCk7Ci0gICAgfTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX2luc3BlY3Rv
cldpbmRvdyA/IG1faW5zcGVjdG9yV2luZG93LmdldCgpIDogW05TQXBwIGtleVdpbmRvd107Ci0g
ICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3BhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3
aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVsIHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJM
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgQVNTRVJUKCFzdWdnZXN0ZWRVUkwuaXNF
bXB0eSgpKTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNVUkw+IGFjdHVhbFVSTCA9IG1fc3VnZ2Vz
dGVkVG9BY3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCk7Ci0gICAgLy8gRG8gbm90IGFwcGVu
ZCB1bmxlc3MgdGhlIHVzZXIgaGFzIGFscmVhZHkgY29uZmlybWVkIHRoaXMgZmlsZW5hbWUgaW4g
c2F2ZSgpLgotICAgIGlmICghYWN0dWFsVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0Zp
bGVIYW5kbGUgKmhhbmRsZSA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdUb1VS
TDphY3R1YWxVUkwuZ2V0KCkgZXJyb3I6TlVMTF07Ci0gICAgW2hhbmRsZSBzZWVrVG9FbmRPZkZp
bGVdOwotICAgIFtoYW5kbGUgd3JpdGVEYXRhOltjb250ZW50IGRhdGFVc2luZ0VuY29kaW5nOk5T
VVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW2hhbmRsZSBjbG9zZUZpbGVdOwotCi0gICAgbV9p
bnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRp
ZEFwcGVuZChbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5zcGVjdG9yUGFnZS0+d2Vi
UGFnZUlEKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGcmFtZURpZENo
YW5nZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOwotICAgIEFTU0VSVChtX2lzVmlz
aWJsZSk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmIChtX2lzQXR0
YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTlNTdHJpbmcgKmZyYW1lU3RyaW5nID0gTlNTdHJpbmdGcm9tUmVjdChbbV9p
bnNwZWN0b3JXaW5kb3cgZnJhbWVdKTsKLSAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgp
LnByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yV2luZG93RnJhbWUoZnJhbWVTdHJpbmcpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5Ojp3aW5kb3dGdWxsU2NyZWVuRGlkQ2hhbmdlKCkKLXsK
LSAgICBBU1NFUlQoIW1faXNBdHRhY2hlZCk7Ci0gICAgQVNTRVJUKG1faXNWaXNpYmxlKTsKLSAg
ICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgaWYgKG1faXNBdHRhY2hlZCB8fCAh
bV9pc1Zpc2libGUgfHwgIW1faW5zcGVjdG9yV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCgp
KSk7ICAgIAotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0ZWRWaWV3RnJhbWVE
aWRDaGFuZ2UoQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uKQotewotICAgIGlmICghbV9pc1Zpc2li
bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0F0dGFjaGVkKSB7Ci0gICAgICAg
IC8vIENoZWNrIGlmIHRoZSBhdHRhY2ggYXZhaWxhYmlsaXR5IGNoYW5nZWQuIFdlIG5lZWQgdG8g
ZG8gdGhpcyBoZXJlIGluIGNhc2UKLSAgICAgICAgLy8gdGhlIGF0dGFjaG1lbnQgdmlldyBpcyBu
b3QgdGhlIFdLVmlldy4KLSAgICAgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9y
bUNhbkF0dGFjaChjYW5BdHRhY2goKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFpbnNwZWN0ZWRQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVmlldyAqaW5z
cGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsK
LSAgICBXS1dlYlZpZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxl
ciB3ZWJWaWV3XTsKLQotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBpbnNwZWN0ZWRW
aWV3LmZyYW1lOwotICAgIE5TUmVjdCBvbGRJbnNwZWN0b3JWaWV3RnJhbWUgPSBpbnNwZWN0b3JW
aWV3LmZyYW1lOwotICAgIE5TUmVjdCBuZXdJbnNwZWN0b3JWaWV3RnJhbWUgPSBOU1plcm9SZWN0
OwotICAgIE5TUmVjdCBwYXJlbnRCb3VuZHMgPSBpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5ib3Vu
ZHM7Ci0gICAgQ0dGbG9hdCBpbnNwZWN0ZWRWaWV3VG9wID0gTlNNYXhZKGluc3BlY3RlZFZpZXdG
cmFtZSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFj
aG1lbnRTaWRlOjpCb3R0b206IHsKLSAgICAgICAgaWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAg
ICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5TSGVpZ2h0KG9sZEluc3BlY3RvclZpZXdGcmFt
ZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJlbnRIZWlnaHQgPSBOU0hlaWdodChwYXJlbnRCb3Vu
ZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3RvckhlaWdodCA9IEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoY3VycmVudERpbWVu
c2lvbiwgcGFyZW50SGVpZ2h0KTsKLQotICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0
aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3Jr
LgotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWUgPSBOU01ha2VSZWN0KDAsIGluc3BlY3Rvckhl
aWdodCwgTlNXaWR0aChwYXJlbnRCb3VuZHMpLCBpbnNwZWN0ZWRWaWV3VG9wIC0gaW5zcGVjdG9y
SGVpZ2h0KTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAw
LCBOU1dpZHRoKGluc3BlY3RlZFZpZXdGcmFtZSksIGluc3BlY3RvckhlaWdodCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OiB7Ci0gICAg
ICAgIGlmICghY3VycmVudERpbWVuc2lvbikKLSAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24g
PSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAgQ0dGbG9hdCBwYXJl
bnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKLSAgICAgICAgQ0dGbG9hdCBpbnNwZWN0
b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNo
ZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7Ci0KLSAgICAgICAg
Ly8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFu
bmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0Ci0gICAgICAgIC8v
IHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRoZSBiYW5uZXJzIG9u
bHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KLSAgICAgICAgaW5zcGVj
dGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBwYXJlbnRXaWR0aCAtIGluc3BlY3Rvcldp
ZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0g
TlNNYWtlUmVjdChwYXJlbnRXaWR0aCAtIGluc3BlY3RvcldpZHRoLCAwLCBpbnNwZWN0b3JXaWR0
aCwgTlNIZWlnaHQocGFyZW50Qm91bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNw
ZWN0b3JXaW5kb3cgPSBpbnNwZWN0b3JWaWV3LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0
IGNvbnRlbnRMYXlvdXRSZWN0ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0
Omluc3BlY3RvcldpbmRvdy5jb250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAg
ICAgICAgbmV3SW5zcGVjdG9yVmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSwgY29udGVudExheW91dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6IHsKLSAgICAgICAg
aWYgKCFjdXJyZW50RGltZW5zaW9uKQotICAgICAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IE5T
V2lkdGgob2xkSW5zcGVjdG9yVmlld0ZyYW1lKTsKLQotICAgICAgICBDR0Zsb2F0IHBhcmVudFdp
ZHRoID0gTlNXaWR0aChwYXJlbnRCb3VuZHMpOwotICAgICAgICBDR0Zsb2F0IGluc3BlY3Rvcldp
ZHRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdp
bmRvd1dpZHRoKGN1cnJlbnREaW1lbnNpb24sIHBhcmVudFdpZHRoKTsKLQotICAgICAgICAvLyBQ
cmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmlldyBzbyBiYW5uZXJz
IGluIFNhZmFyaSBzdGlsbCB3b3JrLiBCdXQgZG9uJ3QgdXNlIHRoYXQKLSAgICAgICAgLy8gdG9w
IHBvc2l0aW9uIGZvciB0aGUgaW5zcGVjdG9yIHZpZXcgc2luY2UgdGhlIGJhbm5lcnMgb25seSBz
dHJldGNoIGFzIHdpZGUgYXMgdGhlIGluc3BlY3RlZCB2aWV3LgotICAgICAgICBpbnNwZWN0ZWRW
aWV3RnJhbWUgPSBOU01ha2VSZWN0KGluc3BlY3RvcldpZHRoLCAwLCBwYXJlbnRXaWR0aCAtIGlu
c3BlY3RvcldpZHRoLCBpbnNwZWN0ZWRWaWV3VG9wKTsKLSAgICAgICAgbmV3SW5zcGVjdG9yVmll
d0ZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCBpbnNwZWN0b3JXaWR0aCwgTlNIZWlnaHQocGFyZW50
Qm91bmRzKSk7Ci0KLSAgICAgICAgaWYgKE5TV2luZG93ICppbnNwZWN0b3JXaW5kb3cgPSBpbnNw
ZWN0b3JWaWV3LndpbmRvdykgewotICAgICAgICAgICAgTlNSZWN0IGNvbnRlbnRMYXlvdXRSZWN0
ID0gW2luc3BlY3RlZFZpZXcuc3VwZXJ2aWV3IGNvbnZlcnRSZWN0Omluc3BlY3RvcldpbmRvdy5j
b250ZW50TGF5b3V0UmVjdCBmcm9tVmlldzpuaWxdOwotICAgICAgICAgICAgbmV3SW5zcGVjdG9y
Vmlld0ZyYW1lID0gTlNJbnRlcnNlY3Rpb25SZWN0KG5ld0luc3BlY3RvclZpZXdGcmFtZSwgY29u
dGVudExheW91dFJlY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoTlNFcXVhbFJlY3RzKG9sZEluc3BlY3RvclZpZXdGcmFtZSwgbmV3SW5zcGVj
dG9yVmlld0ZyYW1lKSAmJiBOU0VxdWFsUmVjdHMoW2luc3BlY3RlZFZpZXcgZnJhbWVdLCBpbnNw
ZWN0ZWRWaWV3RnJhbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXNhYmxlIHNjcmVl
biB1cGRhdGVzIHRvIG1ha2Ugc3VyZSB0aGUgbGF5ZXJzIGZvciBib3RoIHZpZXdzIHJlc2l6ZSBp
biBzeW5jLgotICAgIFtpbnNwZWN0b3JWaWV3LndpbmRvdyBkaXNhYmxlU2NyZWVuVXBkYXRlc1Vu
dGlsRmx1c2hdOwotCi0gICAgW2luc3BlY3RvclZpZXcgc2V0RnJhbWU6bmV3SW5zcGVjdG9yVmll
d0ZyYW1lXTsKLSAgICBbaW5zcGVjdGVkVmlldyBzZXRGcmFtZTppbnNwZWN0ZWRWaWV3RnJhbWVd
OwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5k
b3dIZWlnaHQoKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2Uo
KS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld1Jl
Y3QgPSBbaW5zcGVjdGVkVmlldyBmcmFtZV07Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbnNwZWN0ZWRWaWV3UmVjdC5zaXplLmhlaWdodCk7Ci19Ci0KLXVuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBOU1Zp
ZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRW
aWV3KCk7Ci0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJh
bWVdOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Qu
c2l6ZS53aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNo
KCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3Bl
Y3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21f
aW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JX
aW5kb3cpIHsKLSAgICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0g
ICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gbmlsOwotICAgIH0KLQotICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZp
ZXddOwotCi0gICAgQ0dGbG9hdCBjdXJyZW50RGltZW5zaW9uOwotICAgIHN3aXRjaCAobV9hdHRh
Y2htZW50U2lkZSkgewotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAg
W2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBO
U1ZpZXdNYXhZTWFyZ2luXTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgotICAgICAgICBbaW5zcGVjdG9yVmll
dyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld0hlaWdodFNpemFibGUgfCBOU1ZpZXdNaW5YTWFy
Z2luXTsKLSAgICAgICAgY3VycmVudERpbWVuc2lvbiA9IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNl
cygpLmluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
dHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6
aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxlIHwgTlNWaWV3TWF4WE1hcmdpbl07Ci0gICAgICAg
IGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JB
dHRhY2hlZFdpZHRoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGluc3BlY3RlZFZp
ZXdGcmFtZURpZENoYW5nZShjdXJyZW50RGltZW5zaW9uKTsKLQotICAgIFtpbnNwZWN0ZWRWaWV3
LnN1cGVydmlldyBhZGRTdWJ2aWV3Omluc3BlY3RvclZpZXcgcG9zaXRpb25lZDpOU1dpbmRvd0Jl
bG93IHJlbGF0aXZlVG86aW5zcGVjdGVkVmlld107Ci0gICAgW2luc3BlY3RvclZpZXcud2luZG93
IG1ha2VGaXJzdFJlc3BvbmRlcjppbnNwZWN0b3JWaWV3XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQotewotICAgIE5TVmlldyAqaW5zcGVjdGVkVmlldyA9
IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZpZXcoKTsKLSAgICBXS1dlYlZp
ZXcgKmluc3BlY3RvclZpZXcgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XTsK
LQotICAgIFtpbnNwZWN0b3JWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgW2luc3Bl
Y3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdI
ZWlnaHRTaXphYmxlXTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIHNpemUgdGhlIGluc3Bl
Y3RlZCB2aWV3J3MgZnJhbWUgYWZ0ZXIgZGV0YWNoaW5nIHNvIHRoYXQgaXQgdGFrZXMgdXAgdGhl
IHNwYWNlIHRoYXQgdGhlCi0gICAgLy8gYXR0YWNoZWQgaW5zcGVjdG9yIHVzZWQgdG8uIFByZXNl
cnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3BlY3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4g
U2FmYXJpIHN0aWxsIHdvcmsuCi0KLSAgICBpbnNwZWN0ZWRWaWV3LmZyYW1lID0gTlNNYWtlUmVj
dCgwLCAwLCBOU1dpZHRoKGluc3BlY3RlZFZpZXcuc3VwZXJ2aWV3LmJvdW5kcyksIE5TTWF4WShp
bnNwZWN0ZWRWaWV3LmZyYW1lKSk7Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5v
dCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRh
Y2hlZAotICAgIC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVj
dG9yIHdpbmRvdy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBvcGVuKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghbV9pc0F0dGFjaGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoaGVp
Z2h0KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGlmICghbV9pc0F0dGFjaGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2Uod2lkdGgpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgW21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld10tPl9wYWdlLT5zdGFydFdpbmRvd0RyYWcoKTsK
LX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSAg
ICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29t
LmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3Vy
Y2U6QCJNYWluIiBvZlR5cGU6QCJodG1sIl07Ci0gICAgQVNTRVJUKHBhdGggJiYgcGF0aC5sZW5n
dGgpOwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6cGF0aCBpc0RpcmVjdG9yeTpOT10uYWJzb2x1dGVT
dHJpbmc7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VV
UkwoKQotewotICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50
aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5zcGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0
Lmh0bWwgaW4gUHJvZHVjdGlvbiBidWlsZHMuCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbYnVuZGxl
IHBhdGhGb3JSZXNvdXJjZTpAIlRlc3QiIG9mVHlwZTpAImh0bWwiXTsKLSAgICBpZiAoIXBhdGgp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIE5TQnVuZGxlICpi
dW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViSW5z
cGVjdG9yVUkiXTsKLSAgICBpZiAoIWJ1bmRsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgTlNTdHJpbmcgKnBhdGggPSBidW5kbGUucmVzb3VyY2VQYXRoOwotICAgIEFTU0VSVChw
YXRoICYmIHBhdGgubGVuZ3RoKTsKLQotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OnBhdGggaXNEaXJlY3Rvcnk6WUVTXS5hYnNvbHV0ZVN0cmluZzsKLX0KLQotc3RhdGljIE5TRGlj
dGlvbmFyeSAqc3lzdGVtVmVyc2lvblBsaXN0KCkKLXsKLSAgICBOU1N0cmluZyAqc3lzdGVtTGli
cmFyeVBhdGggPSBbTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5
RGlyZWN0b3J5LCBOU1N5c3RlbURvbWFpbk1hc2ssIFlFUykgb2JqZWN0QXRJbmRleDowXTsKLSAg
ICBOU1N0cmluZyAqc3lzdGVtVmVyc2lvblBsaXN0UGF0aCA9IFtzeXN0ZW1MaWJyYXJ5UGF0aCBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJDb3JlU2VydmljZXMvU3lzdGVtVmVyc2lv
bi5wbGlzdCJdOwotICAgIE5TRGljdGlvbmFyeSAqc3lzdGVtVmVyc2lvbkluZm8gPSBbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoQ29udGVudHNPZkZpbGU6c3lzdGVtVmVyc2lvblBsaXN0UGF0
aF07Ci0gICAgcmV0dXJuIHN5c3RlbVZlcnNpb25JbmZvOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0Rh
dGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIE5T
RGljdGlvbmFyeSAqcGxpc3QgPSBzeXN0ZW1WZXJzaW9uUGxpc3QoKTsKLQotICAgIERlYnVnZ2Fi
bGVJbmZvRGF0YSByZXN1bHQ7Ci0gICAgcmVzdWx0LmRlYnVnZ2FibGVUeXBlID0gSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKLSAgICByZXN1bHQudGFyZ2V0UGxhdGZvcm1OYW1l
ID0gIm1hY09TIl9zOwotICAgIHJlc3VsdC50YXJnZXRCdWlsZFZlcnNpb24gPSBwbGlzdFtAIlBy
b2R1Y3RCdWlsZFZlcnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0UHJvZHVjdFZlcnNpb24gPSBw
bGlzdFtAIlByb2R1Y3RVc2VyVmlzaWJsZVZlcnNpb24iXTsKLSAgICByZXN1bHQudGFyZ2V0SXNT
aW11bGF0b3IgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlZTVjZGZmMzguLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgotCi0jaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5o
IgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgp
OwotcHVibGljOgotICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVu
dCYgaW5zcGVjdG9yQ2xpZW50LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0
YXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKLSAgICAg
ICAgOiBtX3Byb3h5KFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKLSAgICAgICAg
LCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCi0gICAgICAgICwgbV9jb25uZWN0
aW9uSUQoY29ubmVjdGlvbklEKQotICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCi0gICAg
ICAgICwgbV9kZWJ1Z2dhYmxlVHlwZShkZWJ1Z2dhYmxlVHlwZSkKLSAgICB7Ci0gICAgICAgIG1f
cHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICB9Ci0KLSAgICB+UmVtb3RlSW5zcGVjdG9yUHJv
eHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KG51bGxwdHIpOwotICAgICAg
ICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkKCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1Mzc+OiB0aGlzIHNo
b3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAg
ICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1Z2dhYmxlSW5mbyA9IEFQSTo6RGVidWdn
YWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpOwotICAgICAgICBk
ZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUobV9kZWJ1Z2dhYmxlVHlwZSk7Ci0gICAg
ICAgIG1fcHJveHktPmxvYWQoV1RGTW92ZShkZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xp
ZW50LmJhY2tlbmRDb21tYW5kc1VSTCgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAg
IHsKLSAgICAgICAgbV9wcm94eS0+c2hvdygpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIG1fcHJv
eHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNl
bmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVj
dGlvbklELCBtX3RhcmdldElELCBtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsb3NlRnJv
bUZyb250ZW5kKCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNs
b3NlRnJvbUZyb250ZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElEKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3Byb3h5OwotICAgIFJl
bW90ZUluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7Ci0gICAgQ29ubmVjdGlvbklE
IG1fY29ubmVjdGlvbklEOwotICAgIFRhcmdldElEIG1fdGFyZ2V0SUQ7Ci0gICAgSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZSBtX2RlYnVnZ2FibGVUeXBlOwotfTsKLQotUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQoVVJMIHVybCwgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXImIG9ic2VydmVyKQotICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKLXsKLSAgICBpZiAo
IXVybC5ob3N0KCkgfHwgIXVybC5wb3J0KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlk
IGluc3BlY3RvciB1cmw6ICVzIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0SW5ldCh1cmwu
aG9zdCgpLnV0ZjgoKS5kYXRhKCksIHVybC5wb3J0KCkudmFsdWUoKSk7Ci0gICAgaWYgKCFtX2Nv
bm5lY3Rpb25JRCkgewotICAgICAgICBMT0dfRVJST1IoIkluc3BlY3RvciBjbGllbnQgY291bGQg
bm90IGNvbm5lY3QgdG8gJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCk7Ci19Ci0K
LVJlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUluc3BlY3RvckNsaWVudCgpCi17Ci19Ci0K
LXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VS
VChtX2Nvbm5lY3Rpb25JRC5oYXNWYWx1ZSgpKTsKLSAgICBhdXRvIG1lc3NhZ2UgPSBldmVudC51
dGY4KCk7Ci0gICAgc2VuZChtX2Nvbm5lY3Rpb25JRC52YWx1ZSgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihtZXNzYWdlLmRhdGEoKSksIG1lc3NhZ2UubGVuZ3RoKCkpOwotfQot
Ci1IYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xp
ZW50OjpDYWxsSGFuZGxlcj4mIFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlzcGF0Y2hNYXAoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+
PiBkaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4oewotICAgICAgICB7
ICJCYWNrZW5kQ29tbWFuZHMiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMpIH0sCi0gICAgICAgIHsgIlNldFRhcmdl
dExpc3QiX3MsIHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXRUYXJnZXRMaXN0KSB9LAotICAgICAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiX3Ms
IHN0YXRpY19jYXN0PENhbGxIYW5kbGVyPigmUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVz
c2FnZVRvRnJvbnRlbmQpIH0sCi0gICAgfSk7Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hNYXA7Ci19
Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzdGFydEluaXRpYWxDb21tdW5pY2F0aW9u
KCkKLXsKLSAgICBhdXRvIGV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBldmVu
dC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwSW5zcGVjdG9yQ2xpZW50Il9zKTsKLSAgICBz
ZW5kV2ViSW5zcGVjdG9yRXZlbnQoZXZlbnQtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBS
ZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rpb25DbG9zZWQoKQotewotICAgIG1fdGFyZ2V0
cy5jbGVhcigpOwotICAgIG1faW5zcGVjdG9yUHJveHlNYXAuY2xlYXIoKTsKLSAgICBtX29ic2Vy
dmVyLmNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOwotICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENo
YW5nZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6ZGlkQ2xvc2Uo
Q29ubmVjdGlvbklEKQotewotICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAg
Y29ubmVjdGlvbkNsb3NlZCgpOwotICAgIH0pOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6aW5zcGVjdChDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJ
RCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSkKLXsKLSAgICBhdXRv
IGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5zdXJlKHN0ZDo6bWFrZV9wYWlyKGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVi
dWdnYWJsZVR5cGVdIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9y
UHJveHk+KCp0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZSk7Ci0g
ICAgfSk7Ci0KLSAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUtPnNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGF1dG8gc2V0dXBFdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2V0dXBF
dmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNldHVwIl9zKTsKLSAgICBzZXR1cEV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAgc2V0dXBFdmVu
dC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKLSAgICBzZW5kV2ViSW5zcGVj
dG9yRXZlbnQoc2V0dXBFdmVudC0+dG9KU09OU3RyaW5nKCkpOwotCi0gICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+bG9hZCgpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6
c2VuZE1lc3NhZ2VUb0JhY2tlbmQoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQg
dGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBhdXRvIGJhY2tlbmRFdmVu
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRTdHJpbmco
ImV2ZW50Il9zLCAiU2VuZE1lc3NhZ2VUb0JhY2tlbmQiX3MpOwotICAgIGJhY2tlbmRFdmVudC0+
c2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOwotICAgIGJhY2tlbmRF
dmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldElEKTsKLSAgICBiYWNrZW5kRXZl
bnQtPnNldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSk7Ci0gICAgc2VuZFdlYkluc3BlY3Rv
ckV2ZW50KGJhY2tlbmRFdmVudC0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6Y2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25J
RCwgVGFyZ2V0SUQgdGFyZ2V0SUQpCi17Ci0gICAgYXV0byBjbG9zZWRFdmVudCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgY2xvc2VkRXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJG
cm9udGVuZERpZENsb3NlIl9zKTsKLSAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdlcigiY29ubmVj
dGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOwotICAgIGNsb3NlZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0
YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChjbG9zZWRF
dmVudC0+dG9KU09OU3RyaW5nKCkpOwotCi0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotfQotCi12b2lkIFJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IEV2ZW50JiBldmVudCkK
LXsKLSAgICBpZiAoIWV2ZW50Lm1lc3NhZ2UgfHwgZXZlbnQubWVzc2FnZS0+aXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IG1ha2VTdHJpbmco
ImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwiLCBiYXNlNjRFbmNvZGUoZXZlbnQubWVzc2Fn
ZS0+dXRmOCgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRM
aXN0KGNvbnN0IEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25JRCB8
fCAhZXZlbnQubWVzc2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50
Lm1lc3NhZ2UudmFsdWUoKSwgbWVzc2FnZVZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdlQXJyYXk7Ci0gICAgaWYgKCFtZXNzYWdlVmFsdWUt
PmFzQXJyYXkobWVzc2FnZUFycmF5KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFRh
cmdldD4gdGFyZ2V0TGlzdDsKLSAgICBmb3IgKGF1dG8mIGl0ZW1WYWx1ZSA6ICptZXNzYWdlQXJy
YXkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRlbU9iamVjdDsKLSAgICAgICAg
aWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgVGFyZ2V0IHRhcmdldDsKLSAgICAgICAgaWYgKCFpdGVtT2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0LmlkKQotICAgICAgICAgICAgfHwgIWl0ZW1P
YmplY3QtPmdldFN0cmluZygibmFtZSJfcywgdGFyZ2V0Lm5hbWUpCi0gICAgICAgICAgICB8fCAh
aXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHRhcmdldC51cmwpCi0gICAgICAgICAgICB8
fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0YXJnZXQudHlwZSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICB0YXJnZXRMaXN0LmFwcGVuZChXVEZNb3ZlKHRhcmdl
dCkpOwotICAgIH0KLQotICAgIGF1dG8gY29ubmVjdGlvbklEID0gZXZlbnQuY29ubmVjdGlvbklE
LnZhbHVlKCk7Ci0KLSAgICAvLyBGaW5kIGNsb3NlZCB0YXJnZXRzIHRvIHJlbW92ZSB0aGVtLgot
ICAgIFZlY3RvcjxUYXJnZXRJRCwgND4gdGFyZ2V0c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byYg
cGFpciA6IG1faW5zcGVjdG9yUHJveHlNYXAua2V5cygpKSB7Ci0gICAgICAgIGlmIChwYWlyLmZp
cnN0ICE9IGNvbm5lY3Rpb25JRCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiB0YXJnZXRMaXN0
KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IHBhaXIuc2Vjb25kKSB7Ci0gICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHRhcmdl
dHNUb1JlbW92ZS5hcHBlbmQocGFpci5zZWNvbmQpOwotICAgIH0KLSAgICBmb3IgKGF1dG8mIHRh
cmdldElEIDogdGFyZ2V0c1RvUmVtb3ZlKQotICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLnJl
bW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0KLSAgICBtX3Rh
cmdldHMuc2V0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7Ci0gICAgbV9vYnNl
cnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAg
IGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC50YXJnZXRJRCB8fCAhZXZlbnQubWVz
c2FnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcm94eSA9IG1faW5zcGVjdG9yUHJv
eHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpLCBldmVu
dC50YXJnZXRJRC52YWx1ZSgpKSk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHByb3h5LT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY1MWQ2M2RlYTAuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRyb2xsYWJsZVRhcmdldC5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OwotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHk7Ci0K
LWNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5S
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0YXJnZXRMaXN0
Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNv
bm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOwotfTsKLQotdXNpbmcg
Q29ubmVjdGlvbklEID0gSW5zcGVjdG9yOjpDb25uZWN0aW9uSUQ7Ci11c2luZyBUYXJnZXRJRCA9
IEluc3BlY3Rvcjo6VGFyZ2V0SUQ7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVj
dG9yQ2xpZW50KFVSTCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKLSAgICB+UmVtb3RlSW5z
cGVjdG9yQ2xpZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVwZGF0ZSB0aGUgbWVz
c2FnaW5nIHByb3RvY29sIHRvIHVzZSBEZWJ1Z2dhYmxlVHlwZSBpbnN0ZWFkIG9mIFN0cmluZyBm
b3IgdGhlIHRhcmdldCB0eXBlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDYwNDcKLSAgICBzdHJ1Y3QgVGFyZ2V0IHsKLSAgICAgICAgVGFyZ2V0SUQg
aWQ7Ci0gICAgICAgIFN0cmluZyB0eXBlOwotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAg
U3RyaW5nIHVybDsKLSAgICB9OwotCi0gICAgY29uc3QgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZl
Y3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQotICAg
IGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kQ29tbWFuZHNVUkw7IH0KLQotICAgIHZvaWQgaW5zcGVjdChDb25uZWN0aW9uSUQsIFRhcmdl
dElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9C
YWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
Y2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklELCBUYXJnZXRJRCk7Ci0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlbW90ZUluc3BlY3RvckNsaWVudD47Ci0K
LSAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKTsKLSAgICB2b2lkIGNvbm5lY3Rp
b25DbG9zZWQoKTsKLQotICAgIHZvaWQgc2V0VGFyZ2V0TGlzdChjb25zdCBFdmVudCYpOwotICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2ZW50Jik7Ci0gICAgdm9pZCBzZXRC
YWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmKTsKLQotICAgIHZvaWQgZGlkQ2xvc2UoQ29ubmVj
dGlvbklEKSBmaW5hbDsKLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+JiBkaXNwYXRj
aE1hcCgpIGZpbmFsOwotCi0gICAgdm9pZCBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY29uc3QgU3Ry
aW5nJik7Ci0KLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0gICAgUmVtb3RlSW5z
cGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7Ci0gICAgT3B0aW9uYWw8Q29ubmVjdGlvbklEPiBt
X2Nvbm5lY3Rpb25JRDsKLSAgICBIYXNoTWFwPENvbm5lY3Rpb25JRCwgVmVjdG9yPFRhcmdldD4+
IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPHN0ZDo6cGFpcjxDb25uZWN0aW9uSUQsIFRhcmdldElE
Piwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5Pj4gbV9pbnNwZWN0b3JQcm94
eU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmM0NTVkM2U2Mi4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyLmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQSUxv
YWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJBUElV
c2VyQ29udGVudFdvcmxkLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCIKLSNp
bmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1jbGFzcyBTY3JpcHRNZXNzYWdlQ2xpZW50IGZpbmFsIDogcHVibGljIFdl
YlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIFNjcmlwdE1lc3NhZ2VDbGllbnQoUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyJiBpbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIpCi0gICAgICAgIDogbV9pbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIoaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKSB7IH0KLQotICAg
IH5TY3JpcHRNZXNzYWdlQ2xpZW50KCkgeyB9Ci0KLSAgICB2b2lkIGRpZFBvc3RNZXNzYWdlKFdl
YlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZvRGF0YSYmLCBXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUmIHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGF1dG8gdG9rZW5zID0gc2VyaWFsaXplZFNjcmlwdFZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoIjoi
KTsKLSAgICAgICAgaWYgKHRva2Vucy5zaXplKCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBVUkwgcmVxdWVzdFVSTCB7IHsgfSwgcGFnZS5wYWdlTG9hZFN0YXRlKCkudXJs
KCkgfTsKLSAgICAgICAgbV9pbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaW5zcGVjdChyZXF1ZXN0
VVJMLmhvc3RBbmRQb3J0KCksIHRva2Vuc1swXS50b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzFdLnRv
VUludFN0cmljdCgpLCB0b2tlbnNbMl0pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXImIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOwotfTsK
LQotY2xhc3MgTG9hZGVyQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6TG9hZGVyQ2xpZW50IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBMb2FkZXJDbGllbnQo
RnVuY3Rpb248dm9pZCgpPiYmIGxvYWRlZENhbGxiYWNrKQotICAgICAgICA6IG1fbG9hZGVkQ2Fs
bGJhY2sgeyBXVEZNb3ZlKGxvYWRlZENhbGxiYWNrKSB9IHsgfQotCi0gICAgdm9pZCBkaWRGaW5p
c2hMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmLCBBUEk6Ok5hdmlnYXRpb24qLCBBUEk6Ok9iamVjdCopIGZpbmFsCi0gICAgewotICAgICAg
ICBtX2xvYWRlZENhbGxiYWNrKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEZ1bmN0aW9uPHZv
aWQoKT4gbV9sb2FkZWRDYWxsYmFjazsKLX07Ci0KLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6
OkRlYnVnZ2FibGVUeXBlPiBwYXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmIGRlYnVnZ2FibGVUeXBlU3RyaW5nKQotewotICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmlu
ZyA9PSAiamF2YXNjcmlwdCJfcykKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJs
ZVR5cGU6OkphdmFTY3JpcHQ7Ci0gICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJwYWdl
Il9zKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6UGFnZTsKLSAg
ICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gInNlcnZpY2Utd29ya2VyIl9zKQotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6U2VydmljZVdvcmtlcjsKLSAgICBp
ZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gIndlYi1wYWdlIl9zKQotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsKLQotICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjppbnNwZWN0
KGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRh
cmdldElEIHRhcmdldElELCBjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgYXV0byBkZWJ1Z2dh
YmxlVHlwZSA9IHBhcnNlRGVidWdnYWJsZVR5cGVGcm9tU3RyaW5nKHR5cGUpOwotICAgIGlmICgh
ZGVidWdnYWJsZVR5cGUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmtub3duIGRlYnVnZ2FibGUg
dHlwZTogXCIlc1wiIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX2luc3BlY3RvckNsaWVudCkKLSAgICAgICAgbV9pbnNwZWN0b3JDbGll
bnQtPmluc3BlY3QoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUudmFsdWUo
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpydW5TY3JpcHQo
Y29uc3QgU3RyaW5nJiBzY3JpcHQpCi17Ci0gICAgbV9wYWdlLnJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZSh7IHNjcmlwdCwgZmFsc2UsIFdURjo6bnVsbG9wdCwgZmFsc2UgfSwgCi0gICAgICAgIFtd
KEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwgT3B0aW9uYWw8V2ViQ29yZTo6RXhjZXB0aW9u
RGV0YWlscz4gZXhjZXB0aW9uRGV0YWlscywgQ2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAg
ICAgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJF
eGNlcHRpb24gcnVubmluZyBzY3JpcHQgXCIlc1wiIiwgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2Fn
ZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90
b2NvbEhhbmRsZXI6OnRhcmdldExpc3RDaGFuZ2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYgY2xp
ZW50KQotewotICAgIFN0cmluZ0J1aWxkZXIgaHRtbDsKLSAgICBpZiAoY2xpZW50LnRhcmdldHMo
KS5pc0VtcHR5KCkpCi0gICAgICAgIGh0bWwuYXBwZW5kKCI8cD5ObyB0YXJnZXRzIGZvdW5kPC9w
PiJfcyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGh0bWwuYXBwZW5kKCI8dGFibGU+Iik7Ci0gICAg
ICAgIGZvciAoYXV0byYgY29ubmVjdGlvbklEIDogY2xpZW50LnRhcmdldHMoKS5rZXlzKCkpIHsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogY2xpZW50LnRhcmdldHMoKS5nZXQoY29u
bmVjdGlvbklEKSkgewotICAgICAgICAgICAgICAgIGh0bWwuYXBwZW5kKG1ha2VTdHJpbmcoCi0g
ICAgICAgICAgICAgICAgICAgICI8dGJvZHk+PHRyPiIKLSAgICAgICAgICAgICAgICAgICAgIjx0
ZCBjbGFzcz1cImRhdGFcIj48ZGl2IGNsYXNzPVwidGFyZ2V0bmFtZVwiPiIsIHRhcmdldC5uYW1l
LCAiPC9kaXY+PGRpdiBjbGFzcz1cInRhcmdldHVybFwiPiIsIHRhcmdldC51cmwsICI8L2Rpdj48
L3RkPiIKLSAgICAgICAgICAgICAgICAgICAgIjx0ZCBjbGFzcz1cImlucHV0XCI+PGlucHV0IHR5
cGU9XCJidXR0b25cIiB2YWx1ZT1cIkluc3BlY3RcIiBvbmNsaWNrPVwid2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMuaW5zcGVjdG9yLnBvc3RNZXNzYWdlKFxcJyIsIGNvbm5lY3Rpb25JRCwg
IjoiLCB0YXJnZXQuaWQsICI6IiwgdGFyZ2V0LnR5cGUsICJcXCcpO1wiPjwvdGQ+IgotICAgICAg
ICAgICAgICAgICAgICAiPC90cj48L3Rib2R5PiIKLSAgICAgICAgICAgICAgICApKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBodG1sLmFwcGVuZCgiPC90YWJsZT4iKTsKLSAg
ICB9Ci0gICAgbV90YXJnZXRMaXN0c0h0bWwgPSBodG1sLnRvU3RyaW5nKCk7Ci0gICAgaWYgKG1f
cGFnZUxvYWRlZCkKLSAgICAgICAgdXBkYXRlVGFyZ2V0TGlzdCgpOwotfQotCi12b2lkIFJlbW90
ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6dXBkYXRlVGFyZ2V0TGlzdCgpCi17Ci0gICAgaWYg
KCFtX3RhcmdldExpc3RzSHRtbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcnVuU2NyaXB0KG1ha2VT
dHJpbmcoInVwZGF0ZVRhcmdldHMoYCIsIG1fdGFyZ2V0TGlzdHNIdG1sLCAiYCk7IikpOwotICAg
ICAgICBtX3RhcmdldExpc3RzSHRtbCA9IHsgfTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpwbGF0Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmIHBh
Z2VQcm94eSwgV2ViVVJMU2NoZW1lVGFzayYgdGFzaykKLXsKLSAgICBhdXRvJiByZXF1ZXN0VVJM
ID0gdGFzay5yZXF1ZXN0KCkudXJsKCk7Ci0KLSAgICAvLyBEZXN0cm95IHRoZSBjbGllbnQgYmVm
b3JlIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24gc28gaXQgY2FuIGNvbm5lY3QgdG8gdGhlIHNh
bWUgcG9ydAotICAgIG1faW5zcGVjdG9yQ2xpZW50ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3Rv
ckNsaWVudCA9IG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PihyZXF1ZXN0VVJMLCAq
dGhpcyk7Ci0KLSAgICAvLyBTZXR1cCB0YXJnZXQgcG9zdE1lc3NhZ2UgbGlzdGVuZXIKLSAgICBh
dXRvIGhhbmRsZXIgPSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Y3JlYXRlKG1ha2VVbmlxdWU8
U2NyaXB0TWVzc2FnZUNsaWVudD4oKnRoaXMpLCAiaW5zcGVjdG9yIiwgQVBJOjpVc2VyQ29udGVu
dFdvcmxkOjpub3JtYWxXb3JsZCgpKTsKLSAgICBwYWdlUHJveHkucGFnZUdyb3VwKCkudXNlckNv
bnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXIuZ2V0
KCkpOwotCi0gICAgLy8gU2V0dXAgbG9hZGVyIGNsaWVudCB0byBnZXQgbm90aWZpZWQgb2YgcGFn
ZSBsb2FkCi0gICAgbV9wYWdlLnNldExvYWRlckNsaWVudChtYWtlVW5pcXVlPExvYWRlckNsaWVu
dD4oW3RoaXNdIHsKLSAgICAgICAgbV9wYWdlTG9hZGVkID0gdHJ1ZTsKLSAgICAgICAgdXBkYXRl
VGFyZ2V0TGlzdCgpOwotICAgIH0pKTsKLSAgICBtX3BhZ2VMb2FkZWQgPSBmYWxzZTsKLQotICAg
IFN0cmluZ0J1aWxkZXIgaHRtbEJ1aWxkZXI7Ci0gICAgaHRtbEJ1aWxkZXIuYXBwZW5kKAotICAg
ICAgICAiPGh0bWw+PGhlYWQ+PHRpdGxlPlJlbW90ZSBJbnNwZWN0b3I8L3RpdGxlPiIKLSAgICAg
ICAgIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1s
OyBjaGFyc2V0PXV0Zi04XCIgLz4iCi0gICAgICAgICI8c3R5bGU+IgotICAgICAgICAiICBoMSB7
IGNvbG9yOiAjYmFiZGI2OyB0ZXh0LXNoYWRvdzogMCAxcHggMCB3aGl0ZTsgbWFyZ2luLWJvdHRv
bTogMDsgfSIKLSAgICAgICAgIiAgaHRtbCB7IGZvbnQtZmFtaWx5OiAtd2Via2l0LXN5c3RlbS1m
b250OyBmb250LXNpemU6IDExcHQ7IGNvbG9yOiAjMmUzNDM2OyBwYWRkaW5nOiAyMHB4IDIwcHgg
MCAyMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY0OyAiCi0gICAgICAgICIgICAgICAgICBi
YWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBjb2xvci1zdG9wKDAsICNlZWVlZWMpLCBjb2xvci1zdG9wKDEsICNmNmY2ZjQpKTsi
Ci0gICAgICAgICIgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgNWVtOyBiYWNrZ3JvdW5k
LXJlcGVhdDogbm8tcmVwZWF0OyB9IgotICAgICAgICAiICB0YWJsZSB7IHdpZHRoOiAxMDAlOyBi
b3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyB9IgotICAgICAg
ICAiICB0YWJsZSwgdGQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNkN2NmOyBib3JkZXItbGVmdDog
bm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyB9IgotICAgICAgICAiICBwIHsgbWFyZ2luLWJvdHRv
bTogMzBweDsgfSIKLSAgICAgICAgIiAgdGQgeyBwYWRkaW5nOiAxNXB4OyB9IgotICAgICAgICAi
ICB0ZC5kYXRhIHsgd2lkdGg6IDIwMHB4OyB9IgotICAgICAgICAiICAudGFyZ2V0bmFtZSB7IGZv
bnQtd2VpZ2h0OiBib2xkOyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRl
eHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB9IgotICAgICAgICAiICAudGFyZ2V0dXJsIHsgY29sb3I6
ICNiYWJkYjY7IGJhY2tncm91bmQ6ICNlZWU7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgb3ZlcmZs
b3ctd3JhcDogYnJlYWstd29yZDsgfSIKLSAgICAgICAgIiAgdGQuaW5wdXQgeyB3aWR0aDogNjRw
eDsgfSIKLSAgICAgICAgIiAgaW5wdXQgeyB3aWR0aDogMTAwJTsgcGFkZGluZzogOHB4OyB9Igot
ICAgICAgICAiPC9zdHlsZT4iCi0gICAgICAgICI8L2hlYWQ+PGJvZHk+PGgxPkluc3BlY3RhYmxl
IHRhcmdldHM8L2gxPiIKLSAgICAgICAgIjxkaXYgaWQ9XCJ0YXJnZXRsaXN0XCI+PHA+Tm8gdGFy
Z2V0cyBmb3VuZDwvcD48L2Rpdj48L2JvZHk+IgotICAgICAgICAiPHNjcmlwdD4iCi0gICAgICAg
ICJmdW5jdGlvbiB1cGRhdGVUYXJnZXRzKHN0cikgeyIKLSAgICAgICAgICAgICJsZXQgdGFyZ2V0
RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldGxpc3QnKTsiCi0gICAgICAgICAg
ICAidGFyZ2V0RGl2LmlubmVySFRNTCA9IHN0cjsiCi0gICAgICAgICJ9IgotICAgICAgICAiPC9z
Y3JpcHQ+Iik7Ci0gICAgaHRtbEJ1aWxkZXIuYXBwZW5kKCI8L2h0bWw+Iik7Ci0KLSAgICBhdXRv
IGh0bWwgPSBodG1sQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKLSAgICBhdXRvIGRhdGEgPSBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShodG1sLmRhdGEoKSwgaHRtbC5sZW5ndGgoKSk7Ci0gICAgUmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9odG1sIl9zLCBodG1sLmxl
bmd0aCgpLCAiVVRGLTgiX3MpOwotICAgIHRhc2suZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNl
KTsKLSAgICB0YXNrLmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoZGF0YSkpOwotICAgIHRhc2suZGlk
Q29tcGxldGUoUmVzb3VyY2VFcnJvcigpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2MDBlZmRlZDQuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
LQotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgotI2luY2x1ZGUgIldlYlVSTFNj
aGVtZUhhbmRsZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBVUkw7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJVUkxTY2hlbWVUYXNrOwotCi1jbGFzcyBSZW1vdGVJ
bnNwZWN0b3JQcm90b2NvbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXIsIHB1YmxpYyBXZWJVUkxTY2hlbWVIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcj4gY3JlYXRlKFdlYlBhZ2VQcm94eSYg
cGFnZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRs
ZXIocGFnZSkpOyB9Ci0KLSAgICB2b2lkIGluc3BlY3QoY29uc3QgU3RyaW5nJiBob3N0QW5kUG9y
dCwgQ29ubmVjdGlvbklELCBUYXJnZXRJRCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKLQotcHJpdmF0
ZToKLSAgICBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIoV2ViUGFnZVByb3h5JiBwYWdl
KQotICAgICAgICA6IG1fcGFnZShwYWdlKSB7IH0KLQotICAgIC8vIFJlbW90ZUluc3BlY3Rvck9i
c2VydmVyCi0gICAgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQm
KSBmaW5hbDsKLSAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50
JikgZmluYWwgeyB9Ci0KLSAgICAvLyBXZWJVUkxTY2hlbWVIYW5kbGVyCi0gICAgdm9pZCBwbGF0
Zm9ybVN0YXJ0VGFzayhXZWJQYWdlUHJveHkmLCBXZWJVUkxTY2hlbWVUYXNrJikgZmluYWw7Ci0g
ICAgdm9pZCBwbGF0Zm9ybVN0b3BUYXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNjaGVtZVRhc2sm
KSBmaW5hbCB7IH0KLSAgICB2b2lkIHBsYXRmb3JtVGFza0NvbXBsZXRlZChXZWJVUkxTY2hlbWVU
YXNrJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRhcmdldExpc3QoKTsKLQotICAgIHZv
aWQgcnVuU2NyaXB0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZUluc3BlY3RvckNsaWVudD4gbV9pbnNwZWN0b3JDbGllbnQ7Ci0gICAgV2ViUGFnZVByb3h5JiBt
X3BhZ2U7Ci0gICAgYm9vbCBtX3BhZ2VMb2FkZWQgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX3Rh
cmdldExpc3RzSHRtbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzkwYzJiOTRmMmYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIK
LSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBM
UENUU1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3AgPSBURVhUKCJSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIiKTsKLWNvbnN0IExQQ1dTVFIgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlDbGFzc05hbWUgPSBMIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3MiOwotCi1M
UkVTVUxUIENBTExCQUNLIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpXbmRQcm9jKEhXTkQgaHdu
ZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkqPig6OkdldFByb3AoaHduZCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2lu
dGVyUHJvcCkpOwotCi0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1NJWkU6Ci0gICAg
ICAgIHJldHVybiBjbGllbnQtPnNpemVDaGFuZ2UoKTsKLSAgICBjYXNlIFdNX0NMT1NFOgotICAg
ICAgICByZXR1cm4gY2xpZW50LT5vbkNsb3NlKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJh
bSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIEFUT00gcmVnaXN0ZXJXaW5kb3dDbGFzcygpCi17Ci0g
ICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwotICAgIGlm
IChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsK
LSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gMDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0g
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAg
ICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2Ug
ICAgICA9IDA7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29y
ICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91
bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFz
c05hbWUgID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWU7Ci0gICAgd2NleC5oSWNv
blNtICAgICAgICA9IDA7Ci0KLSAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsK
LSAgICByZXR1cm4gOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1MUkVTVUxUIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpzaXplQ2hhbmdlKCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0
KG1fZnJvbnRlbmRIYW5kbGUsICZyZWN0KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXct
PndpbmRvdygpLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwotICAgIHJldHVybiAwOwot
fQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvbkNsb3NlKCkKLXsKLSAgICA6
OlNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfSElERSk7Ci0gICAgZnJvbnRlbmREaWRD
bG9zZSgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAg
UmVmUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2VzOjpjcmVh
dGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotICAgIHByZWZlcmVuY2VzLT5z
ZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoREVWRUxP
UEVSX01PREUpCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQodHJ1
ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVF
bmFibGVkKHRydWUpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3Jv
dXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9y
UGFnZShudWxscHRyKSk7Ci0KLSAgICBhdXRvIHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdl
Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nl
c3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0b3JMZXZlbEZvclBhZ2UobnVsbHB0
cikpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMu
Z2V0KCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQYWdlR3JvdXAocGFnZUdyb3VwLmdl
dCgpKTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCg2MCwgMjAwLCAxNTAwLCAxMDAwKTsK
LSAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgbV9mcm9udGVuZEhhbmRsZSA9IDo6Q3Jl
YXRlV2luZG93RXgoMCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09W
RVJMQVBQRURXSU5ET1csCi0gICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAwKTsKLQotICAgIDo6U2V0UHJvcChtX2Zyb250ZW5k
SGFuZGxlLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9j
YXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1df
U0hPVyk7Ci0KLSAgICBSRUNUIHI7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5k
bGUsICZyKTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUociwgcGFnZUNvbmZpZ3Vy
YXRpb24sIG1fZnJvbnRlbmRIYW5kbGUpOwotICAgIHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsK
LX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkg
eyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgp
IHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikg
eyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICA6OkRlc3Ryb3lX
aW5kb3cobV9mcm9udGVuZEhhbmRsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmRlYWM5NzMxNzkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0KLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgi
Ci0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbkFjdGlvbi5oIgotI2luY2x1ZGUgIkFQSVBhZ2VDb25m
aWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViQ29yZUJ1bmRsZVdpbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvV2ViQ29yZUluc3RhbmNlSGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNz
YWdlQnJvYWRjYXN0ZXIuaD4KLSNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+Ci0KLSNpZiBVU0Uo
Q0YpCi0jaW5jbHVkZSA8d3RmL2NmL0NGVVJMRXh0cmFzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCBMUENXU1RSIFdlYkluc3BlY3RvclByb3h5UG9pbnRl
clByb3AgPSBMIldlYkluc3BlY3RvclByb3h5UG9pbnRlciI7Ci1zdGF0aWMgY29uc3QgTFBDV1NU
UiBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSA9IEwiV2ViSW5zcGVjdG9yUHJveHlDbGFzcyI7
Ci0KLXN0cnVjdCBJbnNwZWN0ZWRXaW5kb3dJbmZvIHsKLSAgICBpbnQgbGVmdDsKLSAgICBpbnQg
dG9wOwotICAgIGludCB2aWV3V2lkdGg7Ci0gICAgaW50IHZpZXdIZWlnaHQ7Ci0gICAgaW50IHBh
cmVudFdpZHRoOwotICAgIGludCBwYXJlbnRIZWlnaHQ7Ci19OwotCi1zdGF0aWMgSW5zcGVjdGVk
V2luZG93SW5mbyBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKEhXTkQgaW5zcGVjdGVkV2luZG93LCBI
V05EIHBhcmVudFdpbmRvdykKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0
KGluc3BlY3RlZFdpbmRvdywgJnJlY3QpOwotICAgIDo6TWFwV2luZG93UG9pbnRzKGluc3BlY3Rl
ZFdpbmRvdywgcGFyZW50V2luZG93LCAoTFBQT0lOVCkmcmVjdCwgMik7Ci0KLSAgICBSRUNUIHBh
cmVudFJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KHBhcmVudFdpbmRvdywgJnBhcmVudFJlY3Qp
OwotICAgIHJldHVybiB7IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIHBhcmVudFJlY3QucmlnaHQgLSBwYXJlbnRSZWN0
LmxlZnQsIHBhcmVudFJlY3QuYm90dG9tIC0gcGFyZW50UmVjdC50b3AgfTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQgaHduZCwgVUlOVCBt
c2csIFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNh
c2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6IHsKLSAgICAgICAgaWYgKCFtX2lzQXR0YWNoZWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byB3aW5kb3dQb3MgPSByZWludGVycHJl
dF9jYXN0PFdJTkRPV1BPUyo+KGxQYXJhbSk7Ci0KLSAgICAgICAgaWYgKHdpbmRvd1Bvcy0+Zmxh
Z3MgJiBTV1BfTk9TSVpFKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEhXTkQgcGFy
ZW50ID0gR2V0UGFyZW50KGh3bmQpOwotICAgICAgICBSRUNUIHBhcmVudFJlY3Q7Ci0gICAgICAg
IEdldENsaWVudFJlY3QocGFyZW50LCAmcGFyZW50UmVjdCk7Ci0KLSAgICAgICAgUkVDVCBpbnNw
ZWN0b3JSZWN0OwotICAgICAgICBHZXRDbGllbnRSZWN0KG1faW5zcGVjdG9yVmlld1dpbmRvdywg
Jmluc3BlY3RvclJlY3QpOwotCi0gICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewot
ICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206IHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGluc3BlY3RvckhlaWdodCA9IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaW5zcGVjdG9yUmVjdC5ib3R0b20g
LSBpbnNwZWN0b3JSZWN0LnRvcCwgd2luZG93UG9zLT5jeSk7Ci0gICAgICAgICAgICB3aW5kb3dQ
b3MtPmN5IC09IGluc3BlY3RvckhlaWdodDsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1f
aW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5k
b3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEF0dGFjaG1lbnRT
aWRlOjpMZWZ0OgotICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDogewotICAgICAg
ICAgICAgdW5zaWduZWQgaW5zcGVjdG9yV2lkdGggPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoaW5zcGVjdG9yUmVj
dC5yaWdodCAtIGluc3BlY3RvclJlY3QubGVmdCwgd2luZG93UG9zLT5jeCk7Ci0gICAgICAgICAg
ICB3aW5kb3dQb3MtPmN4IC09IGluc3BlY3RvcldpZHRoOwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dQb3MobV9pbnNwZWN0b3JWaWV3V2luZG93LCAwLCB3aW5kb3dQb3MtPnggKyB3aW5kb3dQb3Mt
PmN4LCB3aW5kb3dQb3MtPnksIGluc3BlY3RvcldpZHRoLCB3aW5kb3dQb3MtPmN5LCBTV1BfTk9a
T1JERVIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sg
V2ViSW5zcGVjdG9yUHJveHk6OnduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50ID0g
cmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JQcm94eSo+KDo6R2V0UHJvcChod25kLCBXZWJJ
bnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wKSk7Ci0gICAgc3dpdGNoIChtc2cpIHsKLSAgICBjYXNl
IFdNX1NJWkU6Ci0gICAgICAgIDo6U2V0V2luZG93UG9zKGNsaWVudC0+bV9pbnNwZWN0b3JWaWV3
V2luZG93LCAwLCAwLCAwLCBMT1dPUkQobFBhcmFtKSwgSElXT1JEKGxQYXJhbSksIFNXUF9OT1pP
UkRFUik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgV01fQ0xPU0U6Ci0gICAgICAgIGNs
aWVudC0+Y2xvc2UoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFy
YW0sIGxQYXJhbSk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnJlZ2lzdGVyV2luZG93
Q2xhc3MoKQotewotICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBm
YWxzZTsKLQotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLQotICAgIFdO
RENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAg
ICB3Y2V4LnN0eWxlID0gMDsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jID0gd25kUHJvYzsKLSAgICB3
Y2V4LmNiQ2xzRXh0cmEgPSAwOwotICAgIHdjZXguY2JXbmRFeHRyYSA9IDA7Ci0gICAgd2NleC5o
SW5zdGFuY2UgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOwotICAgIHdjZXguaEljb24gPSAw
OwotICAgIHdjZXguaEN1cnNvciA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4
LmhickJhY2tncm91bmQgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lID0gMDsKLSAgICB3Y2V4
Lmxwc3pDbGFzc05hbWUgPSBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZTsKLSAgICB3Y2V4LmhJ
Y29uU20gPSAwOwotICAgIHJldHVybiA6OlJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmIHBhZ2VS
ZWYsIFdLTmF2aWdhdGlvbkFjdGlvblJlZiBuYXZpZ2F0aW9uQWN0aW9uUmVmLCBXS0ZyYW1lUG9s
aWN5TGlzdGVuZXJSZWYgbGlzdGVuZXJSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKLXsKLSAgICAvLyBBbGxvdyBub24tbWFpbiBmcmFtZXMgdG8gbmF2aWdhdGUgYW55d2hl
cmUuCi0gICAgQVBJOjpGcmFtZUluZm8qIHNvdXJjZUZyYW1lID0gdG9JbXBsKG5hdmlnYXRpb25B
Y3Rpb25SZWYpLT5zb3VyY2VGcmFtZSgpOwotICAgIGlmIChzb3VyY2VGcmFtZSAmJiAhc291cmNl
RnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNl
KHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJJbnNwZWN0b3JQ
cm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJJbnNwZWN0b3JQ
cm94eSo+KGNsaWVudEluZm8pOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0KLSAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0
aW9uUmVmKS0+cmVxdWVzdCgpOwotCi0gICAgLy8gQWxsb3cgbG9hZGluZyBvZiB0aGUgbWFpbiBp
bnNwZWN0b3IgZmlsZS4KLSAgICBpZiAoV2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdElu
c3BlY3RvclBhZ2UocmVxdWVzdC51cmwoKSkpIHsKLSAgICAgICAgdG9JbXBsKGxpc3RlbmVyUmVm
KS0+dXNlKHsgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBQcmV2ZW50IGV2
ZXJ5dGhpbmcgZWxzZSBmcm9tIGxvYWRpbmcgaW4gdGhlIGluc3BlY3RvcidzIHBhZ2UuCi0gICAg
dG9JbXBsKGxpc3RlbmVyUmVmKS0+aWdub3JlKCk7Ci0KLSAgICAvLyBBbmQgaW5zdGVhZCBsb2Fk
IGl0IGluIHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICB3ZWJJbnNwZWN0b3JQcm94eS0+aW5zcGVj
dGVkUGFnZSgpLT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotc3RhdGljIHZv
aWQgd2ViUHJvY2Vzc0RpZENyYXNoKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
LXsKLSAgICBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHkgPSBzdGF0aWNfY2Fz
dDxXZWJJbnNwZWN0b3JQcm94eSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKLSAg
ICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkpOwotICAgIHdlYkluc3BlY3RvclByb3h5LT5jbG9z
ZUZvckNyYXNoKCk7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsK
LQotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygp
LCAiV2ViS2l0Mi4iLCAiV2ViS2l0Mi4iKTsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0g
ICAgLy8gQWxsb3cgZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRl
YnVnIGJ1aWxkcyB3aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgotICAgIHByZWZlcmVuY2VzLT5z
ZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRMb2dz
UGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotICAgIHBy
ZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7Ci0gICAgcHJl
ZmVyZW5jZXMtPnNldEphdmFTY3JpcHRSdW50aW1lRmxhZ3MoeyB9KTsKLSAgICBhdXRvIHBhZ2VH
cm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50aWZpZXJG
b3JQYWdlKGluc3BlY3RlZFBhZ2UoKSkpOwotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7
Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigp
KTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7
Ci0KLSAgICBXS1BhZ2VOYXZpZ2F0aW9uQ2xpZW50VjAgbmF2aWdhdGlvbkNsaWVudCA9IHsKLSAg
ICAgICAgeyAwLCB0aGlzIH0sCi0gICAgICAgIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b24sCi0gICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25z
ZQotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxw
dHIsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbgot
ICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAg
IG51bGxwdHIsIC8vIGRpZENvbW1pdE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlk
RmluaXNoTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsTmF2aWdhdGlvbgot
ICAgICAgICBudWxscHRyLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZQotICAg
ICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hEb2N1bWVudExvYWQKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyByZW5kZXJp
bmdQcm9ncmVzc0RpZENoYW5nZQotICAgICAgICBudWxscHRyLCAvLyBjYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZQotICAgICAgICB3ZWJQcm9jZXNzRGlkQ3Jhc2gsCi0gICAgICAg
IG51bGxwdHIsIC8vIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkKLQotICAgICAgICBudWxscHRyLCAv
LyBkaWRCZWdpbk5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIsIC8vIHdpbGxFbmRO
YXZpZ2F0aW9uR2VzdHVyZQotICAgICAgICBudWxscHRyLCAvLyBkaWRFbmROYXZpZ2F0aW9uR2Vz
dHVyZQotICAgICAgICBudWxscHRyLCAvLyBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBz
aG90Ci0gICAgfTsKLQotICAgIFJFQ1QgciA9IHsgMCwgMCwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5p
dGlhbFdpbmRvd1dpZHRoKSwgc3RhdGljX2Nhc3Q8TE9ORz4oaW5pdGlhbFdpbmRvd0hlaWdodCkg
fTsKLSAgICBhdXRvIHBhZ2UgPSBpbnNwZWN0ZWRQYWdlKCk7Ci0gICAgbV9pbnNwZWN0ZWRWaWV3
V2luZG93ID0gcGFnZS0+dmlld1dpZGdldCgpOwotICAgIG1faW5zcGVjdGVkVmlld1BhcmVudFdp
bmRvdyA9IDo6R2V0UGFyZW50KG1faW5zcGVjdGVkVmlld1dpbmRvdyk7Ci0gICAgYXV0byB2aWV3
ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2luc3BlY3RlZFZpZXdQ
YXJlbnRXaW5kb3cpOwotICAgIG1faW5zcGVjdG9yVmlldyA9ICZ2aWV3LmxlYWtSZWYoKTsKLSAg
ICBhdXRvIGluc3BlY3RvclBhZ2UgPSBtX2luc3BlY3RvclZpZXctPnBhZ2UoKTsKLSAgICBtX2lu
c3BlY3RvclZpZXdXaW5kb3cgPSBpbnNwZWN0b3JQYWdlLT52aWV3V2lkZ2V0KCk7Ci0gICAgV0tQ
YWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0
aW9uQ2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQot
ewotICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIo
bV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKLSAgICBtX2luc3BlY3RvclZpZXcgPSBudWxs
cHRyOwotICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW5zcGVjdG9y
Vmlld1dpbmRvdykgewotICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JWaWV3V2lu
ZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci0g
ICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93KSB7Ci0gICAgICAgIDo6UmVtb3ZlUHJvcCht
X2luc3BlY3RvckRldGFjaFdpbmRvdywgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCk7Ci0g
ICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdyk7Ci0gICAgICAg
IG1faW5zcGVjdG9yRGV0YWNoV2luZG93ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgbV9pbnNwZWN0
ZWRWaWV3V2luZG93ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cg
PSBudWxscHRyOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VV
UkwoKQotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYg
PSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6OndlYktpdEJ1bmRsZSgp
LCBDRlNUUigiTWFpbiIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiV2ViSW5zcGVjdG9yVUkiKSkp
OwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJM
UmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3Jl
Ojp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIlRlc3QiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldl
Ykluc3BlY3RvclVJIikpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5n
ZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBiYXNlVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJj
ZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIiksIG51
bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoYmFzZVVSTFJlZi5n
ZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotRGVidWdnYWJsZUlu
Zm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dhYmxlKCkKLXsKLSAg
ICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQgaW5m
ZXIgbW9yZSB1c2VmdWwgZGF0YS4KLSAgICByZXR1cm4gRGVidWdnYWJsZUluZm9EYXRhOjplbXB0
eSgpOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dIZWlnaHQoKQotewotICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9p
bnNwZWN0ZWRWaWV3V2luZG93LCAmcmVjdCk7Ci0gICAgcmV0dXJuIHJlY3QuYm90dG9tIC0gcmVj
dC50b3A7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3Rl
ZFdpbmRvd1dpZHRoKCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1f
aW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOwotICAgIHJldHVybiByZWN0LnJpZ2h0IC0gcmVj
dC5sZWZ0OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCi17
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZFNpemUgPSAzMDA7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNzUwOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7Ci0KLSAg
ICBpZiAobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cgJiYgOjpHZXRQYXJlbnQobV9pbnNwZWN0b3JW
aWV3V2luZG93KSA9PSBtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewotICAgICAgICA6OlNldFBh
cmVudChtX2luc3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVjdGVkVmlld1BhcmVudFdpbmRvdyk7
Ci0gICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfSElERSk7
Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjphZGRMaXN0
ZW5lcihtX2luc3BlY3RlZFZpZXdXaW5kb3csIHRoaXMpOwotCi0gICAgaWYgKG1fYXR0YWNobWVu
dFNpZGUgPT0gQXR0YWNobWVudFNpZGU6OkJvdHRvbSkgewotICAgICAgICB1bnNpZ25lZCBtYXhp
bXVtQXR0YWNoZWRIZWlnaHQgPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpICogMyAv
IDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoc3RkOjptYXgobWlu
aW11bUF0dGFjaGVkSGVpZ2h0LCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVt
QXR0YWNoZWRIZWlnaHQpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11
bUF0dGFjaGVkV2lkdGggPSBwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkgKiAzIC8gNDsK
LSAgICAgICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHN0ZDo6bWF4KG1pbmltdW1B
dHRhY2hlZFdpZHRoLCBzdGQ6Om1pbihkZWZhdWx0QXR0YWNoZWRTaXplLCBtYXhpbXVtQXR0YWNo
ZWRXaWR0aCkpKTsKLSAgICB9Ci0gICAgOjpTaG93V2luZG93KG1faW5zcGVjdG9yVmlld1dpbmRv
dywgU1dfU0hPVyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNo
KCkKLXsKLSAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewotICAg
ICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgICAgIG1faW5zcGVjdG9yRGV0YWNoV2lu
ZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBXZWJJbnNwZWN0b3JQcm94eUNsYXNzTmFtZSwgMCwg
V1NfT1ZFUkxBUFBFRFdJTkRPVywKLSAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIENXX1VTRURF
RkFVTFQsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCwKLSAgICAgICAg
ICAgIDAsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOwotICAgICAgICA6OlNldFBy
b3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3As
IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7Ci0gICAgfQotCi0gICAgV2ViQ29yZTo6
V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyOjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFZpZXdX
aW5kb3csIHRoaXMpOwotCi0gICAgUkVDVCByZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2lu
c3BlY3RvckRldGFjaFdpbmRvdywgJnJlY3QpOwotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldElu
c3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQ
YXJlbnRXaW5kb3cpOwotICAgIDo6U2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdywgbV9p
bnNwZWN0b3JEZXRhY2hXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmll
d1dpbmRvdywgMCwgMCwgMCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSBy
ZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZp
ZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8u
cGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0g
d2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0g
ICAgICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvckRldGFjaFdpbmRvdywgU1dfU0hPVyk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldEluc3BlY3Rl
ZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRX
aW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2lu
ZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIGhlaWdodCwgd2luZG93SW5m
by5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwot
ICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2luZG93SW5mby5s
ZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpbmRvd0luZm8u
bGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9S
REVSKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGF1dG8gd2luZG93SW5mbyA9IGdldElu
c3BlY3RlZFdpbmRvd0luZm8obV9pbnNwZWN0ZWRWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQ
YXJlbnRXaW5kb3cpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywg
MCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdpZHRoLCB3aW5kb3dJbmZvLnRvcCwgd2lkdGgs
IHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7
Ci0gICAgOjpTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZv
LmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5m
by5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9a
T1JERVIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSGlkZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9G
cm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiAvKiB1cmwgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNh
dGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29s
IC8qIGF2YWlsYWJsZSAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kV2luZG93KCkKLXsKLSAgICBw
bGF0Zm9ybURldGFjaCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURp
ZENsb3NlRm9yQ3Jhc2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0Ry
YWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg0YjA5MGZkYzcyLi45NTgy
Y2NlZTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00NDIxLDggKzQ0MjEsOCBAQAogCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEg
LyogV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTE4QjVEMDFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tJbnNwZWN0b3JXS1dlYlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTUxOEI1RDExRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0b3JXS1dlYlZpZXcubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NDI5M0EyMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0lu
c3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0lu
c3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLSW5zcGVj
dG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE1NDI5M0EzMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLSW5zcGVjdG9yTm9kZVNl
YXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJl
Y29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJl
Y29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU0MjkzQTMxOTVBNDND
NjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NDNFMzA1MjE1QUQxMkQwMDI3
OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDYyMTVBRDEyRTAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
UGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE1NDNFMzA4MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2NTQsMTAgKzY2NTQsNiBAQAogCQkJCUY0REI1NEU1
MjMxOUU3MzMwMDlFMzE1NSAvKiBXS0hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
Lm1tICovLAogCQkJCTkzM0RGODJEMUIzQkMwOTAwMEFFQTlFMyAvKiBXS0ltYWdlUHJldmlld1Zp
ZXdDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzREY4MkYxQjNCQzBCNDAwQUVBOUUzIC8qIFdLSW1h
Z2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIubW0gKi8sCi0JCQkJMEYzQzcyNTkxOTZGNUY2ODAwQUVE
RDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovLAotCQkJCTBGM0M3MjU3MTk2RjVG
NTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8sCi0JCQkJQTU0Mjkz
QTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25p
emVyLmggKi8sCi0JCQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovLAogCQkJCTJERDVFMTI3MjEwQURDN0EwMERC
NjAxMiAvKiBXS0tleWJvYXJkU2Nyb2xsaW5nQW5pbWF0b3IuaCAqLywKIAkJCQkyREQ1RTEyNjIx
MEFEQzdBMDBEQjYwMTIgLyogV0tLZXlib2FyZFNjcm9sbGluZ0FuaW1hdG9yLm1tICovLAogCQkJ
CTJEQjk0Mjk3MjM0RTdBN0YwMEU3NzZBRCAvKiBXS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaCAq
LywKQEAgLTc5ODMsNiArNzk3OSw5OSBAQAogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJOTFEOTcwRDQyM0RBNkQyNTAwNTdEQkMzIC8qIEluc3Bl
Y3RvciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJOTFE
OTcwRDUyM0RBNkQ1MDAwNTdEQkMzIC8qIEFnZW50cyAqLywKKwkJCQk5MUQ5NzBENzIzREE2RDVC
MDA1N0RCQzMgLyogaW9zICovLAorCQkJCTkxRDk3MEQ2MjNEQTZENTUwMDU3REJDMyAvKiBtYWMg
Ki8sCisJCQkJQTVFMzkxRkIyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5
LmNwcCAqLywKKwkJCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEgLyogSW5zcGVjdG9yVGFyZ2V0
UHJveHkuaCAqLywKKwkJCQlBNTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkuY3BwICovLAorCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5oICovLAorCQkJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQkxQzhFMjgzMzEy
NzVENzM4MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuY3BwICovLAorCQkJCTFDOEUyODMy
MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5oICovLAorCQkJCTFDNzdDMTk1
MTI4OEE4NzIwMDZBNzQyRiAvKiBXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJ
CQlBNTVCQTgyNzFCQTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCAq
LywKKwkJCQlBNTVCQTgyODFCQTM4RTFFMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yVXRpbGl0aWVz
LmggKi8sCisJCQkJQTVFQzZBRDIyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxl
LmNwcCAqLywKKwkJCQlBNUVDNkFEMzIxNTFCRDY5MDA2NzdEMTcgLyogV2ViUGFnZURlYnVnZ2Fi
bGUuaCAqLywKKwkJCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwICovLAorCQkJCUE1MTNGNTNFMjE1NEE1Q0MwMDY2Mjg0MSAvKiBXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBJbnNwZWN0b3I7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBENTIzREE2RDUwMDA1
N0RCQzMgLyogQWdlbnRzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCSk7CisJCQlwYXRoID0gQWdlbnRzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKKwkJOTFEOTcwRDYyM0RBNkQ1NTAwNTdEQkMzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTVEMzUwNEQxRDc4RjBEMjAwNTEyNEE5
IC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAorCQkJCTFDQThCOTM1MTI3Qzc3
NEUwMDU3NkMyQiAvKiBXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAqLywKKwkJCQk5OTRCQURGMTFG
N0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oICovLAorCQkJCTk5
NEJBREYyMUY3RDc3RUIwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tICov
LAorCQkJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmlldy5o
ICovLAorCQkJCUE1MThCNUQxMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0luc3BlY3RvcldLV2ViVmll
dy5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJOTFEOTcwRDcyM0RBNkQ1QjAwNTdEQkMzIC8qIGlvcyAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYzQzcyNTkxOTZGNUY2ODAwQUVE
RDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovLAorCQkJCTBGM0M3MjU3MTk2RjVG
NTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0gKi8sCisJCQkJQTU0Mjkz
QTIxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25p
emVyLmggKi8sCisJCQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBpb3M7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBFMDIzREE2RkIxMDA1N0RC
QzMgLyogSW5zcGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk5MUQ5NzBFNTIzREE3MDQ3MDA1N0RCQzMgLyogbWFjICovLAorCQkJCUE1NUJBODEy
MUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgKi8sCisJCQkJQTU1
QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi8sCisJCQkJ
QTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2Vz
LmluICovLAorCQkJCTFDOEUyODFGMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuY3Bw
ICovLAorCQkJCTFDOEUyODFFMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuaCAqLywK
KwkJCQkxQzhFMkExQzEyNzc4MzNGMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmlu
ICovLAorCQkJCUJDMTExQTU5MTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJJbnNwZWN0b3JDbGllbnQu
Y3BwICovLAorCQkJCUJDMDMyRDZEMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGll
bnQuaCAqLywKKwkJCQlBNTVCQTgzMjFCQTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyLmNwcCAqLywKKwkJCQlBNTVCQTgzMzFCQTNFNkZBMDA3Q0QzM0Qg
LyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmggKi8sCisJCQkJRkVFNDNGRDAx
RTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwICov
LAorCQkJCUZFRTQzRkQxMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyLmggKi8sCisJCQkJRkVFNDNGRDIxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4OTFENjIxOUIx
MjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmNwcCAqLywKKwkJCQkxQzg5MUQ2MzE5QjEy
NEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCAqLywKKwkJCQkxQzg5MUQ2NDE5QjEyNEZG
MDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCisJCQkJQTU0M0UzMEEy
MTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwICovLAorCQkJCUE1
NDNFMzA4MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggKi8sCisJ
CQkJQTU0M0UzMDkyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyLmNwcCAqLywKKwkJCQlBNTQzRTMwQjIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCAqLywKKwkJCQlBNTQzRTMwNjIxNUFEMTJFMDAyNzlD
RDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAgKi8sCisJCQkJ
QTU0M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gSW5zcGVjdG9yOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJOTFEOTcwRTUyM0RBNzA0NzAwNTdEQkMzIC8qIG1hYyAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUM4RTJEQUQx
Mjc4QzVCMjAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclVJTWFjLm1tICovLAorCQkJKTsKKwkJCXBh
dGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk5MzkyODhFMDIx
NDA0REYwMDBFQkJBMzMgLyogSW5kZXhlZERCICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTgxOTYsNiArODI4NSw3IEBACiAJCQkJQkMwRTVGQ0IxMkQ2OTZE
RDAwMTJBNzJBIC8qIEdlb2xvY2F0aW9uICovLAogCQkJCTJEN0U0M0JGMjM3NTJDRDkwMEVBNUNB
MCAvKiBHUFUgKi8sCiAJCQkJQkMyMDRFREYxMUM4M0U3MjAwOEYzMzc1IC8qIEluamVjdGVkQnVu
ZGxlICovLAorCQkJCTkxRDk3MEUwMjNEQTZGQjEwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8sCiAJ
CQkJMzNEM0EzQkQxMzM5NjA5ODAwNzA5QkU0IC8qIE1lZGlhQ2FjaGUgKi8sCiAJCQkJNEE0MTBG
NDExOUFGN0IyNzAwMkVCQUI1IC8qIE1lZGlhU3RyZWFtICovLAogCQkJCTUxMDVCMEQyMTYyRjdB
NUUwMEUyNzcwOSAvKiBOZXR3b3JrICovLApAQCAtODI0Niw4ICs4MzM2LDYgQEAKIAkJCQlCQzAz
MkQ2QTEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCAqLywKIAkJCQlC
QzFCRTFERjEyRDU0QTQxMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwICovLAog
CQkJCUJDMUJFMURFMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5oICov
LAotCQkJCUJDMTExQTU5MTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJJbnNwZWN0b3JDbGllbnQuY3Bw
ICovLAotCQkJCUJDMDMyRDZEMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJJbnNwZWN0b3JDbGllbnQu
aCAqLywKIAkJCQk1MTNGRkI4RTIwMTQ1OUMyMDAyNTk2RUEgLyogV2ViTWVzc2FnZVBvcnRDaGFu
bmVsUHJvdmlkZXIuY3BwICovLAogCQkJCTUxM0ZGQjhGMjAxNDU5QzIwMDI1OTZFQSAvKiBXZWJN
ZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oICovLAogCQkJCTMxMDk5OTcxMTQ2Qzc1OUIwMDI5
REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwICovLApAQCAtODI5Niw5ICs4Mzg0LDYg
QEAKIAkJCQkxQTkwQzFGMjEyNjRGRDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywK
IAkJCQk3QzM4NzQzMzE3MkY1NjE1MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJ
N0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKLQkJCQlBNTVCQTgx
MjFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwICovLAotCQkJCUE1
NUJBODEzMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oICovLAotCQkJ
CUE1NUJBODE0MUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdl
cy5pbiAqLywKIAkJCQkyRDgxOUI5OTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5jcHAgKi8sCiAJCQkJMkQ4MTlCOUExODYyNzVCMzAwMUYwM0QxIC8qIFZp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuaCAqLywKIAkJCQkyRDgxOUI5QjE4NjI3NUIzMDAx
RjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbiAqLywKQEAg
LTgzMTgsMTcgKzg0MDMsNiBAQAogCQkJCTFBNUIxQzUzMTg5ODdFREYwMDRGQ0Y5QiAvKiBXZWJE
b2N1bWVudExvYWRlci5oICovLAogCQkJCUJDMTExQURDMTEyRjVCOTMwMDMzN0JBQiAvKiBXZWJG
cmFtZS5jcHAgKi8sCiAJCQkJQkMwMzJEODkxMEY0MzdBMDAwNThDMTVBIC8qIFdlYkZyYW1lLmgg
Ki8sCi0JCQkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAgKi8s
Ci0JCQkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5oICovLAotCQkJ
CTFDOEUyQTFDMTI3NzgzM0YwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8s
Ci0JCQkJQTU1QkE4MzIxQkEzRTZGQTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5jcHAgKi8sCi0JCQkJQTU1QkE4MzMxQkEzRTZGQTAwN0NEMzNEIC8qIFdlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oICovLAotCQkJCUZFRTQzRkQwMUU2N0FGQzYw
MDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcCAqLywKLQkJCQlG
RUU0M0ZEMTFFNjdBRkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ci5oICovLAotCQkJCUZFRTQzRkQyMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluICovLAotCQkJCTFDODkxRDYyMTlCMTI0RkYwMEJB
NzlERCAvKiBXZWJJbnNwZWN0b3JVSS5jcHAgKi8sCi0JCQkJMUM4OTFENjMxOUIxMjRGRjAwQkE3
OUREIC8qIFdlYkluc3BlY3RvclVJLmggKi8sCi0JCQkJMUM4OTFENjQxOUIxMjRGRjAwQkE3OURE
IC8qIFdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAogCQkJCUJDODU3Rjg0MTJCODJEMEIw
MEVERUIyRSAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJQkM4NTdG
ODMxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggKi8sCiAJ
CQkJQkM5NjNENkExMTNERDE5MjAwNTc0QkUyIC8qIFdlYlBhZ2UuY3BwICovLApAQCAtODMzNiwx
MiArODQxMCw2IEBACiAJCQkJQzBDRTcyNTgxMjQ3RTREQTAwQkMwRUM0IC8qIFdlYlBhZ2UubWVz
c2FnZXMuaW4gKi8sCiAJCQkJQkM3QjYyMTQxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91
cFByb3h5LmNwcCAqLywKIAkJCQlCQzdCNjIxMzEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdy
b3VwUHJveHkuaCAqLywKLQkJCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5jcHAgKi8sCi0JCQkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdl
YlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLywKLQkJCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkg
LyogV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICovLAotCQkJCUE1NDNFMzBC
MjE1QzhBODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICov
LAotCQkJCUE1NDNFMzA2MjE1QUQxMkUwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsLmNwcCAqLywKLQkJCQlBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyog
V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oICovLAogCQkJCTJENUM5RDAz
MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5jcHAgKi8sCiAJCQkJMkQ1QzlEMDQx
OUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggKi8sCiAJCQkJQkNBMEVGN0UxMjMz
MUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVwLmNwcCAqLywKQEAgLTgzNjUsNiArODQzMyw3IEBA
CiAJCQkJMUFCN0Q0QzcxMjg4QUE5QTAwQ0ZEMDhDIC8qIERvd25sb2FkcyAqLywKIAkJCQk1MTVC
RTE3QjFENTRFRjVBMDBERDdDNjggLyogR2FtZXBhZCAqLywKIAkJCQkyRDdFNDNCQjIzNzUyQ0M0
MDBFQTVDQTAgLyogR1BVICovLAorCQkJCTkxRDk3MEQ0MjNEQTZEMjUwMDU3REJDMyAvKiBJbnNw
ZWN0b3IgKi8sCiAJCQkJMkRBOTQ0QTgxODg0RTlBQjAwRUQ4NkRCIC8qIGlvcyAqLywKIAkJCQlC
QzExMUIxODExMkY1RkI0MDAzMzdCQUIgLyogTGF1bmNoZXIgKi8sCiAJCQkJQkNDRjA4NUMxMTNG
M0I3NTAwQzY1MEM1IC8qIG1hYyAqLywKQEAgLTgzOTQsOCArODQ2Myw2IEBACiAJCQkJMkRENUE3
MkExRUJGMDlBNzAwOUJBNTk3IC8qIEhpZGRlblBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0Nv
dW50ZXIuaCAqLywKIAkJCQk4MzlBMkYyRjFFMjA2NzM5MDAzOTA1N0UgLyogSGlnaFBlcmZvcm1h
bmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuY3BwICovLAogCQkJCTgzOUEyRjMwMUUyMDY3MzkwMDM5
MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5oICovLAotCQkJCUE1
RTM5MUZCMjE4M0MxRTkwMEM4RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgKi8sCi0J
CQkJQTVFMzkxRkMyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3RvclRhcmdldFByb3h5LmggKi8s
CiAJCQkJNUNFQUJBMkIyMzMzMjUxNDAwNzk3Nzk3IC8qIExlZ2FjeUdsb2JhbFNldHRpbmdzLmNw
cCAqLywKIAkJCQk1Q0VBQkEyQTIzMzMyNDc3MDA3OTc3OTcgLyogTGVnYWN5R2xvYmFsU2V0dGlu
Z3MuaCAqLywKIAkJCQkzMTYwN0YzODE5NjI3MDAyMDA5Qjg3REEgLyogTGVnYWN5U2Vzc2lvblN0
YXRlQ29kaW5nLmggKi8sCkBAIC04NDExLDkgKzg0NzgsNiBAQAogCQkJCTgzMDQ4QUU1MUFDQTQ1
REMwMDgyQzgzMiAvKiBQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmggKi8sCiAJCQkJNDY4MzU2OUIy
MUU4MUNDNzAwNkUyN0EzIC8qIFByb3Zpc2lvbmFsUGFnZVByb3h5LmNwcCAqLywKIAkJCQk0Njgz
NTY5QTIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuaCAqLywKLQkJCQlB
NTVCQTgxQjFCQTI1QjFFMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwICov
LAotCQkJCUE1NUJBODE5MUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5oICovLAotCQkJCUE1NUJBODFBMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQlCQzExMUIwODExMkY1RTNDMDAzMzdCQUIgLyog
UmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8sCiAJCQkJMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdD
IC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLywKIAkJCQk1Q0E5ODU0OTIxMEJFQjVBMDA1N0VC
NkIgLyogU2FmZUJyb3dzaW5nV2FybmluZy5oICovLApAQCAtODQ5MywxMSArODU1Nyw2IEBACiAJ
CQkJQkMxQkUxRjExMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3Bw
ICovLAogCQkJCUJDMUJFMUYwMTJENTREQkQwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3Zp
ZGVyLmggKi8sCiAJCQkJNTFDOEUxOUIxRjIxNjE3MjAwQkY3MzFCIC8qIFdlYkljb25EYXRhYmFz
ZS5oICovLAotCQkJCTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94
eS5jcHAgKi8sCi0JCQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclBy
b3h5LmggKi8sCi0JCQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluICovLAotCQkJCUE1NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuY3BwICovLAotCQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAv
KiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLywKIAkJCQlDOThDNDhBMzFCNkZENEMzMDAxNDUx
MDMgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcCAqLywKIAkJCQlDOThDNDhBNDFC
NkZENEMzMDAxNDUxMDMgLyogV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmggKi8sCiAJCQkJ
QzlDMTgzMzcxQjczRkQ2QTAwNzAzNkE3IC8qIFdlYk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlckNs
aWVudC5jcHAgKi8sCkBAIC04NTA4LDE2ICs4NTY3LDEyIEBACiAJCQkJN0NDQ0M4RjkxQTVGNTBG
RDAwOEZCMERBIC8qIFdlYk5hdmlnYXRpb25TdGF0ZS5oICovLAogCQkJCUJDMURGRUEzMTJCMzFG
ODcwMDVERjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmNwcCAqLywKIAkJ
CQlCQzFERkVBMjEyQjMxRjg3MDA1REY3MzAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQ
cm94eS5oICovLAotCQkJCUE1RUM2QUQyMjE1MUJENjkwMDY3N0QxNyAvKiBXZWJQYWdlRGVidWdn
YWJsZS5jcHAgKi8sCi0JCQkJQTVFQzZBRDMyMTUxQkQ2OTAwNjc3RDE3IC8qIFdlYlBhZ2VEZWJ1
Z2dhYmxlLmggKi8sCiAJCQkJODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8sCiAJCQkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1
IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovLAogCQkJCUJDN0I2MjA1MTI5
QTBBNjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuY3BwICovLAogCQkJCUJDN0I2MjA0MTI5QTBB
NjcwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXAuaCAqLywKIAkJCQkyRDlFQTMxMDFBOTZEOUVCMDAy
RDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmNwcCAqLywKIAkJCQkyRDlFQTMw
RTFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8sCi0J
CQkJQTUxM0Y1M0YyMTU0QTVDRDAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVy
LmNwcCAqLywKLQkJCQlBNTEzRjUzRTIxNTRBNUNDMDA2NjI4NDEgLyogV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaCAqLywKIAkJCQlCQzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2ViUGFn
ZVByb3h5LmNwcCAqLywKIAkJCQlCQzAzMkRDQjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVBy
b3h5LmggKi8sCiAJCQkJQkNCRDM4RkExMjVCQUI5QTAwRDJDMjlGIC8qIFdlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbiAqLywKQEAgLTkxODMsNyArOTIzOCw2IEBACiAJCQkJN0M2RDM3RkExNzJGNTU1
RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gKi8sCiAJCQkJMUFBRjI2MzcxNDY4N0MzOTAw
NEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLmggKi8sCiAJCQkJMUFBRjI2
MzYxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tICov
LAotCQkJCTFDOEUyREFEMTI3OEM1QjIwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JVSU1hYy5tbSAq
LywKIAkJCQlCQzk2M0Q2RDExM0REMUE1MDA1NzRCRTIgLyogV2ViUGFnZU1hYy5tbSAqLywKIAkJ
CQkyOUNENTVBODEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dEJhc2UuaCAqLywKIAkJCQkyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdEJhc2UubW0gKi8sCkBAIC05MjYwLDcgKzkzMTQsNiBAQAogCQkJCTFB
RkRFNjVCMTk1NEU4RDUwMEM0OEZGQSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwICov
LAogCQkJCTBGQ0I0RTU4MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5oICov
LAogCQkJCTBGQ0I0RTU5MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbE1hYy5tbSAq
LywKLQkJCQlBNUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlNYWMubW0gKi8sCiAJCQkJRTE4RTY5MDkxNjlCNTYzRjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGlt
UHJveHkuY3BwICovLAogCQkJCUUxOEU2OTBBMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hp
bVByb3h5LmggKi8sCiAJCQkJRTE4RTY5MEQxNjlCNTdERjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGlt
UHJveHkubWVzc2FnZXMuaW4gKi8sCkBAIC05MjgxLDcgKzkzMzQsNiBAQAogCQkJCUY2RDYzMkJB
MTMzRDE4MUIwMDc0M0Q3NyAvKiBXZWJDb29raWVNYW5hZ2VyUHJveHlNYWMubW0gKi8sCiAJCQkJ
RTU2OEI5MjAyMEEzQUM2QTAwRTNDODU2IC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93
bk1hYy5oICovLAogCQkJCUU1NjhCOTIxMjBBM0FDNkEwMEUzQzg1NiAvKiBXZWJEYXRhTGlzdFN1
Z2dlc3Rpb25zRHJvcGRvd25NYWMubW0gKi8sCi0JCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJC
IC8qIFdlYkluc3BlY3RvclByb3h5TWFjLm1tICovLAogCQkJCUJDODU3RTg1MTJCNzFFQkIwMEVE
RUIyRSAvKiBXZWJQYWdlUHJveHlNYWMubW0gKi8sCiAJCQkJQkM1NzUwOTUxMjY4RjNDNjAwNkYw
RjEyIC8qIFdlYlBvcHVwTWVudVByb3h5TWFjLmggKi8sCiAJCQkJQkM1NzUwOTYxMjY4RjNDNjAw
NkYwRjEyIC8qIFdlYlBvcHVwTWVudVByb3h5TWFjLm1tICovLApAQCAtOTI5MiwxMCArOTM0NCw2
IEBACiAJCQkJQ0RDQTg1QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIubW0gKi8sCiAJCQkJOTMyMUQ1ODUxQTM4RUUzQzAwODA1MkJFIC8qIFdLSW1tZWRp
YXRlQWN0aW9uQ29udHJvbGxlci5oICovLAogCQkJCTkzMjFENTg3MUEzOEVFNzQwMDgwNTJCRSAv
KiBXS0ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gKi8sCi0JCQkJOTk0QkFERjExRjdENzdF
QTAwQjU3MUU3IC8qIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCAqLywKLQkJCQk5OTRCQURG
MjFGN0Q3N0VCMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbSAqLywKLQkJ
CQlBNTE4QjVEMDFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCAqLywK
LQkJCQlBNTE4QjVEMTFGRTFENTVCMDBGOUZBMjggLyogV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0g
Ki8sCiAJCQkJMEZDQjRFNUMxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3LmggKi8s
CiAJCQkJMEZDQjRFNUQxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRpbmdWaWV3Lm1tICovLAog
CQkJCTUxM0U0NjJCMUFEODM3NTYwMDE2MjM0QSAvKiBXS1NoYXJpbmdTZXJ2aWNlUGlja2VyRGVs
ZWdhdGUuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjU1OGQ4ZjBjMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTAs
MCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRl
SW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9E
T01XcmFwcGVyV29ybGQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KKworI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFU
Rk9STShXSU4pCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxSZW1v
dGVXZWJJbnNwZWN0b3JVST4gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBw
YWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVdlYkluc3BlY3RvclVJKHBh
Z2UpKTsKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yVUk6OlJlbW90ZVdlYkluc3BlY3RvclVJKFdl
YlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyKHBhZ2UpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmluaXRpYWxp
emUoRGVidWdnYWJsZUluZm9EYXRhJiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFj
a2VuZENvbW1hbmRzVVJMKQoreworICAgIG1fZGVidWdnYWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVn
Z2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VS
TDsKKworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hl
ci5yZXNldCgpOworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgi
c2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB0cnVlKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNw
ZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNhdmVkVVJMIl9zLCB1cmwpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCit7Cisg
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJM
Il9zLCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRv
RnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3NhZ2UpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9C
YWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgaWYgKG1fZnJvbnRl
bmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgpOworCisg
ICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBt
X3BhZ2UuY29yZVBhZ2UoKSk7CisgICAgbV9mcm9udGVuZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9i
amVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworfQorCit2b2lkIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9zLCB0cnVlKTsKKworICAgIGJyaW5nVG9Gcm9u
dCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTdGFydFdpbmRvd0RyYWcoKSwgbV9wYWdlLmlkZW50
aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29y
ZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkp
OworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVj
dCk7Cit9CisKK1dlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigp
OworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQoreworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdl
LmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2lu
ZG93KCkKK3sKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNl
dEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIpOworCisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kRGlkQ2xvc2UoKSwgbV9wYWdlLmlkZW50aWZpZXIo
KSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlb3BlbigpLCBtX3BhZ2UuaWRlbnRpZmll
cigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCit7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdl
LmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5l
d1RhYihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6T3BlbkluTmV3VGFiKHVybCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFz
KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTYXZlKGZpbGVuYW1l
LCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1fcGFnZS5pZGVudGlmaWVy
KCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjphcHBlbmQoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX3BhZ2UuaWRl
bnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICAvLyBEbyBub3RoaW5nLiBU
aGUgcmVtb3RlIHNpZGUgY2FuIGtub3cgaWYgdGhlIG1haW4gcmVzb3VyY2UgY2hhbmdlZC4KK30K
Kwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlk
ZW50aWZpZXIoKSk7Cit9CisKK0luc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmRlYnVnZ2FibGVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dh
YmxlSW5mby5kZWJ1Z2dhYmxlVHlwZTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJ
Ojp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJ
bmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJ
Ojp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJ
bmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJ
Ojp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVidWdnYWJs
ZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Cit9CisKK2Jvb2wgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OnRhcmdldElzU2ltdWxhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxl
SW5mby50YXJnZXRJc1NpbXVsYXRvcjsKK30KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1F
VFJZKQorYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2lu
ZygpCit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0
aWNMb2dnaW5nRW5hYmxlZCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2dE
aWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsICBjb25zdCBEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIG1fcGFn
ZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNz
YWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5hbWUsICJSZW1vdGUgV2ViIEluc3BlY3RvciBG
cm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFyeSwgU2hvdWxkU2FtcGxlOjpObyk7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIEluc3BlY3RvcidzIGRpYWdub3N0aWMgbG9n
Z2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgdW5sZXNzIHRoZSBwYWdlIHNldHRpbmcg
aXMgYWxzbyBlbmFibGVkLgorICAgIEFTU0VSVCghYXZhaWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25v
c3RpY0xvZ2dpbmcoKSk7CisgICAgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWls
YWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0
RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUpOworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAm
JiAhUExBVEZPUk0oV0lOKQorU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRT
dHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworfQorI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0
b3JVSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNGFlMWMxZGFh
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
UmVtb3RlV2ViSW5zcGVjdG9yVUkuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+CisjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsK
K2NsYXNzIEZsb2F0UmVjdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBh
Z2U7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclVJIGZpbmFsIDogcHVibGljIFJlZkNvdW50
ZWQ8UmVtb3RlV2ViSW5zcGVjdG9yVUk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1
YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKKworICAgIC8v
IEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNl
aXZlci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gQ2FsbGVkIGJ5IFJlbW90ZVdlYkluc3Bl
Y3RvclVJIG1lc3NhZ2VzCisgICAgdm9pZCBpbml0aWFsaXplKERlYnVnZ2FibGVJbmZvRGF0YSYm
LCBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCk7CisgICAgdm9pZCBkaWRTYXZlKGNv
bnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIGRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCk7
CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5n
QXZhaWxhYmxlKGJvb2wpOworI2VuZGlmCisKKyAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudAorICAgIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOworICAg
IHZvaWQgZnJvbnRlbmRMb2FkZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5nZVNoZWV0UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0YXJ0V2lu
ZG93RHJhZygpIG92ZXJyaWRlOworICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0
IHkpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKyAgICBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIFN0cmluZyBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2JhY2tlbmRDb21tYW5kc1VSTDsgfQorICAgIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVi
dWdnYWJsZVR5cGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1O
YW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxh
eW91dERpcmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBicmluZ1RvRnJvbnQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsb3NlV2luZG93KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZW9wZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc2V0U3RhdGUoKSBvdmVycmlkZTsKKworICAg
IHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNhdmUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGVuZChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKKyAgICB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgc3VwcG9ydHNE
aWFnbm9zdGljTG9nZ2luZygpIG92ZXJyaWRlOworICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
OyB9CisgICAgdm9pZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUs
IGNvbnN0IFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkm
KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDE7IH0KKyAgICB2b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGUg
eyB9CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJp
ZGUgeyB9CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVy
cmlkZSB7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZW1vdGVXZWJJbnNwZWN0b3JVSShX
ZWJQYWdlJik7CisKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgV2ViSW5zcGVjdG9yRnJvbnRl
bmRBUElEaXNwYXRjaGVyIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyOworICAgIFJlZlB0cjxXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OworICAgIERlYnVnZ2Fi
bGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOworICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5k
c1VSTDsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgbV9kaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJiZjdlNGM4NzhkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNw
ZWN0b3JVSS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM0IEBACisjIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9y
VUkgeworICAgIEluaXRpYWxpemUoc3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRl
YnVnZ2FibGVJbmZvLCBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKQorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9URUxFTUVUUlkpCisgICAgU2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9v
bCBhdmFpbGFibGUpCisjZW5kaWYKKworICAgIERpZFNhdmUoU3RyaW5nIHVybCkKKyAgICBEaWRB
cHBlbmQoU3RyaW5nIHVybCkKKworICAgIFNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmcgbWVz
c2FnZSkKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzMy
MjVkMTNkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKQEAgLTAsMCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIK
KworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2Vi
SW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvclBhZ2VBZ2VudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+
CisKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTA7CitzdGF0
aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1Oworc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAwOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8V2ViSW5zcGVjdG9yPiBXZWJJ
bnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Cit9CisKK1dlYkluc3BlY3Rvcjo6V2ViSW5zcGVjdG9y
KFdlYlBhZ2UqIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKK3sKK30KKworV2ViSW5zcGVjdG9y
Ojp+V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAg
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCkKK3sKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQo
Y2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1l
bnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyKQoreworICAgIC8vIFdlIG1pZ2h0IHJlY2Vp
dmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlzIHdlYiBwcm9jZXNzIGdvdCBzd2FwcGVkIGludG8g
YSBXZWJQYWdlUHJveHkKKyAgICAvLyBzaG9ydGx5IGFmdGVyIGFub3RoZXIgcHJvY2VzcyBlc3Rh
Ymxpc2hlZCB0aGUgY29ubmVjdGlvbi4KKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsK
KyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9m
cm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKworI2lmIFVTRShVTklYX0RPTUFJ
Tl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRl
bnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9y
KCkpOworI2VsaWYgT1MoREFSV0lOKQorICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBj
b25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsK
KyNlbGlmIE9TKFdJTkRPV1MpCisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5l
Y3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5oYW5kbGUoKSk7Cisj
ZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBp
ZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmllcklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6
Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwg
KnRoaXMpOworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5vcGVuKCk7CisKKyAgICBmb3IgKGF1
dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zKQorICAgICAgICBjYWxs
YmFjaygpOworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVhcigpOworfQorCit2
b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKQoreworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7
CisKKyAgICAvLyBJZiB3ZSB0cmllZCB0byBjbG9zZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0IHdh
cyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rpb24gZXhpc3RzIHlldC4KKyAgICBpZiAobV9mcm9u
dGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRh
dGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIH0KKwor
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9ucy5jbGVhcigpOworCisgICAgbV9hdHRhY2hl
ZCA9IGZhbHNlOworICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBmYWxzZTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoRnVuY3Rpb248
dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewor
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9mcm9u
dGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKKy8v
IENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVzc2FnZXMKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93
KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworfQor
Cit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFn
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbG9zZSBjb3VsZCBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3duLgorICAgIGlmICghbV9mcm9udGVuZENvbm5lY3Rp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIGNsb3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlIH07CisKKyAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlID0gbV9wYWdlLT5jb3JlUGFn
ZSgpOworICAgIGlmICghaW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJh
bWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGluc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOworICAg
IEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICppbnNwZWN0ZWRNYWluRnJhbWUu
ZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0cmluZyB9LCAiX2JsYW5rIl9zLCBMb2NrSGlzdG9y
eTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vLCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dO
YXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5ld0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywg
U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3csIEluaXRpYXRlZEJ5
TWFpbkZyYW1lOjpVbmtub3duIH07CisKKyAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbiB7ICpp
bnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5pbml0aWF0ZWRCeU1haW5GcmFtZSgpLCBOYXZpZ2F0
aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKKyAgICBQYWdlKiBuZXdQYWdlID0gaW5zcGVjdGVkUGFn
ZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGluc3BlY3RlZE1haW5GcmFtZSwgZnJhbWVMb2FkUmVx
dWVzdCwgeyB9LCBhY3Rpb24pOworICAgIGlmICghbmV3UGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbmV3UGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkubG9hZChXVEZNb3ZlKGZyYW1lTG9h
ZFJlcXVlc3QpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OmV2YWx1YXRlU2NyaXB0Rm9yVGVz
dChjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChzY3JpcHQpOworfQorCit2b2lkIFdl
Ykluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNo
ZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTaG93Q29uc29sZSgpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNo
ZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpTaG93UmVzb3VyY2VzKCksIDApOworICAgIH0pOworfQorCit2b2lkIFdl
Ykluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllciBmcmFtZUlkZW50aWZpZXIpCit7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJZGVudGlmaWVyKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuc2hvdygpOworCisgICAgU3RyaW5nIGluc3BlY3RvckZyYW1lSWRlbnRpZmllciA9IG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmVuc3VyZVBhZ2VBZ2VudCgpLmZy
YW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25F
c3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShpbnNwZWN0b3JG
cmFtZUlkZW50aWZpZXIpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0
YXJ0UGFnZVByb2ZpbGluZygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0g
eworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygpLCAwKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBh
Z2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFi
bGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQcm9maWxpbmcoKSwgMCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICgh
bV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGVuRnJvbnRlbmRD
b25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSwg
MCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzdG9wRWxlbWVudFNlbGVjdGlv
bigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0b3BFbGVt
ZW50U2VsZWN0aW9uKCksIDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZWxl
bWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCit7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRl
bnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hh
bmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6VGlt
ZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3I6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlk
ZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCksIG1fcGFn
ZS0+aWRlbnRpZmllcigpKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRv
dygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIERvbid0IGFsbG93IGF0dGFjaGluZyB0byBhbm90aGVyIGluc3BlY3RvciAt
LSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2luZG93IGlzIHRvbyBtdWNoIQorICAgIGlmIChtX3Bh
Z2UtPmlzSW5zcGVjdG9yUGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJ
ZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwgYWxsb3cgYXR0YWNoaW5nIGFnYWluIHRvIGFsbG93
IHN3aXRjaGluZyBzaWRlcy4KKyAgICBpZiAobV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQg
YmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3RvciBzaXplLgor
ICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPm1h
aW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworICAgIHVuc2lnbmVkIGluc3BlY3Rl
ZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNp
YmxlV2lkdGgoKTsKKyAgICB1bnNpZ25lZCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBpbnNwZWN0
ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87CisgICAgcmV0dXJuIG1p
bmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0
dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFnZVdpZHRoOworfQorCit2b2lkIFdlYkluc3BlY3Rv
cjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpCit7CisgICAgaWYgKG1fYXR0YWNoZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgY2FuQXR0YWNoV2luZG93ID0gdGhpcy0+Y2FuQXR0
YWNoV2luZG93KCk7CisgICAgaWYgKG1fcHJldmlvdXNDYW5BdHRhY2ggPT0gY2FuQXR0YWNoV2lu
ZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3ByZXZpb3VzQ2FuQXR0YWNoID0gY2FuQXR0
YWNoV2luZG93OworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEF2YWls
YWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi4yNmI4OWU1MjI3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmgKQEAgLTAsMCArMSwxMDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFQSU9iamVj
dC5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yIDogcHVi
bGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlSW5zcGVjdG9yPiwg
cHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxXZWJJbnNwZWN0b3I+IGNyZWF0ZShXZWJQYWdlKik7CisKKyAgICBXZWJQYWdlKiBwYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisKKyAgICB2b2lkIHVwZGF0ZURvY2tpbmdBdmFpbGFi
aWxpdHkoKTsKKworICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JN
ZXNzYWdlUmVjZWl2ZXIuY3BwCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIElQQzo6Q29ubmVjdGlv
bjo6Q2xpZW50CisgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZSB7
IGNsb3NlKCk7IH0KKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJy
aWRlIHsgY2xvc2UoKTsgfQorCisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBjbG9zZSgpOwor
CisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOworCisgICAg
dm9pZCBjYW5BdHRhY2hXaW5kb3coYm9vbCYgcmVzdWx0KTsKKworICAgIHZvaWQgc2hvd0NvbnNv
bGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKworICAgIHZvaWQgc2hvd01haW5SZXNv
dXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcik7CisKKyAgICB2b2lkIHNldEF0
dGFjaGVkKGJvb2wgYXR0YWNoZWQpIHsgbV9hdHRhY2hlZCA9IGF0dGFjaGVkOyB9CisKKyAgICB2
b2lkIGV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCk7CisKKyAgICB2
b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOworICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsK
KworICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7CisgICAgdm9pZCBzdG9wRWxlbWVu
dFNlbGVjdGlvbigpOworICAgIHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Cisg
ICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCk7CisgICAgdm9pZCBzZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOworCisgICAgdm9p
ZCBzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50KTsKKworICAgIHZvaWQgZGlz
Y29ubmVjdEZyb21QYWdlKCkgeyBjbG9zZSgpOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFdlYkluc3BlY3RvckNsaWVudDsKKworICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvcihXZWJQ
YWdlKik7CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yKCk7CisKKyAgICBib29sIGNhbkF0dGFj
aFdpbmRvdygpOworCisgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50CisgICAg
dm9pZCBvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCk7CisgICAgdm9p
ZCBjbG9zZUZyb250ZW5kQ29ubmVjdGlvbigpOworCisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsK
KworICAgIHZvaWQgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CisKKyAgICBXZWJQYWdlKiBtX3BhZ2U7CisKKyAgICBSZWZQdHI8SVBDOjpDb25u
ZWN0aW9uPiBtX2Zyb250ZW5kQ29ubmVjdGlvbjsKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgp
Pj4gbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zOworCisgICAgYm9vbCBtX2F0dGFjaGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fcHJldmlvdXNDYW5BdHRhY2ggeyBmYWxzZSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYWY3NGI1ZTZiMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1lc3NhZ2Vz
LmluCkBAIC0wLDAgKzEsNDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9yIHsKKyAgICBTaG93KCkKKyAgICBD
bG9zZSgpCisKKyAgICBTZXRBdHRhY2hlZChib29sIGF0dGFjaGVkKQorCisgICAgU2hvd0NvbnNv
bGUoKQorICAgIFNob3dSZXNvdXJjZXMoKQorCisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1l
KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCisKKyAgICBPcGVuSW5O
ZXdUYWIoU3RyaW5nIHVybCkKKworICAgIFN0YXJ0UGFnZVByb2ZpbGluZygpCisgICAgU3RvcFBh
Z2VQcm9maWxpbmcoKQorCisgICAgU3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKKyAgICBTdG9wRWxl
bWVudFNlbGVjdGlvbigpCisKKyAgICBTZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2ht
ZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYjA2ODAxOWVmOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50
LmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JDbGllbnQuaCIKKworI2luY2x1ZGUg
IkRyYXdpbmdBcmVhLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250
cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFz
cyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXll
ckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmVw
YWludEluZGljYXRvckxheWVyQ2xpZW50KFdlYkluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xp
ZW50KQorICAgICAgICA6IG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICB7
CisgICAgfQorICAgIHZpcnR1YWwgflJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCgpIHsgfQor
cHJpdmF0ZToKKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvbkVuZGVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNw
ZWN0b3JDbGllbnQuYW5pbWF0aW9uRW5kZWRGb3JMYXllcihsYXllcik7CisgICAgfQorICAgIAor
ICAgIFdlYkluc3BlY3RvckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7Cit9OworCitXZWJJbnNw
ZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVudChXZWJQYWdlKiBwYWdlKQorICAgIDogbV9w
YWdlKHBhZ2UpCisgICAgLCBtX2hpZ2hsaWdodE92ZXJsYXkobnVsbHB0cikKK3sKK30KKworV2Vi
SW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KCkKK3sKKyAgICBmb3IgKGF1dG8m
IGxheWVyIDogbV9wYWludFJlY3RMYXllcnMpCisgICAgICAgIGxheWVyLT5yZW1vdmVGcm9tUGFy
ZW50KCk7CisgICAgCisgICAgbV9wYWludFJlY3RMYXllcnMuY2xlYXIoKTsKKworICAgIGlmICht
X3BhaW50UmVjdE92ZXJsYXkgJiYgbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2Ut
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5
KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKK3sKKyAg
ICBpZiAoV2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSBtX3BhZ2UtPmluc3BlY3RvcihXZWJQYWdl
OjpMYXp5Q3JlYXRpb25Qb2xpY3k6OlVzZUV4aXN0aW5nT25seSkpCisgICAgICAgIGluc3BlY3Rv
ci0+Y2xvc2UoKTsKKworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6ZnJvbnRlbmRDb3VudENoYW5nZWQodW5zaWduZWQgY291bnQpCit7CisgICAgbV9wYWdl
LT5pbnNwZWN0b3JGcm9udGVuZENvdW50Q2hhbmdlZChjb3VudCk7Cit9CisKK0luc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsKiBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5Mb2NhbEZyb250ZW5kKElu
c3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3Io
KS0+b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY29udHJvbGxlci0+aXNVbmRlclRlc3QoKSk7
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmJy
aW5nRnJvbnRlbmRUb0Zyb250KCkKK3sKKyAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKKyAg
ICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+YnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpkaWRSZXNpemVNYWluRnJhbWUoRnJhbWUqKQoreworICAgIGlmICht
X3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT51cGRhdGVE
b2NraW5nQXZhaWxhYmlsaXR5KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdo
bGlnaHQoKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGlmICghbV9oaWdobGlnaHRPdmVybGF5KSB7CisgICAgICAg
IGF1dG8gaGlnaGxpZ2h0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOworICAg
ICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBoaWdobGlnaHRPdmVybGF5LnB0cigpOworICAgICAg
ICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdl
T3ZlcmxheShXVEZNb3ZlKGhpZ2hsaWdodE92ZXJsYXkpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkZhZGUpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmlt
YXRpb24oKTsKKyAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsK
KyAgICB9CisjZWxzZQorICAgIEhpZ2hsaWdodCBoaWdobGlnaHQ7CisgICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZ2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgSW5z
cGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0ZVN5c3RlbTo6RG9jdW1lbnQpOworICAgIG1fcGFnZS0+
c2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdobGlnaHQpOworI2VuZGlmCit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBpZiAobV9oaWdobGlnaHRPdmVybGF5KQorICAgICAgICBtX3BhZ2UtPmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX2hp
Z2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7CisjZWxzZQorICAg
IG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGFpbnRSZWN0
T3ZlcmxheSkgeworICAgICAgICBtX3BhaW50UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3Jl
YXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAg
bV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92
ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZh
ZGUpOworICAgIH0KKworICAgIGlmICghbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KQorICAg
ICAgICBtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQgPSBtYWtlVW5pcXVlPFJlcGFpbnRJbmRp
Y2F0b3JMYXllckNsaWVudD4oKnRoaXMpOworCisgICAgYXV0byBwYWludExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3Rv
cnkoKSwgKm1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCk7CisgICAgCisgICAgcGFpbnRMYXll
ci0+c2V0TmFtZSgicGFpbnQgcmVjdCIpOworICAgIHBhaW50TGF5ZXItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBwYWludExheWVyLT5zZXRQb3NpdGlvbihyZWN0LmxvY2F0
aW9uKCkpOworICAgIHBhaW50TGF5ZXItPnNldFNpemUocmVjdC5zaXplKCkpOworICAgIHBhaW50
TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigxLjBmLCAwLjBmLCAwLjBmLCAwLjJmKSk7
CisKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBmYWRlS2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5KTsKKyAgICBmYWRlS2V5ZnJhbWVzLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0
aW9uVmFsdWU+KDAsIDEpKTsKKworICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8
RmxvYXRBbmltYXRpb25WYWx1ZT4oMC4yNSwgMCkpOworICAgIAorICAgIGF1dG8gb3BhY2l0eUFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CisgICAgb3BhY2l0eUFuaW1hdGlvbi0+c2V0
RHVyYXRpb24oMC4yNSk7CisKKyAgICBwYWludExheWVyLT5hZGRBbmltYXRpb24oZmFkZUtleWZy
YW1lcywgRmxvYXRTaXplKCksIG9wYWNpdHlBbmltYXRpb24ucHRyKCksICJvcGFjaXR5Il9zLCAw
KTsKKyAgICAKKyAgICBHcmFwaGljc0xheWVyJiByYXdMYXllciA9IHBhaW50TGF5ZXIuZ2V0KCk7
CisgICAgbV9wYWludFJlY3RMYXllcnMuYWRkKFdURk1vdmUocGFpbnRMYXllcikpOworCisgICAg
R3JhcGhpY3NMYXllciYgb3ZlcmxheVJvb3RMYXllciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5
ZXIoKTsKKyAgICBvdmVybGF5Um9vdExheWVyLmFkZENoaWxkKHJhd0xheWVyKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgR3JhcGhp
Y3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllciogbm9uQ29uc3RMYXllciA9IGNv
bnN0X2Nhc3Q8R3JhcGhpY3NMYXllcio+KGxheWVyKTsKKyAgICBub25Db25zdExheWVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWludFJlY3RMYXllcnMucmVtb3ZlKCpub25Db25zdExh
eWVyKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6c2hvd0luc3BlY3RvckluZGljYXRpb24oKQoreworICAgIG1fcGFnZS0+c2hvd0luc3Bl
Y3RvckluZGljYXRpb24oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVJbnNw
ZWN0b3JJbmRpY2F0aW9uKCkKK3sKKyAgICBtX3BhZ2UtPmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9u
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRTZXRTZWFyY2hpbmdGb3JOb2Rl
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZW5hYmxlZCkKKyAgICAgICAgbV9wYWdlLT5lbmFi
bGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7CisgICAgZWxzZQorICAgICAgICBtX3BhZ2UtPmRpc2Fi
bGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIGlmICht
X3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5lbGVtZW50
U2VsZWN0aW9uQ2hhbmdlZChhY3RpdmUpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2Ut
Pmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT50aW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYWN0aXZlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldE1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQor
eworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3Rv
cigpLT5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBh
Z2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRo
ZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5nIGF3YXkgZnJvbSB0aGUgd2ViIHBhZ2UsIHJlc2V0IGl0
LgorICAgIEFTU0VSVChtX2hpZ2hsaWdodE92ZXJsYXkpOworICAgIG1faGlnaGxpZ2h0T3Zlcmxh
eSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9QYWdl
KFBhZ2VPdmVybGF5JiwgUGFnZSopCit7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpk
cmF3UmVjdChQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgLypkaXJ0eVJlY3QqLykKK3sKKyAgICBtX3BhZ2UtPmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwor
fQorCitib29sIFdlYkluc3BlY3RvckNsaWVudDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4yN2MzZWUxNDJlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEludFJlY3Q7CitjbGFz
cyBQYWdlT3ZlcmxheTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7
CitjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7CisKK2NsYXNzIFdlYkluc3BlY3Rv
ckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIHByaXZhdGUgV2ViQ29y
ZTo6UGFnZU92ZXJsYXk6OkNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citm
cmllbmQgY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OworcHVibGljOgorICAgIFdl
Ykluc3BlY3RvckNsaWVudChXZWJQYWdlKik7CisgICAgdmlydHVhbCB+V2ViSW5zcGVjdG9yQ2xp
ZW50KCk7CisKK3ByaXZhdGU6CisgICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50CisgICAg
dm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVu
ZENvdW50Q2hhbmdlZCh1bnNpZ25lZCkgb3ZlcnJpZGU7CisKKyAgICBJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCogb3BlbkxvY2FsRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
ciopIG92ZXJyaWRlOworICAgIHZvaWQgYnJpbmdGcm9udGVuZFRvRnJvbnQoKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZFJlc2l6ZU1haW5GcmFtZShXZWJDb3JlOjpGcmFtZSopIG92ZXJyaWRlOwor
CisgICAgdm9pZCBoaWdobGlnaHQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQo
KSBvdmVycmlkZTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgdm9pZCBzaG93SW5z
cGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOworICAgIHZvaWQgaGlkZUluc3BlY3RvckluZGlj
YXRpb24oKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShib29s
KSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCBlbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sKSBv
dmVycmlkZTsKKworICAgIGJvb2wgb3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBzaG93UGFpbnRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmlj
ZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pIGZpbmFsOworCisgICAgLy8gUGFnZU92
ZXJsYXk6OkNsaWVudAorICAgIHZvaWQgd2lsbE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpQYWdlKikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRNb3ZlVG9QYWdlKFdl
YkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOworICAgIHZvaWQg
ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBtb3VzZUV2ZW50
KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOworCisgICAgV2ViUGFnZSogbV9wYWdlOworICAgIFdlYkNv
cmU6OlBhZ2VPdmVybGF5KiBtX2hpZ2hsaWdodE92ZXJsYXk7CisgICAgCisgICAgUmVmUHRyPFdl
YkNvcmU6OlBhZ2VPdmVybGF5PiBtX3BhaW50UmVjdE92ZXJsYXk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4gbV9wYWludEluZGljYXRvckxheWVyQ2xp
ZW50OworICAgIEhhc2hTZXQ8UmVmPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+PiBtX3BhaW50UmVj
dExheWVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5jMTg5ZTk4MjVhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNw
cApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaCIKKworI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRTdGF0
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyOjpXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYgcGFnZSkK
KyAgICA6IG1fcGFnZShwYWdlKQoreworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlcjo6cmVzZXQoKQoreworICAgIG1fZnJvbnRlbmRMb2FkZWQgPSBmYWxzZTsKKyAg
ICBtX3N1c3BlbmRlZCA9IGZhbHNlOworICAgIG1fcXVldWUuY2xlYXIoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAg
ICBtX2Zyb250ZW5kTG9hZGVkID0gdHJ1ZTsKKworICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lv
bnMoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OnN1c3Bl
bmQoKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kTG9hZGVkKTsKKyAgICBBU1NFUlQoIW1fc3Vz
cGVuZGVkKTsKKyAgICBBU1NFUlQobV9xdWV1ZS5pc0VtcHR5KCkpOworCisgICAgbV9zdXNwZW5k
ZWQgPSB0cnVlOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6
dW5zdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQobV9zdXNwZW5kZWQpOworCisgICAgbV9zdXNwZW5k
ZWQgPSBmYWxzZTsKKworICAgIGV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmQpCit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtl
U3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCJd
KSIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3Bh
dGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQp
Cit7CisgICAgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JG
cm9udGVuZEFQSS5kaXNwYXRjaChbXCIiLCBjb21tYW5kLCAiXCIsIFwiIiwgYXJndW1lbnQsICJc
Il0pIikpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBhcmd1bWVudCkKK3sKKyAg
ICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5k
QVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIiwgIiwgYXJndW1lbnQgPyAidHJ1ZSIgOiAi
ZmFsc2UiLCAiXSkiKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRj
aGVyOjpkaXNwYXRjaE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
ZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihtYWtlU3RyaW5nKCJJbnNwZWN0b3JGcm9udGVuZEFQ
SS5kaXNwYXRjaE1lc3NhZ2VBc3luYygiLCBtZXNzYWdlLCAiKSIpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24o
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQoreworICAgIGlmICghbV9mcm9udGVuZExvYWRlZCB8
fCBtX3N1c3BlbmRlZCkgeworICAgICAgICBtX3F1ZXVlLmFwcGVuZChleHByZXNzaW9uKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuaXNQYXVz
ZWQoKSk7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmV4ZWN1
dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihleHByZXNzaW9uKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmV2YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKQor
eworICAgIGlmIChtX3F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24gOiBtX3F1ZXVlKSB7CisgICAgICAgIEFTU0VSVCgh
bV9wYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNjcmlwdCgpLmlzUGF1c2VkKCkpOworICAg
ICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlw
dElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Npb24pOworICAgIH0KKworICAgIG1fcXVldWUuY2xl
YXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9u
dGVuZEFQSURpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZjVjNDI0ZTJkODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRB
UElEaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIoV2ViUGFnZSYpOworCisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgZnJvbnRlbmRM
b2FkZWQoKTsKKworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgdW5zdXNwZW5kKCk7CisK
KyAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpOworICAgIHZv
aWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBh
cmd1bWVudCk7CisgICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
LCBib29sIGFyZ3VtZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBldmFsdWF0ZU9yUXVldWVFeHBy
ZXNzaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9u
cygpOworCisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIERlcXVlPFN0cmluZz4gbV9xdWV1ZTsK
KyAgICBib29sIG1fZnJvbnRlbmRMb2FkZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdXNwZW5k
ZWQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uYzAxNzg1MWY2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3Bw
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oIgorCisjaW5jbHVkZSAiV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVk0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbW1vblZNLmg+CisjaW5jbHVkZSA8
d3RmL1dvcmtRdWV1ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPFdlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXI+IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6OmNy
ZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlcik7Cit9CisKK1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6OldlYklu
c3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKQorICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNy
ZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIikp
Cit7Cit9CisKK1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6On5XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyKCkKK3sKK30KKwordm9pZCBXZWJJbnNwZWN0b3JJbnRlcnJ1cHRE
aXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rp
b24pCit7CisgICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOworfQorCit2b2lkIFdlYkluc3BlY3RvckludGVycnVw
dERpc3BhdGNoZXI6Om5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCkKK3sKKyAgICAvLyBJZiB0aGUg
d2ViIHByb2Nlc3MgaGFzIG5vdCBiZWVuIGZ1bGx5IGluaXRpYWxpemVkIHlldCwgdGhlbiB0aGVy
ZQorICAgIC8vIGlzIG5vIFZNIHRvIGJlIG5vdGlmaWVkIGFuZCB0aHVzIG5vIGluZmluaXRlIGxv
b3AgdG8gYnJlYWsuIEJhaWwgb3V0LgorICAgIGlmICghV2ViQ29yZTo6Y29tbW9uVk1Pck51bGwo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDOjpWTSYgdm0gPSBXZWJDb3JlOjpjb21tb25W
TSgpOworICAgIHZtLm5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDhmNmJkMDIwYTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIDogcHVibGljIElQQzo6Q29u
bmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IGNyZWF0ZSgpOworICAgIH5XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qKTsKKyAgICAKK3ByaXZhdGU6CisgICAgV2ViSW5z
cGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpOworICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6V29y
a1F1ZXVlTWVzc2FnZVJlY2VpdmVyLgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBub3Rp
ZnlOZWVkRGVidWdnZXJCcmVhaygpOworICAgIAorICAgIFJlZjxXb3JrUXVldWU+IG1fcXVldWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uOTg3MGU1MmI3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIu
bWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
IHsKKyAgICBOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZmFhNmY2ZWRlNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3Bw
CkBAIC0wLDAgKzEsNDExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
V2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBl
cldvcmxkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitSZWY8V2ViSW5zcGVjdG9yVUk+IFdlYkluc3BlY3RvclVJOjpj
cmVhdGUoV2ViUGFnZSYgcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJJbnNw
ZWN0b3JVSShwYWdlKSk7Cit9CisKK1dlYkluc3BlY3RvclVJOjpXZWJJbnNwZWN0b3JVSShXZWJQ
YWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2Zyb250ZW5kQVBJRGlzcGF0
Y2hlcihwYWdlKQorICAgICwgbV9kZWJ1Z2dhYmxlSW5mbyhEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVt
cHR5KCkpCit7CisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5z
ZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHRydWUpOworICAgIFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SW1hZ2VCaXRtYXBFbmFibGVkKHRydWUpOworI2lm
IEVOQUJMRShXRUJHTDIpCisgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRXZWJHTDJFbmFibGVkKHRydWUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUk6OmVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0
ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiBkZWJ1Z2dhYmxlSW5m
bywgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyID0gaW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7CisgICAgbV9k
ZWJ1Z2dhYmxlSW5mbyA9IGRlYnVnZ2FibGVJbmZvOworICAgIG1fdW5kZXJUZXN0ID0gdW5kZXJU
ZXN0OworICAgIG1faW5zcGVjdGlvbkxldmVsID0gaW5zcGVjdGlvbkxldmVsOworCisgICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIucmVzZXQoKTsKKworICAgIG1fZnJvbnRlbmRDb250cm9sbGVy
ID0gJm1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgbV9mcm9u
dGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KHRoaXMpOworCisgICAg
dXBkYXRlQ29ubmVjdGlvbigpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjp1cGRhdGVDb25u
ZWN0aW9uKCkKK3sKKyAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2Jh
Y2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rp
b24gPSBudWxscHRyOworICAgIH0KKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAg
IElQQzo6Q29ubmVjdGlvbjo6U29ja2V0UGFpciBzb2NrZXRQYWlyID0gSVBDOjpDb25uZWN0aW9u
OjpjcmVhdGVQbGF0Zm9ybUNvbm5lY3Rpb24oKTsKKyAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoc29ja2V0UGFpci5zZXJ2ZXIpOworICAgIElQQzo6
QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChzb2NrZXRQYWlyLmNsaWVudCk7CisjZWxp
ZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbGlzdGVuaW5nUG9ydCA9IE1BQ0hfUE9SVF9O
VUxMOworICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9Q
T1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAg
ICAgIENSQVNIKCk7CisKKyAgICBpZiAobWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tf
c2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01BS0Vf
U0VORCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICBDUkFTSCgpOworCisgICAgSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGxpc3RlbmluZ1BvcnQpOwor
ICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChsaXN0ZW5pbmdQb3J0LCBN
QUNIX01TR19UWVBFX01PVkVfU0VORCk7CisjZWxpZiBQTEFURk9STShXSU4pCisgICAgSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25uQ2xpZW50Owor
ICAgIElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoY29u
bmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGllbnQpOworICAgIElQQzo6QXR0YWNobWVudCBjb25u
ZWN0aW9uQ2xpZW50UG9ydChjb25uQ2xpZW50KTsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm47CisjZW5kaWYKKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKSB8
fCBPUyhEQVJXSU4pIHx8IFBMQVRGT1JNKFdJTikKKyAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0g
SVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlm
aWVyLCAqdGhpcyk7CisgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+b3BlbigpOworI2VuZGlmCisK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNv
bm5lY3Rpb25DbGllbnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUk6OndpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIGlmIChtX2Zy
b250ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsK
KworICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUodGhp
cywgbV9wYWdlLmNvcmVQYWdlKCkpOworICAgIG1fZnJvbnRlbmRIb3N0LT5hZGRTZWxmVG9HbG9i
YWxPYmplY3RJbldvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLmZyb250ZW5kTG9hZGVkKCk7CisKKyAgICAvLyBUZWxsIHRoZSBuZXcgZnJvbnRlbmQgYWJv
dXQgdGhlIGN1cnJlbnQgZG9jayBzdGF0ZS4gSWYgdGhlIHdpbmRvdyBvYmplY3QKKyAgICAvLyBj
bGVhcmVkIGR1ZSB0byBhIHJlbG9hZCwgdGhlIGRvY2sgc3RhdGUgd29uJ3QgYmUgcmVzZW50IGZy
b20gVUlQcm9jZXNzLgorICAgIHNldERvY2tpbmdVbmF2YWlsYWJsZShtX2RvY2tpbmdVbmF2YWls
YWJsZSk7CisgICAgc2V0RG9ja1NpZGUobV9kb2NrU2lkZSk7CisgICAgc2V0SXNWaXNpYmxlKG1f
aXNWaXNpYmxlKTsKKworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpGcm9udGVuZExv
YWRlZCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKworICAgIGJyaW5nVG9Gcm9udCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRvd0RyYWcoKQoreworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTdGFydFdpbmRvd0RyYWcoKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29y
ZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkp
OworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVj
dCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKKworICAgIGlmIChtX2JhY2tlbmRDb25uZWN0aW9uKSB7CisgICAgICAg
IG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9iYWNrZW5kQ29u
bmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fZnJvbnRlbmRDb250cm9sbGVy
KSB7CisgICAgICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudChudWxscHRyKTsKKyAgICAgICAgbV9mcm9udGVuZENvbnRyb2xsZXIgPSBudWxscHRyOwor
ICAgIH0KKworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3Qt
PmRpc2Nvbm5lY3RDbGllbnQoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIgPSB7
IH07CisgICAgbV91bmRlclRlc3QgPSBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6
cmVvcGVuKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpyZXNl
dFN0YXRlKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKworV2ViQ29yZTo6VXNlckludGVyZmFj
ZUxheW91dERpcmVjdGlvbiBXZWJJbnNwZWN0b3JVSTo6dXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT51c2VySW50ZXJm
YWNlTGF5b3V0RGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlcXVlc3RT
ZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQoreworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKTsKKyAgICBzd2l0Y2ggKHNpZGUpIHsKKyAgICBjYXNlIERvY2tT
aWRlOjpVbmRvY2tlZDoKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGV0YWNoKCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvY2tTaWRlOjpS
aWdodDoKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoUmlnaHQoKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6
CisgICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaExlZnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKKyAg
ICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6
OnNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCit7CisgICAgQVNDSUlMaXRlcmFsIHNpZGVTdHJp
bmcgeyBBU0NJSUxpdGVyYWw6Om51bGwoKSB9OworCisgICAgc3dpdGNoIChzaWRlKSB7CisgICAg
Y2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6CisgICAgICAgIHNpZGVTdHJpbmcgPSAidW5kb2NrZWQi
X3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6CisgICAgICAg
IHNpZGVTdHJpbmcgPSAicmlnaHQiX3M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBEb2Nr
U2lkZTo6TGVmdDoKKyAgICAgICAgc2lkZVN0cmluZyA9ICJsZWZ0Il9zOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKKyAgICAgICAgc2lkZVN0cmluZyA9ICJi
b3R0b20iX3M7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fZG9ja1NpZGUgPSBzaWRl
OworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2Nr
U2lkZSJfcywgU3RyaW5nKHNpZGVTdHJpbmcpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6
c2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wgdW5hdmFpbGFibGUpCit7CisgICAgbV9kb2NraW5n
VW5hdmFpbGFibGUgPSB1bmF2YWlsYWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB1bmF2YWlsYWJsZSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldElzVmlzaWJsZShib29sIHZpc2libGUpCit7
CisgICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOworCisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHZpc2libGUpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQor
eworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd1dpZHRo
KHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChyZWN0KSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihj
b25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgeworICAg
ICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6Ok9w
ZW5Jbk5ld1RhYih1cmwpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7
CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFdURjo6U3RyaW5n
JiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2Rl
ZCwgYm9vbCBmb3JjZVNhdmVBcykKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6YXBwZW5k
KGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29u
dGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmlu
ZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
OjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8p
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNob3dDZXJ0aWZpY2F0ZShjZXJ0
aWZpY2F0ZUluZm8pLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9vbCBXZWJJbnNwZWN0b3JVSTo6c3VwcG9ydHNEaWFn
bm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5n
cygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
Ojpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCit7CisgICAg
bV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3Rp
Y01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwgIldlYiBJbnNwZWN0b3IgRnJv
bnRlbmQgRGlhZ25vc3RpY3MiX3MsIGRpY3Rpb25hcnksIFNob3VsZFNhbXBsZTo6Tm8pOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJOjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29s
IGF2YWlsYWJsZSkKK3sKKyAgICAvLyBJbnNwZWN0b3IncyBkaWFnbm9zdGljIGxvZ2dpbmcgY2xp
ZW50IHNob3VsZCBuZXZlciBiZSB1c2VkIHVubGVzcyB0aGUgcGFnZSBzZXR0aW5nIGlzIGFsc28g
ZW5hYmxlZC4KKyAgICBBU1NFUlQoIWF2YWlsYWJsZSB8fCBzdXBwb3J0c0RpYWdub3N0aWNMb2dn
aW5nKCkpOworICAgIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUgPSBhdmFpbGFibGU7CisK
KyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERpYWdub3N0
aWNMb2dnaW5nQXZhaWxhYmxlIl9zLCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKTsKK30K
KyNlbmRpZgorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q29uc29sZSgpCit7CisgICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93Q29uc29sZSJfcyk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dSZXNvdXJjZXMoKQoreworICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd1Jlc291cmNlcyJfcyk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJp
bmcmIGZyYW1lSWRlbnRpZmllcikKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNw
YXRjaENvbW1hbmQoInNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSJfcywgZnJhbWVJZGVudGlmaWVy
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKK3sKKyAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5lUHJv
ZmlsaW5nRW5hYmxlZCJfcywgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0b3BQ
YWdlUHJvZmlsaW5nKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywgZmFsc2UpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclVJOjpzdGFydEVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVuYWJs
ZWQiX3MsIHRydWUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdG9wRWxlbWVudFNlbGVj
dGlvbigpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJz
ZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJfcywgZmFsc2UpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIG1fZnJvbnRlbmRBUElE
aXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVy
bCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VQ
YXVzZWQoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnN1c3BlbmQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVVucGF1c2VkKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJ
RGlzcGF0Y2hlci51bnN1c3BlbmQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2VuZE1l
c3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0UGxh
dGZvcm1OYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQ
bGF0Zm9ybU5hbWU7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0QnVpbGRWZXJz
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRCdWlsZFZl
cnNpb247Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0UHJvZHVjdFZlcnNpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFByb2R1Y3RWZXJz
aW9uOworfQorCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6
OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvclVJLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
clVJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYzOWYyMWM5YjYy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JVSS5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJEZWJ1Z2dhYmxl
SW5mb0RhdGEuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kSG9z
dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwor
Y2xhc3MgQ2VydGlmaWNhdGVJbmZvOworY2xhc3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yVUkgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJJbnNwZWN0b3JVST4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpD
bGllbnQsIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKKworICAg
IC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZl
ci5jcHAKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKKyAg
ICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlIHsgLyogRG8gbm90aGlu
ZywgdGhlIGluc3BlY3RlZCBwYWdlIHByb2Nlc3MgbWF5IGhhdmUgY3Jhc2hlZCBhbmQgbWF5IGJl
IGdldHRpbmcgcmVwbGFjZWQuICovIH0KKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UpIG92ZXJyaWRlIHsgY2xvc2VXaW5kb3coKTsgfQorCisgICAgLy8gQ2FsbGVkIGJ5IFdl
Ykluc3BlY3RvclVJIG1lc3NhZ2VzCisgICAgdm9pZCBlc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBh
Z2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2Fi
bGVJbmZvRGF0YSYsIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOwor
ICAgIHZvaWQgdXBkYXRlQ29ubmVjdGlvbigpOworCisgICAgdm9pZCBzaG93Q29uc29sZSgpOwor
ICAgIHZvaWQgc2hvd1Jlc291cmNlcygpOworCisgICAgdm9pZCBzaG93TWFpblJlc291cmNlRm9y
RnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpOworCisgICAgdm9pZCBzdGFydFBh
Z2VQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7CisKKyAgICB2b2lk
IHN0YXJ0RWxlbWVudFNlbGVjdGlvbigpOworICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24o
KTsKKworICAgIHZvaWQgYXR0YWNoZWRCb3R0b20oKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpC
b3R0b20pOyB9CisgICAgdm9pZCBhdHRhY2hlZFJpZ2h0KCkgeyBzZXREb2NrU2lkZShEb2NrU2lk
ZTo6UmlnaHQpOyB9CisgICAgdm9pZCBhdHRhY2hlZExlZnQoKSB7IHNldERvY2tTaWRlKERvY2tT
aWRlOjpMZWZ0KTsgfQorICAgIHZvaWQgZGV0YWNoZWQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRl
OjpVbmRvY2tlZCk7IH0KKworICAgIHZvaWQgc2V0RG9ja1NpZGUoRG9ja1NpZGUpOworICAgIHZv
aWQgc2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wpOworCisgICAgdm9pZCBzZXRJc1Zpc2libGUo
Ym9vbCk7CisKKyAgICB2b2lkIGRpZFNhdmUoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQg
ZGlkQXBwZW5kKGNvbnN0IFN0cmluZyYgdXJsKTsKKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGNvbnN0IFN0cmluZyYpOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkp
CisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWxpYWJsZSk7
CisjZW5kaWYKKworICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50CisgICAg
dm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udGVuZExv
YWRlZCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsK
KyAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKKworICAg
IGJvb2wgaXNSZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIFN0cmlu
ZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGJhY2tl
bmRDb21tYW5kc1VSTCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgSW5z
cGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBkZWJ1Z2dhYmxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7IH0KKyAgICBTdHJpbmcgdGFy
Z2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHRhcmdldEJ1aWxk
VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lv
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faW5zcGVjdGlvbkxldmVsOyB9CisKKyAgICB2b2lkIGJy
aW5nVG9Gcm9udCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xvc2VXaW5kb3coKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlb3BlbigpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpIG92ZXJy
aWRlOworCisgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlcXVl
c3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjaGFuZ2VBdHRhY2hl
ZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2hhbmdlU2hlZXRS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBvcGVu
SW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5TYXZl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZlKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNvbnN0
IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
QXMpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiB1cmwsIGNv
bnN0IFdURjo6U3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKKworICAgIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNob3dDZXJ0aWZp
Y2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKSBvdmVycmlkZTsKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9n
Z2luZygpIG92ZXJyaWRlOworICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBv
dmVycmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9CisgICAgdm9p
ZCBsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgV1RGOjpTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3Qg
V2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSYpIG92ZXJy
aWRlOworI2VuZGlmCisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOworCisgICAgdm9pZCBwYWdlUGF1c2VkKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwYWdlVW5wYXVzZWQoKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBvdmVy
cmlkZSB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdl
Ykluc3BlY3RvclVJKFdlYlBhZ2UmKTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBXZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIgbV9mcm9udGVuZEFQSURpc3BhdGNoZXI7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7
CisgICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9iYWNrZW5kQ29ubmVjdGlvbjsKKworICAg
IC8vIEtlZXAgYSBwb2ludGVyIHRvIHRoZSBmcm9udGVuZCdzIGluc3BlY3RvciBjb250cm9sbGVy
IHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2gKKyAgICAvLyBjb3JlUGFnZSgpLCBzaW5jZSB3ZSBt
YXkgbmVlZCBpdCBhZnRlciB0aGUgZnJvbnRlbmQncyBwYWdlIGhhcyBzdGFydGVkIGRlc3RydWN0
aW9uLgorICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIG1fZnJvbnRlbmRDb250cm9s
bGVyIHsgbnVsbHB0ciB9OworCisgICAgV2ViUGFnZVByb3h5SWRlbnRpZmllciBtX2luc3BlY3Rl
ZFBhZ2VJZGVudGlmaWVyOworICAgIGJvb2wgbV91bmRlclRlc3QgeyBmYWxzZSB9OworICAgIERl
YnVnZ2FibGVJbmZvRGF0YSBtX2RlYnVnZ2FibGVJbmZvOworICAgIGJvb2wgbV9kb2NraW5nVW5h
dmFpbGFibGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OworI2lm
IEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2lu
Z0F2YWlsYWJsZSB7IGZhbHNlIH07CisjZW5kaWYKKworICAgIERvY2tTaWRlIG1fZG9ja1NpZGUg
eyBEb2NrU2lkZTo6VW5kb2NrZWQgfTsKKyAgICB1bnNpZ25lZCBtX2luc3BlY3Rpb25MZXZlbCB7
IDEgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0ZjEzODVkNDg5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJ
IHsKKyAgICBFc3RhYmxpc2hDb25uZWN0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmll
ciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgc3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9E
YXRhIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxl
dmVsKQorICAgIFVwZGF0ZUNvbm5lY3Rpb24oKQorCisgICAgQXR0YWNoZWRCb3R0b20oKQorICAg
IEF0dGFjaGVkUmlnaHQoKQorICAgIEF0dGFjaGVkTGVmdCgpCisgICAgRGV0YWNoZWQoKQorICAg
IFNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVuYXZhaWxhYmxlKQorICAgIFNldElzVmlzaWJs
ZShib29sIHZpc2libGUpCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBT
ZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisg
ICAgU2hvd0NvbnNvbGUoKQorICAgIFNob3dSZXNvdXJjZXMoKQorCisgICAgU2hvd01haW5SZXNv
dXJjZUZvckZyYW1lKFN0cmluZyBmcmFtZUlkZW50aWZpZXIpCisKKyAgICBTdGFydFBhZ2VQcm9m
aWxpbmcoKQorICAgIFN0b3BQYWdlUHJvZmlsaW5nKCkKKworICAgIFN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpCisgICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQorCisgICAgRGlkU2F2ZShTdHJpbmcg
dXJsKQorICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE3MGY2ZmQ1MjA5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0LmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2UmIHBhZ2UpCisgICAg
OiBtX3BhZ2UocGFnZSkKK3sKK30KKworU3RyaW5nIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6Omlk
ZW50aWZpZXIoKSBjb25zdAoreworICAgIHJldHVybiB0b1RhcmdldElEKG1fcGFnZS5pZGVudGlm
aWVyKCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OmNvbm5lY3QoSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKQorewor
ICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NoYW5uZWwgPSBtYWtl
VW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+KG1fcGFnZSwgaWRl
bnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7CisgICAgaWYgKG1fcGFnZS5jb3JlUGFnZSgpKQor
ICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RG
cm9udGVuZCgqbV9jaGFubmVsKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpk
aXNjb25uZWN0KCkKK3sKKyAgICBpZiAoIW1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKKyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7CisgICAgbV9j
aGFubmVsLnJlc2V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6c2VuZE1l
c3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICht
X3BhZ2UuY29yZVBhZ2UoKSkKKyAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Cit9CisKK1N0
cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygicGFnZS0iLCBwYWdlSUQu
dG9VSW50NjQoKSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42Y2JkN2ZhZDVm
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsOworCitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
KTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBhZ2Um
KTsKKyAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldCgpID0gZGVmYXVsdDsKKworICAgIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlOjpQYWdlOyB9CisKKyAgICBTdHJpbmcgaWRlbnRp
ZmllcigpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNjb25uZWN0
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKKworICAgIHN0YXRpYyBTdHJpbmcgdG9UYXJnZXRJRChXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZSYgbV9wYWdlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPiBt
X2NoYW5uZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmY5MDE3YzRlZGFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAK
QEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiV2Vi
UGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAs
IG1fcGFnZVRhcmdldChwYWdlKQoreworICAgIC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRhcmdl
dCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2ViUGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlzIGZv
ciB1cy4KKyAgICBtX3RhcmdldHMuc2V0KG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZtX3Bh
Z2VUYXJnZXQpOworfQorCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBXZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0
JiB0YXJnZXQpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdldC5p
ZGVudGlmaWVyKCksICZ0YXJnZXQpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0LnR5
cGUoKSkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1v
dmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVudGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0LmlkZW50
aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1vdmUgdGhlIG1haW4gdGFyZ2V0LiIpOworCisgICAg
bV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRhcmdl
dCh0YXJnZXQuaWRlbnRpZmllcigpKSk7CisKKyAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdldC5p
ZGVudGlmaWVyKCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
Ojpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBhdXRv
IHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAg
ICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOworfQor
Cit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVj
dG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCit7CisgICAgYXV0byB0YXJnZXQgPSBtX3Rhcmdl
dHMuZ2V0KHRhcmdldElkKTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFy
Z2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFy
Z2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisK
KyAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2UpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xs
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2M5MzFkYWQxYzkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3MgSW5zcGVjdG9yVGFyZ2V0OworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmKTsK
KyAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgYWRk
VGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Jik7CisgICAgdm9pZCByZW1vdmVUYXJn
ZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKKworICAgIHZvaWQgY29ubmVjdEluc3Bl
Y3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUpOworICAgIHZvaWQgZGlzY29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJp
bmcmIHRhcmdldElkKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZhdGU6Cisg
ICAgV2ViUGFnZSYgbV9wYWdlOworICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgbV9wYWdlVGFy
Z2V0OworICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCo+IG1f
dGFyZ2V0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmUxYjVmNzEzNzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwu
aCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdl
cy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbDo6V2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdl
JiBwYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5l
bDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAg
ICAsIG1fdGFyZ2V0SWQodGFyZ2V0SWQpCisgICAgLCBtX2Nvbm5lY3Rpb25UeXBlKGNvbm5lY3Rp
b25UeXBlKQoreworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWw6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
bV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VuZE1lc3NhZ2VUb0luc3BlY3Rv
ckZyb250ZW5kKG1fdGFyZ2V0SWQsIG1lc3NhZ2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MTg0YWM1YmRhMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQ
YWdlOworCitjbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFs
IDogcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0RnJvbnRlbmRDaGFubmVsKTsKK3B1YmxpYzoKKyAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0
b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOworICAgIHZpcnR1YWwgfldlYlBh
Z2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6
CisgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb25UeXBlOyB9CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsK
KyAgICBTdHJpbmcgbV90YXJnZXRJZDsKKyAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsOjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dl
Ykluc3BlY3RvclVJR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
Z3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMmI0Zjk3ZmU4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgorI2luY2x1ZGUgIlJlbW90ZVdlYkluc3Bl
Y3RvclVJLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQoreworICAgIHJldHVybiB0cnVlOwor
fQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAor
eworICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL0xv
Y2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyIpOworfQorCitTdHJpbmcg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworICAg
IHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9yL0xvY2FsaXph
dGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
bWFjL1dlYkluc3BlY3RvclVJTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjllNTVmM2Q1OGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
ZWJJbnNwZWN0b3JVSS5oIgorI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2lm
IFBMQVRGT1JNKE1BQykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViSW5zcGVjdG9y
VUk6OmNhblNhdmUoKQoreworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgU3RyaW5nIHdl
Ykluc3BlY3RvclVJTG9jYWxpemVkU3RyaW5nc1VSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRs
ZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0
b3JVSSJdOworICAgIGlmICghYnVuZGxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBOU1N0cmluZyAqcGF0aCA9IFtidW5kbGUgcGF0aEZvclJlc291cmNlOkAibG9jYWxpemVkU3Ry
aW5ncyIgb2ZUeXBlOkAianMiXTsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICAKKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGly
ZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmluZzsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjps
b2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlM
b2NhbGl6ZWRTdHJpbmdzVVJMKCk7Cit9CisKK1N0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
bG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHdlYkluc3BlY3RvclVJ
TG9jYWxpemVkU3RyaW5nc1VSTCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclVJV2luLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDk0MTFmZGIxOTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVdp
bi5jcHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgIlJlbW90ZVdlYklu
c3BlY3RvclVJLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVXaW4uaD4KKyNp
bmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2Fs
aXplZFN0cmluZ3NVUkwoKSBjb25zdAoreworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IHN0cmluZ3NVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdl
YkNvcmU6OndlYktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5ncyIpLCBDRlNUUigi
anMiKSwgQ0ZTVFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJp
bmcoc3RyaW5nc1VSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYK
K30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkg
Y29uc3QKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBzdHJpbmdzVVJM
UmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5k
bGUoKSwgQ0ZTVFIoImxvY2FsaXplZFN0cmluZ3MiKSwgQ0ZTVFIoImpzIiksIENGU1RSKCJXZWJJ
bnNwZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKHN0cmluZ3NVUkxSZWYu
Z2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMGIwNjgwMTllZjguLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yQ2xpZW50LmgiCi0KLSNpbmNsdWRl
ICJEcmF3aW5nQXJlYS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JPdmVybGF5Lmg+Ci0jZW5k
aWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY2xh
c3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50IGZpbmFsIDogcHVibGljIEdyYXBoaWNzTGF5
ZXJDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFJl
cGFpbnRJbmRpY2F0b3JMYXllckNsaWVudChXZWJJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNs
aWVudCkKLSAgICAgICAgOiBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCi0gICAg
ewotICAgIH0KLSAgICB2aXJ0dWFsIH5SZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQoKSB7IH0K
LXByaXZhdGU6Ci0gICAgdm9pZCBub3RpZnlBbmltYXRpb25FbmRlZChjb25zdCBHcmFwaGljc0xh
eWVyKiBsYXllciwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1faW5z
cGVjdG9yQ2xpZW50LmFuaW1hdGlvbkVuZGVkRm9yTGF5ZXIobGF5ZXIpOwotICAgIH0KLSAgICAK
LSAgICBXZWJJbnNwZWN0b3JDbGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OwotfTsKLQotV2ViSW5z
cGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViUGFnZSogcGFnZSkKLSAgICA6IG1f
cGFnZShwYWdlKQotICAgICwgbV9oaWdobGlnaHRPdmVybGF5KG51bGxwdHIpCi17Ci19Ci0KLVdl
Ykluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCi17Ci0gICAgZm9yIChhdXRv
JiBsYXllciA6IG1fcGFpbnRSZWN0TGF5ZXJzKQotICAgICAgICBsYXllci0+cmVtb3ZlRnJvbVBh
cmVudCgpOwotICAgIAotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBpZiAo
bV9wYWludFJlY3RPdmVybGF5ICYmIG1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdl
LT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3Zlcmxh
eSgqbV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCi17Ci0g
ICAgaWYgKFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gbV9wYWdlLT5pbnNwZWN0b3IoV2ViUGFn
ZTo6TGF6eUNyZWF0aW9uUG9saWN5OjpVc2VFeGlzdGluZ09ubHkpKQotICAgICAgICBpbnNwZWN0
b3ItPmNsb3NlKCk7Ci0KLSAgICBkZWxldGUgdGhpczsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkIGNvdW50KQotewotICAgIG1fcGFn
ZS0+aW5zcGVjdG9yRnJvbnRlbmRDb3VudENoYW5nZWQoY291bnQpOwotfQotCi1JbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbCogV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuTG9jYWxGcm9udGVuZChJ
bnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQotewotICAgIG1fcGFnZS0+aW5zcGVjdG9y
KCktPm9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGNvbnRyb2xsZXItPmlzVW5kZXJUZXN0KCkp
OwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpi
cmluZ0Zyb250ZW5kVG9Gcm9udCgpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0g
ICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6ZGlkUmVzaXplTWFpbkZyYW1lKEZyYW1lKikKLXsKLSAgICBpZiAo
bV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+dXBkYXRl
RG9ja2luZ0F2YWlsYWJpbGl0eSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGln
aGxpZ2h0KCkKLXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIW1faGlnaGxpZ2h0T3ZlcmxheSkgewotICAgICAg
ICBhdXRvIGhpZ2hsaWdodE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzKTsKLSAg
ICAgICAgbV9oaWdobGlnaHRPdmVybGF5ID0gaGlnaGxpZ2h0T3ZlcmxheS5wdHIoKTsKLSAgICAg
ICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFn
ZU92ZXJsYXkoV1RGTW92ZShoaWdobGlnaHRPdmVybGF5KSwgUGFnZU92ZXJsYXk6OkZhZGVNb2Rl
OjpGYWRlKTsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnN0b3BGYWRlT3V0QW5p
bWF0aW9uKCk7Ci0gICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7
Ci0gICAgfQotI2Vsc2UKLSAgICBIaWdobGlnaHQgaGlnaGxpZ2h0OwotICAgIG1fcGFnZS0+Y29y
ZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmdldEhpZ2hsaWdodChoaWdobGlnaHQsIElu
c3BlY3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW06OkRvY3VtZW50KTsKLSAgICBtX3BhZ2Ut
PnNob3dJbnNwZWN0b3JIaWdobGlnaHQoaGlnaGxpZ2h0KTsKLSNlbmRpZgotfQotCi12b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCi17Ci0jaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgaWYgKG1faGlnaGxpZ2h0T3ZlcmxheSkKLSAgICAgICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS51bmluc3RhbGxQYWdlT3ZlcmxheSgqbV9o
aWdobGlnaHRPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOwotI2Vsc2UKLSAg
ICBtX3BhZ2UtPmhpZGVJbnNwZWN0b3JIaWdobGlnaHQoKTsKLSNlbmRpZgotfQotCi12b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BhaW50UmVj
dE92ZXJsYXkpIHsKLSAgICAgICAgbV9wYWludFJlY3RPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNy
ZWF0ZSgqdGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0gICAgICAg
IG1fcGFnZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VP
dmVybGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RG9Ob3RG
YWRlKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCkKLSAg
ICAgICAgbV9wYWludEluZGljYXRvckxheWVyQ2xpZW50ID0gbWFrZVVuaXF1ZTxSZXBhaW50SW5k
aWNhdG9yTGF5ZXJDbGllbnQ+KCp0aGlzKTsKLQotICAgIGF1dG8gcGFpbnRMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZShtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCksICptX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpOwotICAgIAotICAgIHBhaW50TGF5
ZXItPnNldE5hbWUoInBhaW50IHJlY3QiKTsKLSAgICBwYWludExheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50M0QoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0UG9zaXRpb24ocmVjdC5sb2Nh
dGlvbigpKTsKLSAgICBwYWludExheWVyLT5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKLSAgICBwYWlu
dExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC4yZikp
OwotCi0gICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmFkZUtleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5
T3BhY2l0eSk7Ci0gICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1h
dGlvblZhbHVlPigwLCAxKSk7Ci0KLSAgICBmYWRlS2V5ZnJhbWVzLmluc2VydChtYWtlVW5pcXVl
PEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAuMjUsIDApKTsKLSAgICAKLSAgICBhdXRvIG9wYWNpdHlB
bmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAgIG9wYWNpdHlBbmltYXRpb24tPnNl
dER1cmF0aW9uKDAuMjUpOwotCi0gICAgcGFpbnRMYXllci0+YWRkQW5pbWF0aW9uKGZhZGVLZXlm
cmFtZXMsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5QW5pbWF0aW9uLnB0cigpLCAib3BhY2l0eSJfcywg
MCk7Ci0gICAgCi0gICAgR3JhcGhpY3NMYXllciYgcmF3TGF5ZXIgPSBwYWludExheWVyLmdldCgp
OwotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLmFkZChXVEZNb3ZlKHBhaW50TGF5ZXIpKTsKLQotICAg
IEdyYXBoaWNzTGF5ZXImIG92ZXJsYXlSb290TGF5ZXIgPSBtX3BhaW50UmVjdE92ZXJsYXktPmxh
eWVyKCk7Ci0gICAgb3ZlcmxheVJvb3RMYXllci5hZGRDaGlsZChyYXdMYXllcik7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphbmltYXRpb25FbmRlZEZvckxheWVyKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIG5vbkNvbnN0TGF5ZXIgPSBj
b25zdF9jYXN0PEdyYXBoaWNzTGF5ZXIqPihsYXllcik7Ci0gICAgbm9uQ29uc3RMYXllci0+cmVt
b3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFpbnRSZWN0TGF5ZXJzLnJlbW92ZSgqbm9uQ29uc3RM
YXllcik7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OnNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkKLXsKLSAgICBtX3BhZ2UtPnNob3dJbnNw
ZWN0b3JJbmRpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSW5z
cGVjdG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9wYWdlLT5oaWRlSW5zcGVjdG9ySW5kaWNhdGlv
bigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkU2V0U2VhcmNoaW5nRm9yTm9k
ZShib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIG1fcGFnZS0+ZW5h
YmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYWdlLT5kaXNh
YmxlSW5zcGVjdG9yTm9kZVNlYXJjaCgpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAo
bV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+ZWxlbWVu
dFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAobV9wYWdl
LT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+dGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGFjdGl2ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRN
b2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkK
LXsKLSAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKLSAgICAgICAgbV9wYWdlLT5pbnNwZWN0
b3IoKS0+c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKGVuYWJsZWQpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lsbE1vdmVUb1BhZ2UoUGFnZU92ZXJsYXkmLCBQ
YWdlKiBwYWdlKQotewotICAgIGlmIChwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBU
aGUgcGFnZSBvdmVybGF5IGlzIG1vdmluZyBhd2F5IGZyb20gdGhlIHdlYiBwYWdlLCByZXNldCBp
dC4KLSAgICBBU1NFUlQobV9oaWdobGlnaHRPdmVybGF5KTsKLSAgICBtX2hpZ2hsaWdodE92ZXJs
YXkgPSBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGlkTW92ZVRvUGFn
ZShQYWdlT3ZlcmxheSYsIFBhZ2UqKQotewotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIC8qZGlydHlSZWN0Ki8pCi17Ci0gICAgbV9wYWdlLT5j
b3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0KTsK
LX0KLQotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6Om1vdXNlRXZlbnQoUGFnZU92ZXJsYXkmLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI3YzNlZTE0MmUxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZU92ZXJsYXkuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwot
Y2xhc3MgSW50UmVjdDsKLWNsYXNzIFBhZ2VPdmVybGF5OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsK
LQotY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNs
aWVudCwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLWZyaWVuZCBjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGll
bnQ7Ci1wdWJsaWM6Ci0gICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqKTsKLSAgICB2aXJ0
dWFsIH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnQKLSAgICB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZyb250ZW5kQ291bnRDaGFuZ2VkKHVuc2lnbmVkKSBvdmVycmlkZTsKLQot
ICAgIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBvcGVuTG9jYWxGcm9udGVuZChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBicmluZ0Zyb250ZW5k
VG9Gcm9udCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkUmVzaXplTWFpbkZyYW1lKFdlYkNvcmU6
OkZyYW1lKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGhpZ2hsaWdodCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgaGlkZUhpZ2hsaWdodCgpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICB2b2lkIHNob3dJbnNwZWN0b3JJbmRpY2F0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBoaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRTZXRT
ZWFyY2hpbmdGb3JOb2RlKGJvb2wpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIGVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgdGltZWxpbmVSZWNv
cmRpbmdDaGFuZ2VkKGJvb2wpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBvdmVycmlkZXNTaG93UGFp
bnRSZWN0cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHNob3dQ
YWludFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPikgZmlu
YWw7Ci0KLSAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50Ci0gICAgdm9pZCB3aWxsTW92ZVRvUGFn
ZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpZE1vdmVUb1BhZ2UoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpQYWdlKikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsK
LSAgICBib29sIG1vdXNlRXZlbnQoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBjb25zdCBXZWJDb3Jl
OjpQbGF0Zm9ybU1vdXNlRXZlbnQmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYW5pbWF0aW9uRW5k
ZWRGb3JMYXllcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0KLSAgICBXZWJQYWdl
KiBtX3BhZ2U7Ci0gICAgV2ViQ29yZTo6UGFnZU92ZXJsYXkqIG1faGlnaGxpZ2h0T3ZlcmxheTsK
LSAgICAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UGFnZU92ZXJsYXk+IG1fcGFpbnRSZWN0T3Zlcmxh
eTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50PiBtX3Bh
aW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ7Ci0gICAgSGFzaFNldDxSZWY8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4+IG1fcGFpbnRSZWN0TGF5ZXJzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJ
bnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVX
ZWJJbnNwZWN0b3JVSS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1OGQ4ZjBj
MjQ2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNw
ZWN0b3JVSS5oIgotCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3Js
ZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotCi0j
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLSNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPFJlbW90ZVdlYkluc3BlY3Rv
clVJPiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1S
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkK
LSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkK
LXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5pdGlhbGl6ZShEZWJ1Z2dhYmxl
SW5mb0RhdGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNV
UkwpCi17Ci0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwot
ICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOwotCi0gICAgbV9w
YWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCh0aGlzKTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Ci0g
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5h
dmFpbGFibGUiX3MsIHRydWUpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRT
YXZlKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRp
c3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Ci19
Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2Fn
ZSksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAg
ICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5k
SG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFn
ZSgpKTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZCht
YWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVu
ZExvYWRlZCgpOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJzZXRJc1Zpc2libGUiX3MsIHRydWUpOwotCi0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0
UmVjdChyZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJv
bWUoKS53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdl
LmNvcmVQYWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKLX0KLQotV2Vi
Q29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFn
ZS5jb3JlUGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Ci19Ci0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigp
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQotewotICAg
IG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQobnVsbHB0cik7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigp
KTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0
cmluZyYgdXJsKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpPcGVu
SW5OZXdUYWIodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi17Ci0gICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJh
c2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIC8vIERvIG5vdGhpbmcuIFRoZSByZW1vdGUgc2lk
ZSBjYW4ga25vdyBpZiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2VkLgotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBj
ZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OlNob3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsK
LX0KLQotSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGVi
dWdnYWJsZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLmRlYnVn
Z2FibGVUeXBlOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRm
b3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxh
dGZvcm1OYW1lOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxk
VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVp
bGRWZXJzaW9uOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1
Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQ
cm9kdWN0VmVyc2lvbjsKLX0KLQotYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0SXNT
aW11bGF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldElz
U2ltdWxhdG9yOwotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi1ib29sIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkKLXsKLSAgICBy
ZXR1cm4gbV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFi
bGVkKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVu
dChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50
OjpWYWx1ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCi17Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCkt
PmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVE
aWN0aW9uYXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdu
b3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFp
bGFibGUpCi17Ci0gICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBz
aG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJs
ZWQuCi0gICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygp
KTsKLSAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotCi0gICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Ci19Ci0jZW5k
aWYKLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShX
SU4pCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBj
b25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRG
T1JNKFdJTikKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhZTFjMWRhYTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiRGVidWdnYWJsZUluZm9EYXRhLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRpZmljYXRlSW5mbzsKLWNsYXNzIEZsb2F0UmVj
dDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFJl
bW90ZVdlYkluc3BlY3RvclVJIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8UmVtb3RlV2ViSW5z
cGVjdG9yVUk+LCBwdWJsaWMgSVBDOjpNZXNzYWdlUmVjZWl2ZXIsIHB1YmxpYyBXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVX
ZWJJbnNwZWN0b3JVST4gY3JlYXRlKFdlYlBhZ2UmKTsKLQotICAgIC8vIEltcGxlbWVudGVkIGlu
IGdlbmVyYXRlZCBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAKLSAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOwotCi0gICAgLy8gQ2FsbGVkIGJ5IFJlbW90ZVdlYkluc3BlY3RvclVJIG1lc3NhZ2Vz
Ci0gICAgdm9pZCBpbml0aWFsaXplKERlYnVnZ2FibGVJbmZvRGF0YSYmLCBjb25zdCBTdHJpbmcm
IGJhY2tlbmRDb21tYW5kc1VSTCk7Ci0gICAgdm9pZCBkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJs
KTsKLSAgICB2b2lkIGRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wp
OwotI2VuZGlmCi0KLSAgICAvLyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudAotICAg
IHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJvbnRlbmRM
b2FkZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNoYW5nZVNoZWV0UmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJy
aWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOwot
Ci0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBT
dHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFN0cmluZyBi
YWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5k
c1VSTDsgfQotICAgIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIFN0cmluZyB0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgdGFyZ2V0SXNTaW11bGF0b3IoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFdlYkNvcmU6OlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBicmluZ1RvRnJvbnQoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsb3NlV2luZG93KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW9wZW4oKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgb3BlbkluTmV3
VGFiKGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2b2lkIHNhdmUoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29s
IGZvcmNlU2F2ZUFzKSBvdmVycmlkZTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb250ZW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGluc3BlY3RlZFVS
TENoYW5nZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93Q2VydGlmaWNh
dGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2lu
ZygpIG92ZXJyaWRlOwotICAgIGJvb2wgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKSBvdmVy
cmlkZSB7IHJldHVybiBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlOyB9Ci0gICAgdm9pZCBs
b2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFdlYkNvcmU6
OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmKSBvdmVycmlkZTsKLSNl
bmRpZgotCi0gICAgYm9vbCBjYW5TYXZlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IGJvb2wgaXNVbmRlclRlc3QoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHVuc2ln
bmVkIGluc3BlY3Rpb25MZXZlbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDE7IH0KLSAgICB2
b2lkIHJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBj
aGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9p
ZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKSBvdmVycmlkZSB7IH0KLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdGVXZWJJbnNwZWN0b3JVSShXZWJQYWdlJik7Ci0KLSAg
ICBXZWJQYWdlJiBtX3BhZ2U7Ci0gICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVy
IG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OwotICAgIERlYnVnZ2FibGVJbmZvRGF0YSBtX2Rl
YnVnZ2FibGVJbmZvOwotICAgIFN0cmluZyBtX2JhY2tlbmRDb21tYW5kc1VSTDsKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIGJvb2wgbV9kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5z
cGVjdG9yVUkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmJmN2U0Yzg3OGQuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsMzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgot
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFJlbW90ZVdlYkluc3BlY3RvclVJIHsKLSAgICBJbml0aWFs
aXplKHN0cnVjdCBXZWJLaXQ6OkRlYnVnZ2FibGVJbmZvRGF0YSBkZWJ1Z2dhYmxlSW5mbywgU3Ry
aW5nIGJhY2tlbmRDb21tYW5kc1VSTCkKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZ
KQotICAgIFNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQotI2Vu
ZGlmCi0KLSAgICBEaWRTYXZlKFN0cmluZyB1cmwpCi0gICAgRGlkQXBwZW5kKFN0cmluZyB1cmwp
Ci0KLSAgICBTZW5kTWVzc2FnZVRvRnJvbnRlbmQoU3RyaW5nIG1lc3NhZ2UpCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyMjVkMTNkZDMuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgotCi0jaW5jbHVkZSAiV2ViRnJh
bWUuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYklu
c3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1
ZXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0
aW9uQWN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KLQotc3RhdGljIGNvbnN0IGZs
b2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhp
bXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11
bUF0dGFjaGVkV2lkdGggPSA1MDA7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0b3I+IFdlYkluc3BlY3Rvcjo6Y3JlYXRlKFdl
YlBhZ2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yKHBh
Z2UpKTsKLX0KLQotV2ViSW5zcGVjdG9yOjpXZWJJbnNwZWN0b3IoV2ViUGFnZSogcGFnZSkKLSAg
ICA6IG1fcGFnZShwYWdlKQotewotfQotCi1XZWJJbnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQot
ewotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAgICAgbV9mcm9udGVuZENvbm5l
Y3Rpb24tPmludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbElu
c3BlY3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwg
dW5kZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
cjo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlv
bklkZW50aWZpZXIpCi17Ci0gICAgLy8gV2UgbWlnaHQgcmVjZWl2ZSBtdWx0aXBsZSB1cGRhdGVz
IGlmIHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBwZWQgaW50byBhIFdlYlBhZ2VQcm94eQotICAg
IC8vIHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGVzdGFibGlzaGVkIHRoZSBjb25uZWN0
aW9uLgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2Zyb250ZW5k
Q29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9
IG51bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBD
OjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25u
ZWN0aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKSk7Ci0jZWxpZiBPUyhEQVJX
SU4pCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
KGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOwotI2VsaWYgT1MoV0lORE9XUykK
LSAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5j
b2RlZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpKTsKLSNlbHNlCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIGlmICghSVBDOjpDb25uZWN0aW9u
OjppZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVD
bGllbnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7Ci0gICAgbV9mcm9u
dGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKLQotICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Zy
b250ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgbV9mcm9u
dGVuZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpj
bG9zZUZyb250ZW5kQ29ubmVjdGlvbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLQotICAgIC8vIElmIHdlIHRy
aWVkIHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZvcmUgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gbm8g
Y29ubmVjdGlvbiBleGlzdHMgeWV0LgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewot
ICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9mcm9udGVuZENvbm5l
Y3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci0KLSAgICBtX2F0dGFjaGVkID0gZmFsc2U7Ci0gICAgbV9w
cmV2aW91c0NhbkF0dGFjaCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdU
b0Zyb250KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250
KCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OndoZW5G
cm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2sp
Ci17Ci0gICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlv
bnMuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotLy8gQ2FsbGVkIGJ5IFdlYkluc3Bl
Y3RvciBtZXNzYWdlcwotdm9pZCBXZWJJbnNwZWN0b3I6OnNob3coKQotewotICAgIGlmICghbV9w
YWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
OjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIENsb3NlIGNvdWxkIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcg
dGVhcmRvd24uCi0gICAgaWYgKCFtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3I6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBVc2VyR2Vz
dHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfTsKLQotICAg
IFBhZ2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFpbnNw
ZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSYgaW5zcGVjdGVkTWFpbkZy
YW1lID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBpbnNwZWN0
ZWRNYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0
IHsgdXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3
YXJkTGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRV
Ukw6OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxV
UkxzUG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24g
fTsKLQotICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uIHsgKmluc3BlY3RlZE1haW5GcmFtZS5k
b2N1bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBmcmFtZUxvYWRS
ZXF1ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCksIE5hdmlnYXRpb25UeXBlOjpMaW5rQ2xpY2tl
ZCB9OwotICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNwZWN0ZWRQYWdlLT5jaHJvbWUoKS5jcmVhdGVX
aW5kb3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LCB7IH0sIGFjdGlvbik7
Ci0gICAgaWYgKCFuZXdQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdQYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwotfQotCi12
b2lkIFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2Ny
aXB0KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZv
clRlc3RJbkZyb250ZW5kKHNjcmlwdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93Q29u
c29sZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsK
LQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dD
b25zb2xlKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291
cmNlcygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsK
LQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dS
ZXNvdXJjZXMoKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFp
blJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmll
cikKLXsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJG
cmFtZShmcmFtZUlkZW50aWZpZXIpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICBT
dHJpbmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFnZW50KCkuZnJhbWVJZChmcmFtZS0+Y29yZUZy
YW1lKCkpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0g
ICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGluc3BlY3RvckZyYW1lSWRlbnRpZmllciksIDAp
OwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3RhcnRQYWdlUHJvZmlsaW5nKCkK
LXsKLSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAg
d2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRl
bmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RhcnRQYWdlUHJv
ZmlsaW5nKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3RvcFBhZ2VQ
cm9maWxpbmcoKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93
KCk7Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAg
ICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpT
dG9wUGFnZVByb2ZpbGluZygpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6
OnN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hl
ZChbPV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCAwKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1f
cGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hlbkZyb250ZW5kQ29u
bmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdl
ZChib29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVu
dFNlbGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12
b2lkIFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpUaW1lbGluZVJlY29yZGluZ0NoYW5n
ZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
cjo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVu
YWJsZWQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldE1vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwot
fQotCi1ib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIW1f
cGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3Qg
YWxsb3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5zcGVjdG9yIC0tIHR3byBpbnNwZWN0b3JzIGlu
IG9uZSB3aW5kb3cgaXMgdG9vIG11Y2ghCi0gICAgaWYgKG1fcGFnZS0+aXNJbnNwZWN0b3JQYWdl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0
dGFjaGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4gdG8gYWxsb3cgc3dpdGNoaW5nIHNpZGVzLgot
ICAgIGlmIChtX2F0dGFjaGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERvbid0
IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNj
b21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIHNpemUuCi0gICAgdW5zaWduZWQgaW5zcGVj
dGVkUGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52
aXNpYmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZVdpZHRoID0gbV9wYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVXaWR0aCgpOwotICAgIHVu
c2lnbmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhp
bXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0
IDw9IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBpbnNw
ZWN0ZWRQYWdlV2lkdGg7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZh
aWxhYmlsaXR5KCkKLXsKLSAgICBpZiAobV9hdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlzLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICBp
ZiAobV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5BdHRhY2hXaW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7Ci0KLSAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5B
dHRhY2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiODllNTIyNzcuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
V2ViUGFnZTsKLQotY2xhc3MgV2ViSW5zcGVjdG9yIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlSW5zcGVjdG9yPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rp
b246OkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3I+IGNyZWF0
ZShXZWJQYWdlKik7Ci0KLSAgICBXZWJQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
OyB9Ci0KLSAgICB2b2lkIHVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHkoKTsKLQotICAgIC8vIElt
cGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJJbnNwZWN0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCi0g
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKLQotICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50Ci0gICAgdm9pZCBk
aWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KLSAgICB2b2lk
IGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpIG92ZXJyaWRlIHsgY2xvc2UoKTsgfQotCi0g
ICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBvcGVuSW5OZXdU
YWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwotCi0gICAgdm9pZCBjYW5BdHRhY2hXaW5kb3co
Ym9vbCYgcmVzdWx0KTsKLQotICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKLSAgICB2b2lkIHNob3dS
ZXNvdXJjZXMoKTsKLQotICAgIHZvaWQgc2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllcik7Ci0KLSAgICB2b2lkIHNldEF0dGFjaGVkKGJvb2wgYXR0YWNoZWQp
IHsgbV9hdHRhY2hlZCA9IGF0dGFjaGVkOyB9Ci0KLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0Rm9y
VGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCk7Ci0KLSAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGlu
ZygpOwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKLQotICAgIHZvaWQgc3RhcnRFbGVt
ZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOwotICAgIHZv
aWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCB0aW1lbGluZVJlY29y
ZGluZ0NoYW5nZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
T3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4pOwotCi0gICAgdm9pZCBzZXRGcm9udGVuZENvbm5lY3Rp
b24oSVBDOjpBdHRhY2htZW50KTsKLQotICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBj
bG9zZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkluc3BlY3RvckNsaWVu
dDsKLQotICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvcihXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+
V2ViSW5zcGVjdG9yKCk7Ci0KLSAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpOwotCi0gICAgLy8g
Q2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yQ2xpZW50Ci0gICAgdm9pZCBvcGVuTG9jYWxJbnNwZWN0
b3JGcm9udGVuZChib29sIHVuZGVyVGVzdCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kQ29ubmVj
dGlvbigpOwotCi0gICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKLQotICAgIHZvaWQgd2hlbkZyb250
ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKEZ1bmN0aW9uPHZvaWQoKT4mJik7Ci0KLSAgICBXZWJQ
YWdlKiBtX3BhZ2U7Ci0KLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2Zyb250ZW5kQ29u
bmVjdGlvbjsKLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV9mcm9udGVuZENvbm5lY3Rp
b25BY3Rpb25zOwotCi0gICAgYm9vbCBtX2F0dGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
cHJldmlvdXNDYW5BdHRhY2ggeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZjc0YjVl
NmIwLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0j
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+
IFdlYkluc3BlY3RvciB7Ci0gICAgU2hvdygpCi0gICAgQ2xvc2UoKQotCi0gICAgU2V0QXR0YWNo
ZWQoYm9vbCBhdHRhY2hlZCkKLQotICAgIFNob3dDb25zb2xlKCkKLSAgICBTaG93UmVzb3VyY2Vz
KCkKLQotICAgIFNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJZGVudGlmaWVyKQotCi0gICAgT3BlbkluTmV3VGFiKFN0cmluZyB1cmwpCi0KLSAg
ICBTdGFydFBhZ2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdlUHJvZmlsaW5nKCkKLQotICAgIFN0
YXJ0RWxlbWVudFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQotCi0gICAg
U2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmll
cikKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTg5ZTk4MjVhZC4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpyZXNldCgpCi17Ci0gICAgbV9mcm9u
dGVuZExvYWRlZCA9IGZhbHNlOwotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgbV9xdWV1
ZS5jbGVhcigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6
ZnJvbnRlbmRMb2FkZWQoKQotewotICAgIG1fZnJvbnRlbmRMb2FkZWQgPSB0cnVlOwotCi0gICAg
ZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCi17Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmRMb2Fk
ZWQpOwotICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwotICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1w
dHkoKSk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQotewotICAgIEFTU0VSVChtX3N1c3Bl
bmRlZCk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgZXZhbHVhdGVRdWV1ZWRF
eHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCkKLXsKLSAgICBldmFsdWF0
ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3Bh
dGNoKFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9u
KG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQs
ICJcIiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
LCBib29sIGFyZ3VtZW50KQotewotICAgIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24obWFrZVN0
cmluZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wiIiwgY29tbWFuZCwgIlwiLCAi
LCBhcmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJp
bmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVzc2FnZUFzeW5jKCIsIG1lc3NhZ2Us
ICIpIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZh
bHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCi17Ci0gICAg
aWYgKCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7Ci0gICAgICAgIG1fcXVldWUu
YXBwZW5kKGV4cHJlc3Npb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KG1fcXVldWUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcGFnZS5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Np
b24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVh
dGVRdWV1ZWRFeHByZXNzaW9ucygpCi17Ci0gICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiA6IG1fcXVl
dWUpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2Ny
aXB0KCkuaXNQYXVzZWQoKSk7Ci0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS5zY3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNlcHRpb24oZXhwcmVzc2lvbik7Ci0g
ICAgfQotCi0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY1YzQyNGUyZDg3Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3Mg
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBXZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOwotCi0gICAgdm9pZCByZXNldCgp
OwotICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKLQotICAgIHZvaWQgc3VzcGVuZCgpOwotICAg
IHZvaWQgdW5zdXNwZW5kKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmQpOwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7Ci0gICAgdm9pZCBkaXNwYXRjaENvbW1hbmQo
Y29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsKLSAgICB2b2lkIGRpc3BhdGNo
TWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLXByaXZhdGU6Ci0gICAgdm9p
ZCBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZXZh
bHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIERl
cXVlPFN0cmluZz4gbV9xdWV1ZTsKLSAgICBib29sIG1fZnJvbnRlbmRMb2FkZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjMDE3ODUxZjY4Ny4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIu
aCIKLQotI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db21t
b25WTS5oPgotI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVJlZjxXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyPiBXZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdl
Ykluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIpOwotfQotCi1XZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCkKLSAgICA6IG1f
cXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlciIpKQotewotfQotCi1XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyOjp+V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCi17Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpD
b25uZWN0aW9uKiBjb25uZWN0aW9uKQotewotICAgIGNvbm5lY3Rpb24tPmFkZFdvcmtRdWV1ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0aGlzKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpub3RpZnlOZWVkRGVidWdnZXJCcmVhaygp
Ci17Ci0gICAgLy8gSWYgdGhlIHdlYiBwcm9jZXNzIGhhcyBub3QgYmVlbiBmdWxseSBpbml0aWFs
aXplZCB5ZXQsIHRoZW4gdGhlcmUKLSAgICAvLyBpcyBubyBWTSB0byBiZSBub3RpZmllZCBhbmQg
dGh1cyBubyBpbmZpbml0ZSBsb29wIHRvIGJyZWFrLiBCYWlsIG91dC4KLSAgICBpZiAoIVdlYkNv
cmU6OmNvbW1vblZNT3JOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTQzo6Vk0mIHZt
ID0gV2ViQ29yZTo6Y29tbW9uVk0oKTsKLSAgICB2bS5ub3RpZnlOZWVkRGVidWdnZXJCcmVhaygp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhmNmJkMDIwYTIuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
ckludGVycnVwdERpc3BhdGNoZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIg
OiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4gY3Jl
YXRlKCk7Ci0gICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKTsKLSAgICAKLSAg
ICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiopOwotICAgIAotcHJp
dmF0ZToKLSAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7Ci0gICAgLy8gSVBD
OjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKLSAg
ICAKLSAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7Ci0gICAgCi0gICAgUmVmPFdv
cmtRdWV1ZT4gbV9xdWV1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk4NzBlNTJiNzNiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgot
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JJbnRl
cnJ1cHREaXNwYXRjaGVyIHsKLSAgICBOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYWE2ZjZlZGU1Li4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCi0KLSNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5o
IgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0RPTVdyYXBwZXJXb3JsZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPFdlYkluc3BlY3RvclVJPiBXZWJJ
bnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViSW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1XZWJJbnNwZWN0b3JVSTo6V2ViSW5z
cGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9u
dGVuZEFQSURpc3BhdGNoZXIocGFnZSkKLSAgICAsIG1fZGVidWdnYWJsZUluZm8oRGVidWdnYWJs
ZUluZm9EYXRhOjplbXB0eSgpKQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuc2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCh0cnVlKTsKLSAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEltYWdlQml0bWFwRW5hYmxl
ZCh0cnVlKTsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViR0wyRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotfQotCi12
b2lkIFdlYkluc3BlY3RvclVJOjplc3RhYmxpc2hDb25uZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50
aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNvbnN0IERlYnVnZ2FibGVJbmZvRGF0YSYg
ZGVidWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwp
Ci17Ci0gICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllciA9IGluc3BlY3RlZFBhZ2VJZGVudGlm
aWVyOwotICAgIG1fZGVidWdnYWJsZUluZm8gPSBkZWJ1Z2dhYmxlSW5mbzsKLSAgICBtX3VuZGVy
VGVzdCA9IHVuZGVyVGVzdDsKLSAgICBtX2luc3BlY3Rpb25MZXZlbCA9IGluc3BlY3Rpb25MZXZl
bDsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Ci0KLSAgICBtX2Zyb250
ZW5kQ29udHJvbGxlciA9ICZtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
OwotICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCh0
aGlzKTsKLQotICAgIHVwZGF0ZUNvbm5lY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JV
STo6dXBkYXRlQ29ubmVjdGlvbigpCi17Ci0gICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsK
LSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Jh
Y2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSNpZiBVU0UoVU5JWF9ET01BSU5f
U09DS0VUUykKLSAgICBJUEM6OkNvbm5lY3Rpb246OlNvY2tldFBhaXIgc29ja2V0UGFpciA9IElQ
Qzo6Q29ubmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25uZWN0aW9uKCk7Ci0gICAgSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKHNvY2tldFBhaXIuc2VydmVy
KTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQoc29ja2V0UGFpci5j
bGllbnQpOwotI2VsaWYgT1MoREFSV0lOKQotICAgIG1hY2hfcG9ydF90IGxpc3RlbmluZ1BvcnQg
PSBNQUNIX1BPUlRfTlVMTDsKLSAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19z
ZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmbGlzdGVuaW5nUG9ydCkgIT0gS0VSTl9T
VUNDRVNTKQotICAgICAgICBDUkFTSCgpOwotCi0gICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmln
aHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9N
U0dfVFlQRV9NQUtFX1NFTkQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgQ1JBU0goKTsKLQot
ICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihsaXN0
ZW5pbmdQb3J0KTsKLSAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQobGlz
dGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkQpOwotI2VsaWYgUExBVEZPUk0oV0lO
KQotICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllciwg
Y29ubkNsaWVudDsKLSAgICBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckFuZENsaWVudElk
ZW50aWZpZXJzKGNvbm5lY3Rpb25JZGVudGlmaWVyLCBjb25uQ2xpZW50KTsKLSAgICBJUEM6OkF0
dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQoY29ubkNsaWVudCk7Ci0jZWxzZQotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSNpZiBVU0UoVU5JWF9ET01B
SU5fU09DS0VUUykgfHwgT1MoREFSV0lOKSB8fCBQTEFURk9STShXSU4pCi0gICAgbV9iYWNrZW5k
Q29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25u
ZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOwotICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPm9wZW4o
KTsKLSNlbmRpZgotCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEZyb250ZW5k
Q29ubmVjdGlvbihjb25uZWN0aW9uQ2xpZW50UG9ydCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsK
LSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25u
ZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9z
dDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsKLSAgICBtX2Zyb250ZW5kSG9zdC0+
YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250
ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgpOwotCi0gICAgLy8gVGVsbCB0aGUgbmV3
IGZyb250ZW5kIGFib3V0IHRoZSBjdXJyZW50IGRvY2sgc3RhdGUuIElmIHRoZSB3aW5kb3cgb2Jq
ZWN0Ci0gICAgLy8gY2xlYXJlZCBkdWUgdG8gYSByZWxvYWQsIHRoZSBkb2NrIHN0YXRlIHdvbid0
IGJlIHJlc2VudCBmcm9tIFVJUHJvY2Vzcy4KLSAgICBzZXREb2NraW5nVW5hdmFpbGFibGUobV9k
b2NraW5nVW5hdmFpbGFibGUpOwotICAgIHNldERvY2tTaWRlKG1fZG9ja1NpZGUpOwotICAgIHNl
dElzVmlzaWJsZShtX2lzVmlzaWJsZSk7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0KLSAgICBi
cmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFn
KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U3RhcnRXaW5kb3dEcmFnKCks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpt
b3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBGbG9hdFJlY3QgZnJhbWVSZWN0
ID0gbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLndpbmRvd1JlY3QoKTsKLSAgICBmcmFtZVJl
Y3QubW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkuc2V0V2luZG93
UmVjdChmcmFtZVJlY3QpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQo
KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmNsb3Nl
V2luZG93KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0KLSAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlv
bikgewotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAg
IG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2Zyb250
ZW5kQ29udHJvbGxlcikgewotICAgICAgICBtX2Zyb250ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7Ci0gICAgICAgIG1fZnJvbnRlbmRDb250cm9sbGVy
ID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1f
ZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyID0geyB9OwotICAgIG1fdW5kZXJUZXN0ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnJlb3BlbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OlJlb3BlbigpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OlJlc2V0U3RhdGUoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLVdlYkNvcmU6
OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZh
Y2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2Uo
KS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKLXsKLSAgICBhdXRvJiB3ZWJQ
cm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7Ci0gICAgc3dpdGNoIChzaWRlKSB7Ci0g
ICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRldGFj
aCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEb2NrU2lkZTo6UmlnaHQ6Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERv
Y2tTaWRlOjpMZWZ0OgotICAgICAgICB3ZWJQcm9jZXNzLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hMZWZ0KCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvY2tTaWRl
OjpCb3R0b206Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEJvdHRvbSgpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFdl
Ykluc3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQotewotICAgIEFTQ0lJTGl0
ZXJhbCBzaWRlU3RyaW5nIHsgQVNDSUlMaXRlcmFsOjpudWxsKCkgfTsKLQotICAgIHN3aXRjaCAo
c2lkZSkgewotICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2VkOgotICAgICAgICBzaWRlU3RyaW5n
ID0gInVuZG9ja2VkIl9zOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRG9ja1NpZGU6OlJp
Z2h0OgotICAgICAgICBzaWRlU3RyaW5nID0gInJpZ2h0Il9zOwotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6Ci0gICAgICAgIHNpZGVTdHJpbmcgPSAibGVmdCJfczsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvY2tTaWRlOjpCb3R0b206Ci0gICAgICAgIHNp
ZGVTdHJpbmcgPSAiYm90dG9tIl9zOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2Rv
Y2tTaWRlID0gc2lkZTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29t
bWFuZCgic2V0RG9ja1NpZGUiX3MsIFN0cmluZyhzaWRlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVuYXZhaWxhYmxlKQotewot
ICAgIG1fZG9ja2luZ1VuYXZhaWxhYmxlID0gdW5hdmFpbGFibGU7Ci0KLSAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldERvY2tpbmdVbmF2YWlsYWJsZSJfcywg
dW5hdmFpbGFibGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXRJc1Zpc2libGUoYm9v
bCB2aXNpYmxlKQotewotICAgIG1faXNWaXNpYmxlID0gdmlzaWJsZTsKLQotICAgIG1fZnJvbnRl
bmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9zLCB2aXNpYmxl
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgaGVpZ2h0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNp
Z25lZCB3aWR0aCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpv
cGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKG1fYmFja2VuZENvbm5l
Y3Rpb24pIHsKLSAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpPcGVuSW5OZXdUYWIodXJsKSwgMCk7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpCcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCksIG1faW5zcGVjdGVkUGFn
ZUlkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2F2ZShjb25z
dCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50LCBib29s
IGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQsIGZvcmNl
U2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yVUk6OmFwcGVuZChjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3Ry
aW5nJiBjb250ZW50KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBcHBlbmQo
ZmlsZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGVkVVJMQ2hh
bmdlZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTaG93Q2Vy
dGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKLWJvb2wgV2ViSW5zcGVjdG9yVUk6
OnN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKQotewotICAgIHJldHVybiBtX3BhZ2UuY29yZVBh
Z2UoKS0+c2V0dGluZ3MoKS5kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JVSTo6bG9nRGlhZ25vc3RpY0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1l
LCBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9u
YXJ5KQotewotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgp
LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5hbWUsICJXZWIg
SW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1w
bGU6Ok5vKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdB
dmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi17Ci0gICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3Rp
YyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0
dGluZyBpcyBhbHNvIGVuYWJsZWQuCi0gICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNE
aWFnbm9zdGljTG9nZ2luZygpKTsKLSAgICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0g
YXZhaWxhYmxlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5k
KCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd0NvbnNvbGUo
KQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd0Nv
bnNvbGUiX3MpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzaG93UmVzb3VyY2VzKCkKLXsK
LSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dSZXNvdXJj
ZXMiX3MpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzaG93TWFpblJlc291cmNlRm9yRnJh
bWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIpCi17Ci0gICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93TWFpblJlc291cmNlRm9yRnJhbWUiX3MsIGZy
YW1lSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnN0YXJ0UGFnZVByb2Zp
bGluZygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJz
ZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3MsIHRydWUpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclVJOjpzdG9wUGFnZVByb2ZpbGluZygpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNo
ZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3MsIGZhbHNl
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRFbGVtZW50U2VsZWN0aW9uKCkKLXsK
LSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldEVsZW1lbnRT
ZWxlY3Rpb25FbmFibGVkIl9zLCB0cnVlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3Rv
cEVsZW1lbnRTZWxlY3Rpb24oKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3Bh
dGNoQ29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVuYWJsZWQiX3MsIGZhbHNlKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBt
X2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNhdmVkVVJMIl9zLCB1cmwp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwp
Ci17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRl
ZFRvVVJMIl9zLCB1cmwpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRv
RnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclVJOjpwYWdlUGF1c2VkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5zdXNw
ZW5kKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnBhZ2VVbnBhdXNlZCgpCi17Ci0gICAg
bV9mcm9udGVuZEFQSURpc3BhdGNoZXIudW5zdXNwZW5kKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2Fn
ZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9y
VUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJs
ZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRh
cmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8u
dGFyZ2V0QnVpbGRWZXJzaW9uOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBy
b2R1Y3RWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJn
ZXRQcm9kdWN0VmVyc2lvbjsKLX0KLQotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pCi1ib29sIFdlYkluc3BlY3RvclVJOjpjYW5TYXZlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIFdl
Ykluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotI2VuZGlmIC8vICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yVUkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3RvclVJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOWYyMWM5YjYy
Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUg
IkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEluc3BlY3RvckNv
bnRyb2xsZXI7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJJbnNwZWN0
b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkluc3BlY3RvclVJPiwgcHJpdmF0ZSBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFn
ZSYpOwotCi0gICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3RvclVJTWVz
c2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246
OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyAv
KiBEbyBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBhZ2UgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVk
IGFuZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4gKi8gfQotICAgIHZvaWQgZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZVdpbmRvdygpOyB9Ci0KLSAgICAvLyBD
YWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKLSAgICB2b2lkIGVzdGFibGlzaENvbm5l
Y3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29u
c3QgRGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rp
b25MZXZlbCk7Ci0gICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uKCk7Ci0KLSAgICB2b2lkIHNob3dD
b25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0KLSAgICB2b2lkIHNob3dNYWlu
UmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcik7Ci0KLSAgICB2
b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsK
LQotICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9wRWxlbWVu
dFNlbGVjdGlvbigpOwotCi0gICAgdm9pZCBhdHRhY2hlZEJvdHRvbSgpIHsgc2V0RG9ja1NpZGUo
RG9ja1NpZGU6OkJvdHRvbSk7IH0KLSAgICB2b2lkIGF0dGFjaGVkUmlnaHQoKSB7IHNldERvY2tT
aWRlKERvY2tTaWRlOjpSaWdodCk7IH0KLSAgICB2b2lkIGF0dGFjaGVkTGVmdCgpIHsgc2V0RG9j
a1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9Ci0gICAgdm9pZCBkZXRhY2hlZCgpIHsgc2V0RG9ja1Np
ZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsgfQotCi0gICAgdm9pZCBzZXREb2NrU2lkZShEb2NrU2lk
ZSk7Ci0gICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCk7Ci0KLSAgICB2b2lkIHNl
dElzVmlzaWJsZShib29sKTsKLQotICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7
Ci0gICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOwotCi0gICAgdm9pZCBzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wg
YXZhbGlhYmxlKTsKLSNlbmRpZgotCi0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQKLSAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygp
IG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJy
aWRlOwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBT
dHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsgfQotICAg
IFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcg
dGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldFBy
b2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRv
cigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdW5zaWduZWQgaW5zcGVjdGlv
bkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbnNwZWN0aW9uTGV2ZWw7IH0KLQot
ICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZVdpbmRvdygp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldFN0
YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZTsKLSAgICB2b2lkIGNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2b2lkIGNo
YW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBj
aGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7Ci0KLSAgICBi
b29sIGNhblNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNhdmUoY29uc3QgV1RGOjpTdHJpbmcm
IHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9v
bCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV1RGOjpTdHJp
bmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRl
OwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgYm9vbCBzdXBwb3J0c0Rp
YWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7
IH0KLSAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBXVEY6OlN0cmluZyYgZXZlbnRO
YW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9u
YXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQo
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBhZ2VQYXVzZWQoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1VuZGVy
VGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9Ci0KLXByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYgbV9wYWdl
OwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zy
b250ZW5kSG9zdDsKLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2JhY2tlbmRDb25uZWN0
aW9uOwotCi0gICAgLy8gS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGZyb250ZW5kJ3MgaW5zcGVjdG9y
IGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaAotICAgIC8vIGNvcmVQYWdlKCks
IHNpbmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRoZSBmcm9udGVuZCdzIHBhZ2UgaGFzIHN0YXJ0
ZWQgZGVzdHJ1Y3Rpb24uCi0gICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogbV9mcm9u
dGVuZENvbnRyb2xsZXIgeyBudWxscHRyIH07Ci0KLSAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVy
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7Ci0gICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNl
IH07Ci0gICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87Ci0gICAgYm9vbCBt
X2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZh
bHNlIH07Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgYm9vbCBtX2RpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0gICAgRG9ja1NpZGUg
bV9kb2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tlZCB9OwotICAgIHVuc2lnbmVkIG1faW5zcGVj
dGlvbkxldmVsIHsgMSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1l
c3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGYxMzg1ZDQ4OS4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yVUkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jIENvcHly
aWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0j
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLW1lc3NhZ2VzIC0+IFdlYklu
c3BlY3RvclVJIHsKLSAgICBFc3RhYmxpc2hDb25uZWN0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5
SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgc3RydWN0IFdlYktpdDo6RGVidWdn
YWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5z
cGVjdGlvbkxldmVsKQotICAgIFVwZGF0ZUNvbm5lY3Rpb24oKQotCi0gICAgQXR0YWNoZWRCb3R0
b20oKQotICAgIEF0dGFjaGVkUmlnaHQoKQotICAgIEF0dGFjaGVkTGVmdCgpCi0gICAgRGV0YWNo
ZWQoKQotICAgIFNldERvY2tpbmdVbmF2YWlsYWJsZShib29sIHVuYXZhaWxhYmxlKQotICAgIFNl
dElzVmlzaWJsZShib29sIHZpc2libGUpCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRS
WSkKLSAgICBTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLSNl
bmRpZgotCi0gICAgU2hvd0NvbnNvbGUoKQotICAgIFNob3dSZXNvdXJjZXMoKQotCi0gICAgU2hv
d01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmluZyBmcmFtZUlkZW50aWZpZXIpCi0KLSAgICBTdGFy
dFBhZ2VQcm9maWxpbmcoKQotICAgIFN0b3BQYWdlUHJvZmlsaW5nKCkKLQotICAgIFN0YXJ0RWxl
bWVudFNlbGVjdGlvbigpCi0gICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQotCi0gICAgRGlkU2F2
ZShTdHJpbmcgdXJsKQotICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQotCi0gICAgU2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcwZjZmZDUyMDkuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotV2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6V2ViUGFnZUluc3BlY3RvclRhcmdldChXZWJQYWdlJiBwYWdl
KQotICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLVN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0OjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdG9UYXJnZXRJRChtX3BhZ2Uu
aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0
KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlw
ZSkKLXsKLSAgICBpZiAobV9jaGFubmVsKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jaGFubmVs
ID0gbWFrZVVuaXF1ZTxXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPihtX3Bh
Z2UsIGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpOwotICAgIGlmIChtX3BhZ2UuY29yZVBh
Z2UoKSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5j
b25uZWN0RnJvbnRlbmQoKm1fY2hhbm5lbCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldDo6ZGlzY29ubmVjdCgpCi17Ci0gICAgaWYgKCFtX2NoYW5uZWwpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOwot
ICAgIG1fY2hhbm5lbC5yZXNldCgpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6
OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBpZiAobV9wYWdlLmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwot
fQotCi1TdHJpbmcgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciBwYWdlSUQpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoInBhZ2UtIiwg
cGFnZUlELnRvVUludDY0KCkpOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2JkN2ZhZDVmZi4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWw7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQpOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2Vi
UGFnZSYpOwotICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0OwotCi0gICAg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KLQotICAgIFN0cmluZyBp
ZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpG
cm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nv
bm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNv
bnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlJiBtX3BhZ2U7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWw+IG1fY2hhbm5lbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmOTAxN2M0ZWRhZi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyKFdlYlBhZ2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAg
ICAsIG1fcGFnZVRhcmdldChwYWdlKQotewotICAgIC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRh
cmdldCB0byB0aGUgVUlQcm9jZXNzLCB0aGUgV2ViUGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlz
IGZvciB1cy4KLSAgICBtX3RhcmdldHMuc2V0KG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZt
X3BhZ2VUYXJnZXQpOwotfQotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldl
YlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCkKLXsKLX0KLQotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6YWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFy
Z2V0JiB0YXJnZXQpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdl
dC5pZGVudGlmaWVyKCksICZ0YXJnZXQpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0KLSAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpDcmVhdGVJbnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0
LnR5cGUoKSkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpy
ZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKLXsKLSAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKHRhcmdldC5pZGVudGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0Lmlk
ZW50aWZpZXIoKSwgIlNob3VsZCBuZXZlciByZW1vdmUgdGhlIG1haW4gdGFyZ2V0LiIpOwotCi0g
ICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRh
cmdldCh0YXJnZXQuaWRlbnRpZmllcigpKSk7Ci0KLSAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdl
dC5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9s
bGVyOjpjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLXsKLSAgICBh
dXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOwot
fQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5z
cGVjdG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCi17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3Rh
cmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdGFyZ2V0LT5kaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRh
cmdldENvbnRyb2xsZXI6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IG1f
dGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2UpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzkzMWRhZDFjOS4uMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLWNsYXNzIEluc3BlY3RvclRhcmdldDsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcihXZWJQYWdlJik7
Ci0gICAgfldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIGFk
ZFRhcmdldChJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldCYpOwotICAgIHZvaWQgcmVtb3ZlVGFy
Z2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Jik7Ci0KLSAgICB2b2lkIGNvbm5lY3RJbnNw
ZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6
OkNvbm5lY3Rpb25UeXBlKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgot
ICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IG1fcGFnZVRh
cmdldDsKLSAgICBIYXNoTWFwPFN0cmluZywgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQqPiBt
X3RhcmdldHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVu
ZENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGUxYjVmNzEzNzMzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5o
IgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2Um
IHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
OjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLSAgICA6IG1fcGFnZShwYWdlKQotICAg
ICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKLSAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlv
blR5cGUpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5l
bDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBt
X3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9y
RnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE4NGFjNWJkYTIuLjAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdl
OwotCi1jbGFzcyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0
RnJvbnRlbmRDaGFubmVsKTsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6
OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotICAgIHZpcnR1YWwgfldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRlZmF1bHQ7Ci0KLXByaXZhdGU6Ci0g
ICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2Nvbm5lY3Rpb25UeXBlOyB9Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAg
ICBTdHJpbmcgbV90YXJnZXRJZDsKLSAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
OjpDb25uZWN0aW9uVHlwZTo6UmVtb3RlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNw
ZWN0b3JVSUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
SW5zcGVjdG9yVUlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjRmOTdm
ZThkMC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JV
SS5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1i
b29sIFdlYkluc3BlY3RvclVJOjpjYW5TYXZlKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
U3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6
YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKLX0KLQotU3RyaW5nIFJlbW90
ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25z
L2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
SW5zcGVjdG9yVUlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViSW5zcGVjdG9yVUlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNTVm
M2Q1OGExLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkluc3Bl
Y3RvclVJLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2Fu
U2F2ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgd2ViSW5zcGVj
dG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05T
QnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07
Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3Ry
aW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBv
ZlR5cGU6QCJqcyJdOwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIAotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6
Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXpl
ZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIHJldHVybiB3ZWJJbnNwZWN0b3JVSUxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6
ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6
ZWRTdHJpbmdzVVJMKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2luL1dlYkluc3BlY3RvclVJV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ5NDExZmRiMTk2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKLQotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJ
LmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVXaW4uaD4KLSNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmlu
Z3NVUkwoKSBjb25zdAotewotI2lmIFVTRShDRikKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHN0
cmluZ3NVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6Ondl
YktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5ncyIpLCBDRlNUUigianMiKSwgQ0ZT
VFIoIldlYkluc3BlY3RvclVJIikpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoc3RyaW5n
c1VSTFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotU3Ry
aW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsK
LSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBzdHJpbmdzVVJMUmVmID0gYWRv
cHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZT
VFIoImxvY2FsaXplZFN0cmluZ3MiKSwgQ0ZTVFIoImpzIiksIENGU1RSKCJXZWJJbnNwZWN0b3JV
SSIpKSk7Ci0gICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKHN0cmluZ3NVUkxSZWYuZ2V0KCkpOwot
I2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388831</attachid>
            <date>2020-01-26 23:14:35 -0800</date>
            <delta_ts>2020-01-27 17:13:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206721-20200126231434.patch</filename>
            <type>text/plain</type>
            <size>785364</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYzg0Zjk5YTIzNjQyOGZmYzVmZTU0MDJmYjY3YjhlNmNkYTI3ODc3NS4uMGQz
MzM1ODRkMGUwOGI0MDA5NTZmNjI4MWZmZTk1YzI4N2I4NzU0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw5MCBAQAorMjAyMC0wMS0yNyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29saWRhdGUgVUlQcm9jZXNzL1dlYlByb2Nlc3Mg
ZmlsZXMgaW50byBJbnNwZWN0b3IgZm9sZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBD
aHJpc3RlbnNlbiBhbmQgRG9uIE9sbXN0ZWFkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAg
ICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBVSVByb2Nl
c3MvSW5zcGVjdG9yL0luc3BlY3RvclRhcmdldFByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5oLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwLgorICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW46
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdl
Ykluc3BlY3RvclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Iv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbi4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5Lmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMu
Y3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURlYnVnZ2FibGUuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgu
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAu
CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5z
cGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oLgorICAgICAgICAq
IFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGll
bnQuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5R3RrLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAuCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xp
ZW50LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9y
V2luZG93Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0
SW5zcGVjdG9yV2luZG93LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2Vi
S2l0SW5zcGVjdG9yV2luZG93LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5kb3cuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmguCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3Lm1tLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9yTm9k
ZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0
dXJlUmVjb2duaXplci5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbTogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eU1hYy5tbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3Rv
clZpZXdDb250cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW06IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJW
aWV3LmguCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JXS1dl
YlZpZXcubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tJbnNw
ZWN0b3JXS1dlYlZpZXcubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2Vi
SW5zcGVjdG9yUHJveHlNYWMubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0uCisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmguCisgICAgICAg
ICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90
ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5z
cGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3Bw
LgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0
b3JQcm94eVdpbi5jcHAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVX
ZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JV
SS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJ
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZVdlYkluc3BlY3RvclVJLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3IubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuaC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbjogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1lc3Nh
Z2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JVSS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvclVJLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlci5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3Rv
clRhcmdldEZyb250ZW5kQ2hhbm5lbC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJJbnNwZWN0b3JV
SUd0ay5jcHAuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYkluc3BlY3Rv
clVJTWFjLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYkluc3BlY3RvclVJTWFjLm1tLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9y
L3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5tbS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3VGVzdGluZy5tbToKKyAgICAgICAgQWRkIHNvbWUgbWlzc2luZyBpbmNsdWRl
cy4KKwogMjAyMC0wMS0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZyZXF1ZW50IHN5bmMgQmFja0ZvcndhcmRCYWNrTGlzdENvdW50L0JhY2tGb3J3YXJkRm9y
d2FyZExpc3RDb3VudCBJUEMgb24gcmVkZGl0LmNvbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNTMy
Njc4ZjM3NjAzM2MzYzAwZjlmNmJkNWEzMGMzODY5MGUzMzRiZi4uNGRkOTlhMDhiMDc2ZDIxOGUy
MjVjOTU3NzRjYWY1OTkwNDJhOGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC01Niw2ICs1Niw3
IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9Eb3dubG9hZHMiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0dhbWVwYWQi
CiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0dQVSIKKyAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvSW5zcGVjdG9yIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9MYXVuY2hl
ciIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvTmV0d29yayIKICAgICAiJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMiCkBAIC04NSw2ICs4Niw3IEBA
IHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9ET00iCisgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbnNwZWN0b3Ii
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9MYXVuY2hpbmciCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nl
c3MvTWVkaWFTdHJlYW0iCkBAIC0xNDgsMTIgKzE1MCwxMCBAQCBzZXQoV2ViS2l0X01FU1NBR0VT
X0lOX0ZJTEVTCiAgICAgU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIubWVz
c2FnZXMuaW4KIAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCi0g
ICAgVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQ
cm9jZXNzL1Zpc2l0ZWRMaW5rU3RvcmUubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViQ29v
a2llTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4KLSAgICBVSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVz
c2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQ
cm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5tZXNzYWdlcy5pbgpAQCAtMTYzLDYgKzE2Myw5IEBAIHNldChXZWJLaXRfTUVT
U0FHRVNfSU5fRklMRVMKIAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5t
ZXNzYWdlcy5pbgogCisgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5tZXNzYWdlcy5pbgorICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJv
eHkubWVzc2FnZXMuaW4KKwogICAgIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkubWVzc2FnZXMuaW4KIAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94
eS5tZXNzYWdlcy5pbgpAQCAtMTc5LDYgKzE4MiwxMSBAQCBzZXQoV2ViS2l0X01FU1NBR0VTX0lO
X0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdl
ci5tZXNzYWdlcy5pbgogCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVj
dG9yVUkubWVzc2FnZXMuaW4KKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3Iu
bWVzc2FnZXMuaW4KKyAgICBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1
cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCisgICAgV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yVUkubWVzc2FnZXMuaW4KKwogICAgIFdlYlByb2Nlc3MvTmV0d29yay93ZWJydGMvV2Vi
TUROU1JlZ2lzdGVyLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9X
ZWJSVENNb25pdG9yLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9OZXR3b3JrL3dlYnJ0Yy9X
ZWJSVENSZXNvbHZlci5tZXNzYWdlcy5pbgpAQCAtMjAyLDExICsyMTAsNyBAQCBzZXQoV2ViS2l0
X01FU1NBR0VTX0lOX0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3Nh
Z2VzLmluCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3Nh
Z2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
Lm1lc3NhZ2VzLmluCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdl
cy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLm1lc3NhZ2VzLmluCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLm1l
c3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KIAog
ICAgIFdlYlByb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDMwNDEx
YjE0OWM5N2ViNTliYmYyNzAyNWJhZjNlZmY3OTJlODEzZmIuLjUxZDMxOGI3MjRlNzUxOWQ3Mjc3
YWU3NTA3NzNkMWIyOGU4ZGRhYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKQEAgLTc5LDExICs3OSwxMiBAQCAkKFBST0pFQ1RfRElSKS9VSVBy
b2Nlc3MvQ29jb2EvVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgor
JChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL05ldHdvcmsv
Q3VzdG9tUHJvdG9jb2xzL0xlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgotJChQUk9K
RUNUX0RJUikvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9WaWV3R2VzdHVy
ZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9WaXNpdGVk
TGlua1N0b3JlLm1lc3NhZ2VzLmluCkBAIC05MSw3ICs5Miw2IEBAICQoUFJPSkVDVF9ESVIpL1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eS5tZXNzCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5Lm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9u
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9VSVByb2Nlc3MvV2ViSW5z
cGVjdG9yUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJk
UHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5tZXNzYWdlcy5pbgpAQCAtMTEzLDYgKzExMywxMCBAQCAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9u
L1dlYkdlb2xvY2F0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgorJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwubWVzc2FnZXMuaW4K
QEAgLTEzNCwxMyArMTM4LDkgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCi0kKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgotJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KLSQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLm1lc3NhZ2VzLmlu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNjgwNjVjZThhZTRlNTQ2N2IxZDAyOWI1
YzllNDEzYmIxN2ExMmI3Mi4uMzQ5ZTU0ZGMzMGM0NDk4MmJjZDgyZTA5ZTk0YmI2NmRlOTlkY2Ix
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtNTQsNiArNTQsNyBAQCBWUEFUSCA9
IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25E
YXRhYmFzZSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0luc3BlY3RvciBcCiAgICAgJChX
ZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhQ2FjaGUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vz
cy9NZWRpYVN0cmVhbSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL05ldHdvcmsgXApAQCAt
NzksNiArODAsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9EYXRhYmFz
ZXMgXAogICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL0Rvd25sb2FkcyBcCiAgICAgJChXZWJLaXQy
KS9VSVByb2Nlc3MvR1BVIFwKKyAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9JbnNwZWN0b3IgXAog
ICAgICQoV2ViS2l0MikvVUlQcm9jZXNzL01lZGlhU3RyZWFtIFwKICAgICAkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9OZXR3b3JrIFwKICAgICAkKFdlYktpdDIpL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3Rv
bVByb3RvY29scyBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtl
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCBhZTg1YTU1ZmE4ZTQ2ODU1
YWFiYzU1MmYwZGUwMjEyMjcyNTQ5MjMyLi4wZGE5MzkxYzUwYjJmNDlmNmZmYWY0MDg5YTQ2OGNi
Yzg0MjcxM2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRlRXLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTQ4LDYgKzQ4LDggQEAgbGlz
dChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAogCisgICAgVUlQcm9j
ZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisKICAgICBVSVByb2Nl
c3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NMYXVuY2hlcldpbi5jcHAKIAogICAgIFVJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRhU3RvcmVDdXJsLmNwcApAQCAtNTYsNyArNTgsNiBA
QCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xp
ZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3Bw
Ci0gICAgVUlQcm9jZXNzL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKICAgICBVSVByb2Nl
c3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVu
dVByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwCkBA
IC02NCw2ICs2NSw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL3dpbi9JbmplY3RlZEJ1bmRsZVdpbi5jcHAKIAorICAgIFdlYlBy
b2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKKwogICAgIFdlYlByb2Nl
c3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcAogCiAgICAgV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTm9uZS5jcHAKQEAgLTc4LDcgKzgx
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5j
cHAKIAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vz
cy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0xMDcsMTAgKzEwOSwxMyBAQCBsaXN0KEFQ
UEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvY3BwL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dpbiIK
ICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKKyAgICAi
JHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldCIKKyAgICAiJHtXRUJLSVRf
RElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvUGx1Z2lucy93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3dpbiIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4iCiAgICAgIiR7
V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIKKyAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUX0RJUn0v
V2ViUHJvY2Vzcy9XZWJQYWdlL3dpbiIKQEAgLTE3OCwxMCArMTgzLDEwIEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9MSUJSQVJJRVMKIAogaWYgKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKQogICAgIGxp
c3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCi0gICAgICAgIFVJUHJvY2Vzcy9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcAotICAgICAgICBVSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvclByb3RvY29sSGFuZGxlci5jcHAKKyAgICAgICAgVUlQcm9jZXNzL0luc3BlY3Rvci9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorICAgICAgICBVSVByb2Nlc3MvSW5zcGVjdG9y
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCiAKLSAgICAgICAgVUlQ
cm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKKyAgICAgICAgVUlQcm9j
ZXNzL0luc3BlY3Rvci93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCiAgICAgKQog
CiAgICAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IGIzNWJlODNjMWU5NDY5Y2M5ODhjM2ZkZGUyNTU2ZDk0MDA0ZGQzZDku
LjkzZTMyYjZmY2VmZjNhZjAzYjY4OGMxOGVmZjI3NjdlODUxNzQzMTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bUdUSy5jbWFrZQpAQCAtMzkzLDYgKzM5Myw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9nbGliIgogICAg
ICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrIgogICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ2xpYiIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9y
L2d0ayIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUGx1Z2lucy9ndGsiCiAgICAgIiR7
V0VCS0lUX0RJUn0vVUlQcm9jZXNzL2dlb2NsdWUiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9j
ZXNzL2dsaWIiCkBAIC00MDQsNiArNDA2LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVf
RElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9nbGliL0RPTSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTSIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci9n
dGsiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3VuaXgi
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMSIKICAg
ICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL2d0ayIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmlu
ZGV4IDFlM2Q3MGY5YjJmNGQ3NmJhOWQ2OWJjNTNkNWM4MmZjYTY0ZTg1MGMuLmJlODZmNzNiN2U5
Y2MwMDE2YjE4ODYyYWY4MDE4MmVkN2UzODE0YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpA
QCAtNTUsNiArNTUsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfUFJJVkFURV9JTkNMVURFX0RJUkVD
VE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL2NvY29h
IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db2NvYSIKICAgICAiJHtXRUJLSVRfRElS
fS9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uIgorICAgICIke1dFQktJVF9ESVJ9L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9MYXVu
Y2hlci9tYWMiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZSIK
ICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcyIKQEAgLTg5
LDYgKzkwLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24iCiAgICAg
IiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9jb2NvYSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL21hYyIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0luc3BlY3Rvci9tYWMi
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2Ei
CiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjIgog
ICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdp
bi5jbWFrZQppbmRleCAyNzEzNzEzZDliMGJjOTFjNjMxMmRiZTMxOWUxZTMzYTQ4MGU1OGQ1Li42
MDBkYjE4OTdjNmJiZGEyYThiM2UzNzkzYjYxMTdhYmYwMjAxNTI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTQ4LDYgKzQ4LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKIAog
ICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcAogCisgICAgVUlQcm9jZXNzL0luc3BlY3Rvci93aW4vV2ViSW5zcGVj
dG9yUHJveHlXaW4uY3BwCisKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvd2luL1Byb2Nlc3NMYXVu
Y2hlcldpbi5jcHAKIAogICAgIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9jdXJsL1dlYnNpdGVEYXRh
U3RvcmVDdXJsLmNwcApAQCAtNTYsNyArNTgsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNF
UwogCiAgICAgVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3Mv
d2luL1dlYkNvbnRleHRNZW51UHJveHlXaW4uY3BwCi0gICAgVUlQcm9jZXNzL3dpbi9XZWJJbnNw
ZWN0b3JQcm94eVdpbi5jcHAKICAgICBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAK
ICAgICBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAogICAgIFVJUHJvY2Vz
cy93aW4vV2ViUHJvY2Vzc1Bvb2xXaW4uY3BwCkBAIC02NCw2ICs2NSw4IEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAKICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL3dpbi9Jbmpl
Y3RlZEJ1bmRsZVdpbi5jcHAKIAorICAgIFdlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNw
ZWN0b3JVSVdpbi5jcHAKKwogICAgIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0
b3JhZ2VNYW5hZ2VyLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNj
YXBlUGx1Z2luTm9uZS5jcHAKQEAgLTc3LDcgKzgwLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5n
QXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKIAotICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9X
ZWJQYWdlV2luLmNwcAogCiAgICAgV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc01haW5XaW4uY3Bw
CkBAIC0xMDYsMTAgKzEwOCwxMyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9BUEkvY3BwL3dpbiIKICAgICAiJHtX
RUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5z
cGVjdG9yL3NvY2tldCIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yL3dp
biIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvUGx1Z2lucy93aW4iCiAgICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0lu
c3BlY3Rvci93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbiIKQEAg
LTE3OCwxMCArMTgzLDEwIEBAIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RP
UikKICAgICBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwotICAgICAgICBVSVByb2Nlc3Mvc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKLSAgICAgICAgVUlQcm9jZXNzL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCisgICAgICAgIFVJUHJvY2Vzcy9JbnNw
ZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKyAgICAgICAgVUlQcm9jZXNz
L0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcAogCi0g
ICAgICAgIFVJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlXaW4uY3BwCisgICAg
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3BlY3RvclByb3h5V2luLmNw
cAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAppbmRleCAzZGEyODAwYzljNWY3ZWFlOWZhZTJmMzZkYWQwMTMxMjM3Zjg5ZTI5Li5k
N2JkMTdhZmI3YTc1NTg1Y2Q5MGEyNDMyY2VmZTI5NTZlMTBkMzdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAg
LTI2NywxMyArMjY3LDExIEBAIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAogVUlQcm9j
ZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAogVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdFByb3h5LmNwcAotVUlQcm9jZXNzL0luc3BlY3RvclRhcmdldFByb3h5LmNwcAogVUlQcm9j
ZXNzL0xlZ2FjeUdsb2JhbFNldHRpbmdzLmNwcAogVUlQcm9jZXNzL1BhZ2VMb2FkU3RhdGUuY3Bw
CiBVSVByb2Nlc3MvUHJvY2Vzc0Fzc2VydGlvbi5jcHAKIFVJUHJvY2Vzcy9Qcm9jZXNzVGhyb3R0
bGVyLmNwcAogVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcAotVUlQcm9jZXNzL1Jl
bW90ZVdlYkluc3BlY3RvclByb3h5LmNwcAogVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIu
Y3BwCiBVSVByb2Nlc3MvU3RhdGlzdGljc1JlcXVlc3QuY3BwCiBVSVByb2Nlc3MvU3VzcGVuZGVk
UGFnZVByb3h5LmNwcApAQCAtMzA2LDE1ICszMDQsMTEgQEAgVUlQcm9jZXNzL1dlYkZyYW1lUHJv
eHkuY3BwCiBVSVByb2Nlc3MvV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vz
cy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5jcHAKIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlv
blByb3ZpZGVyLmNwcAotVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAotVUlQcm9jZXNz
L1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uU3RhdGUu
Y3BwCiBVSVByb2Nlc3MvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHAKLVVJUHJv
Y2Vzcy9XZWJQYWdlRGVidWdnYWJsZS5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuY3BwCiBVSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmNwcAogVUlQcm9jZXNzL1dl
YlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5jcHAKLVVJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCiBVSVByb2Nlc3MvV2Vi
UGFzdGVib2FyZFByb3h5LmNwcAogVUlQcm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcApAQCAtNDI2
LDYgKzQyMCwxMyBAQCBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAog
CiBVSVByb2Nlc3MvR1BVL0dQVVByb2Nlc3NQcm94eS5jcHAKIAorVUlQcm9jZXNzL0luc3BlY3Rv
ci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKK1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkuY3BwCitVSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclByb3h5
LmNwcAorVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCitVSVBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcAorVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKwogVUlQcm9jZXNzL05vdGlmaWNhdGlv
bnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiBVSVByb2Nl
c3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uY3BwCiBVSVByb2Nlc3MvTm90aWZpY2F0
aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwCkBAIC01MTcsNiArNTE4LDE2IEBA
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNs
YXJhdGlvbkhhbmRsZS5jcHAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlTm9kZUhhbmRsZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBAbm8tdW5pZnkKIAorV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3IuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGll
bnQuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3Bh
dGNoZXIuY3BwCitXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyLmNwcAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCitXZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcAorV2ViUHJvY2Vzcy9J
bnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCitXZWJQcm9jZXNz
L0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcAorCiBX
ZWJQcm9jZXNzL01lZGlhU3RyZWFtL01lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnMuY3BwCiBX
ZWJQcm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5j
cHAKIApAQCAtNTkzLDcgKzYwNCw2IEBAIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwCi1XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXIuY3BwCiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAKIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmNwcApAQCAtNjEwLDIzICs2
MjAsMTUgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlQmFubmVyLmNwcAotV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3
YXJkTGlzdFByb3h5LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvb2tpZUphci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJEb2N1bWVudExvYWRlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKLVdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9yVUkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgQG5vLXVuaWZ5CiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VPdmVybGF5LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVSTFNjaGVtZUhhbmRsZXJQcm94
eS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVUkxTY2hlbWVUYXNrUHJveHkuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggNmE4ZTJlNjkwNWMzNWJjMWJjNDhjNDY5YTZlYzZjODVkNWY4
MjRiOC4uYzQxNzQ0YTMyOGUyZTI3YTgxN2ZhMzJlN2E2YWJjMzc2MDQyY2Y0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dApAQCAtMjI5LDcgKzIyOSw2IEBAIFVJUHJvY2Vzcy9XZWJNZWRpYVNlc3Np
b25Gb2N1c01hbmFnZXIuY3BwCiBVSVByb2Nlc3MvV2ViTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2Vy
Q2xpZW50LmNwcAogVUlQcm9jZXNzL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKIFVJUHJv
Y2Vzcy9XS0ltYWdlUHJldmlld1ZpZXdDb250cm9sbGVyLm1tCi1VSVByb2Nlc3MvV0tJbnNwZWN0
b3JIaWdobGlnaHRWaWV3Lm1tCiAKIFVJUHJvY2Vzcy9BUEkvQVBJV2Vic2l0ZURhdGFSZWNvcmQu
Y3BwCiAKQEAgLTQwMiw2ICs0MDEsMTQgQEAgVUlQcm9jZXNzL0dhbWVwYWQvY29jb2EvVUlHYW1l
cGFkUHJvdmlkZXJDb2NvYS5tbQogVUlQcm9jZXNzL0dhbWVwYWQvaW9zL1VJR2FtZXBhZFByb3Zp
ZGVySU9TLm1tCiBVSVByb2Nlc3MvR2FtZXBhZC9tYWMvVUlHYW1lcGFkUHJvdmlkZXJNYWMubW0K
IAorVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCitV
SVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2du
aXplci5tbQorCitVSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eU1hYy5tbQorVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0K
K1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KK1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCisKIFVJUHJvY2Vz
cy9pb3MvZm9ybXMvV0tBaXJQbGF5Um91dGVQaWNrZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMv
V0tEYXRlUGlja2VyVmlld0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGaWxl
VXBsb2FkUGFuZWwubW0KQEAgLTQ1MSw3ICs0NTgsNiBAQCBVSVByb2Nlc3MvaW9zL1dLRHJhd2lu
Z1ZpZXcubW0KIFVJUHJvY2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCiBVSVBy
b2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbQog
VUlQcm9jZXNzL2lvcy9XS0hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLm1tCi1V
SVByb2Nlc3MvaW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tCiBV
SVByb2Nlc3MvaW9zL1dLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRvci5tbQogVUlQcm9jZXNzL2lv
cy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIubW0KIFVJUHJvY2Vzcy9pb3MvV0tQYXNzd29yZFZp
ZXcubW0KQEAgLTQ3MSw3ICs0NzcsNiBAQCBVSVByb2Nlc3MvbWFjL0Rpc3BsYXlMaW5rLmNwcAog
VUlQcm9jZXNzL21hYy9IaWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcAogVUlQcm9jZXNzL21h
Yy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuY3BwCiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tCi1VSVByb2Nlc3MvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCiBV
SVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3BwCiBVSVByb2Nlc3MvbWFjL1NlcnZpY2Vz
Q29udHJvbGxlci5tbQogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtNDgyLDE1
ICs0ODcsMTIgQEAgVUlQcm9jZXNzL21hYy9XZWJDb2xvclBpY2tlck1hYy5tbQogVUlQcm9jZXNz
L21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYkNvb2tpZU1h
bmFnZXJQcm94eU1hYy5tbQogVUlQcm9jZXNzL21hYy9XZWJEYXRhTGlzdFN1Z2dlc3Rpb25zRHJv
cGRvd25NYWMubW0KLVVJUHJvY2Vzcy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KIFVJUHJv
Y2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVBy
b3h5TWFjLm1tCiBVSVByb2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94eU1hYy5tbQogVUlQcm9jZXNz
L21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tCiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIubW0KIFVJUHJvY2Vzcy9tYWMvV0tJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLm1tCi1VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KLVVJ
UHJvY2Vzcy9tYWMvV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tQcmlu
dGluZ1ZpZXcubW0KIFVJUHJvY2Vzcy9tYWMvV0tTaGFyaW5nU2VydmljZVBpY2tlckRlbGVnYXRl
Lm1tCiBVSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQpAQCAtNTc3LDYgKzU3OSw4
IEBAIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9t
YWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0KIAorV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dlYklu
c3BlY3RvclVJTWFjLm1tCisKIFdlYlByb2Nlc3MvTWVkaWFDYWNoZS9XZWJNZWRpYUtleVN0b3Jh
Z2VNYW5hZ2VyLmNwcAogCiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL05ldHNjYXBl
UGx1Z2luTWFjLm1tCkBAIC02MTgsNyArNjIyLDYgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL0RyYXdpbmdBcmVhTWFjLmNwcAog
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QYWdlQmFubmVyTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCi1XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYkluc3BlY3RvclVJTWFjLm1tCiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdEJhc2UubW0KIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFn
ZU9iamVjdE1hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggMWVmNzNiYzIxNGM2ZTA5NWZlODM2
ZjAxOGZhODFiNjNlNTZjZmRiOC4uODVhYjBhM2UyYzlkNjE0ZDdmM2E5NWI0NmZiMmYzYWUyYTE4
YTQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CkBAIC0yMTUsNiArMjE1LDEyIEBAIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNw
cAogCiBVSVByb2Nlc3MvZ2VvY2x1ZS9HZW9jbHVlR2VvbG9jYXRpb25Qcm92aWRlci5jcHAKIAor
VUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKworVUlQ
cm9jZXNzL0luc3BlY3Rvci9ndGsvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCitVSVBy
b2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKK1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKKwogVUlQcm9jZXNzL0xhdW5j
aGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvTGF1
bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwIEBuby11bmlmeQogCkBAIC0yMzAsNyAr
MjM2LDYgQEAgVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3VuaXgvV2Vic2l0ZURhdGFTdG9yZVVuaXgu
Y3BwCiAKIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgQG5vLXVuaWZ5CiAK
LVVJUHJvY2Vzcy9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKIFVJUHJvY2Vzcy9nbGli
L1dlYlByb2Nlc3NQb29sR0xpYi5jcHAKIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQcm94eUdM
aWIuY3BwCiBVSVByb2Nlc3MvZ2xpYi9XZWJzaXRlRGF0YVN0b3JlR0xpYi5jcHAgQG5vLXVuaWZ5
CkBAIC0yNDgsNyArMjUzLDYgQEAgVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5j
cHAKIFVJUHJvY2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9ndGsvUG9pbnRlckxvY2tNYW5hZ2VyV2F5bGFuZC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nl
c3MvZ3RrL1BvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAgQG5vLXVuaWZ5Ci1VSVByb2Nlc3MvZ3Rr
L1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcAogVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tl
ckd0ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0
ay5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvZ3RrL1ZpZXdTbmFwc2hvdFN0b3JlR3RrLmNwcApA
QCAtMjU2LDggKzI2MCw2IEBAIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwIEBu
by11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJDb2xvclBpY2tlckd0ay5jcHAKIFVJUHJvY2Vzcy9n
dGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAKIFVJUHJvY2Vzcy9ndGsvV2ViRGF0YUxpc3RT
dWdnZXN0aW9uc0Ryb3Bkb3duR3RrLmNwcAotVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94
eUd0ay5jcHAKLVVJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmNwcAogVUlQcm9j
ZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL2d0ay9XZWJQ
YXN0ZWJvYXJkUHJveHlHdGsuY3BwCiBVSVByb2Nlc3MvZ3RrL1dlYlBvcHVwTWVudVByb3h5R3Rr
LmNwcApAQCAtMzkyLDYgKzM5NCw4IEBAIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuY3BwCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvZ2xpYi9JbmplY3RlZEJ1bmRsZUdsaWIuY3BwCiAKK1dlYlByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9XZWJJbnNwZWN0b3JVSUd0ay5jcHAKKwogV2ViUHJvY2Vzcy9NZWRpYUNhY2hlL1dlYk1lZGlh
S2V5U3RvcmFnZU1hbmFnZXIuY3BwCiAKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS91bml4
L05ldHNjYXBlUGx1Z2luVW5peC5jcHAgQG5vLXVuaWZ5CkBAIC00MjMsNyArNDI3LDYgQEAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVyLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VXYXlsYW5kLmNwcAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9BY2NlbGVyYXRlZFN1cmZhY2VYMTEuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViSW5zcGVjdG9yVUlHdGsuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsu
Y3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaAppbmRleCA0M2E0N2Rk
N2QwYTZlZTIzNWI3ZjU4OTMxMTNhNjY5NjZlNTJjYmY0Li4yZTA2NDlhOGRkMDEyZWMwYWUxN2Y2
ZjU1ZjQxODdhOWVkNjAxNjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJQXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElB
dHRhY2htZW50LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogT0JKQ19DTEFTUyBOU0ZpbGVXcmFwcGVyOworT0JKQ19DTEFTUyBOU1N0cmluZzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU2hhcmVkQnVmZmVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQppbmRl
eCBmYzRkODU2ZjAyZTlmNGE3NWU3ZjQ0YmI5YTMxM2Y2YjBiOGIxZWVlLi5lZDU5ODgxYzViOGEx
NjZhYjcxODYxZTEzMTgzNWQ4YTJjOTVjODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQpAQCAtMzUsNiArMzUsNyBA
QAogI2ltcG9ydCAiV2ViVmlld0ltcGwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJu
YWwuaCIKICNpbXBvcnQgIl9XS0luc3BlY3RvckludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3Jl
L1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9u
QnViYmxlLmg+CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0luc3BlY3RvclRhcmdldFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkyOGNhMmZiZmI2
OTM5MDYyZTNjZDE0YmI3YmE2ZjJmZGM4N2Y1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKQEAgLTAs
MCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIK
KworI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQ
cm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5z
cGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQoreworICAg
IHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5PihwYWdlLCB0YXJnZXRJZCwg
dHlwZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4gSW5zcGVj
dG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQ
YWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGUgdHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5OjpjcmVh
dGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5cGUpOworICAgIHRhcmdldC0+
bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNpb25hbFBhZ2UpOworICAgIHJl
dHVybiB0YXJnZXQ7Cit9CisKK0luc3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0b3JUYXJnZXRQ
cm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBt
X2lkZW50aWZpZXIodGFyZ2V0SWQpCisgICAgLCBtX3R5cGUodHlwZSkKK3sKK30KKwordm9pZCBJ
bnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6
Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQ
YWdlKSB7CisgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkK
KyAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNwZWN0b3Io
aWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdl
dFByb3h5OjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAoaXNQYXVzZWQoKSkKKyAgICAgICAgcmVz
dW1lKCk7CisKKyAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKKyAgICAgICAgbV9wcm92aXNp
b25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0b3IoaWRl
bnRpZmllcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wYWdlLmhh
c1J1bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOworfQorCit2b2lkIEluc3BlY3Rv
clRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CisgICAgICAgIG1fcHJvdmlz
aW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFyZ2V0QmFj
a2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgbV9wYWdlLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50aWZpZXIo
KSwgbWVzc2FnZSkpOworfQorCit2b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaWRDb21taXRQ
cm92aXNpb25hbFRhcmdldCgpCit7CisgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRyOwor
fQorCitib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvSW5zcGVj
dG9yVGFyZ2V0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9JbnNw
ZWN0b3JUYXJnZXRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyMjM5Y2VjOGUxODg1MGYzNWY3Zjg4YTlj
NGViYWRjNjJiZjQwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvSW5zcGVjdG9yVGFyZ2V0UHJveHkuaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgUHJvdmlzaW9uYWxQYWdlUHJveHk7CitjbGFzcyBXZWJQYWdlUHJv
eHk7CisKKy8vIE5PVEU6IFRoaXMgVUlQcm9jZXNzIHNpZGUgSW5zcGVjdG9yVGFyZ2V0IGRvZXNu
J3QgY2FyZSBhYm91dCB0aGUgZnJvbnRlbmQgY2hhbm5lbCwgc2luY2UKKy8vIGFueSB0YXJnZXQg
LT4gZnJvbnRlbmQgbWVzc2FnZXMgd2lsbCBiZSByb3V0ZWQgdG8gdGhlIFdlYlBhZ2VQcm94eSB3
aXRoIGEgdGFyZ2V0SWQuCisKK2NsYXNzIEluc3BlY3RvclRhcmdldFByb3h5IGZpbmFsIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRQcm94eSk7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4g
Y3JlYXRlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0VHlwZSk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0
b3JUYXJnZXRQcm94eT4gY3JlYXRlKFByb3Zpc2lvbmFsUGFnZVByb3h5JiwgY29uc3QgU3RyaW5n
JiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKKyAgICBJbnNwZWN0
b3JUYXJnZXRQcm94eShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUpOworICAgIH5JbnNwZWN0b3JUYXJnZXRQcm94eSgp
ID0gZGVmYXVsdDsKKworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV90eXBlOyB9CisgICAgU3RyaW5nIGlkZW50aWZpZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKworICAgIHZvaWQgZGlkQ29tbWl0
UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBib29sIGlzUHJvdmlzaW9uYWwoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzY29ubmVjdCgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CisgICAgU3RyaW5nIG1f
aWRlbnRpZmllcjsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgbV90eXBlOwor
ICAgIFdlYWtQdHI8UHJvdmlzaW9uYWxQYWdlUHJveHk+IG1fcHJvdmlzaW9uYWxQYWdlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yMTkyYzI5ZjQxODFlMDBhMTUxMDZlYTFiMjkwOTQwNTg3MmVjNDQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVk
ZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5j
bHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90
ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHkoKQorICAgIDogbV9kZWJ1Z2dhYmxlSW5mbyhBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUo
RGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKSkKK3sKK30KKworUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6On5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eSgpCit7CisgICAgQVNTRVJUKCFtX2luc3Bl
Y3RvclBhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjppbnZhbGlkYXRl
KCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworfQorCit2b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2
YWlsYWJsZSkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3Bl
Y3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
U2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdl
LT53ZWJQYWdlSUQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2Vu
ZGlmCit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmxvYWQoUmVmPEFQSTo6RGVi
dWdnYWJsZUluZm8+JiYgZGVidWdnYWJsZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1h
bmRzVVJMKQoreworICAgIGNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgbV9k
ZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOworICAgIG1fYmFja2VuZENv
bW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOworCisgICAgbV9pbnNwZWN0b3JQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6SW5pdGlhbGl6ZShtX2RlYnVnZ2Fi
bGVJbmZvLT5kZWJ1Z2dhYmxlSW5mb0RhdGEoKSwgYmFja2VuZENvbW1hbmRzVVJMKSk7CisgICAg
bV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eTo6Y2xvc2VGcm9tQmFja2VuZCgpCit7CisgICAgY2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2VGcm9tQ3Jhc2goKQor
eworICAgIC8vIEJlaGF2ZSBhcyBpZiB0aGUgZnJvbnRlbmQganVzdCBjbG9zZWQsIHNvIGNsaWVu
dHMgYXJlIGluZm9ybWVkIHRoZSBmcm9udGVuZCBpcyBnb25lLgorICAgIGZyb250ZW5kRGlkQ2xv
c2UoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCit7CisgICAg
YnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9pbnNwZWN0
b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKG1lc3NhZ2UpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
ZnJvbnRlbmREaWRDbG9zZSgpCit7CisgICAgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBw
cm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmNs
b3NlRnJvbUZyb250ZW5kKCk7CisKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwor
fQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAgIEFTU0VS
VCghbV9iYWNrZW5kQ29tbWFuZHNVUkwuaXNFbXB0eSgpKTsKKworICAgIGNsb3NlRnJvbnRlbmRQ
YWdlQW5kV2luZG93KCk7CisgICAgbG9hZChtX2RlYnVnZ2FibGVJbmZvLmNvcHlSZWYoKSwgbV9i
YWNrZW5kQ29tbWFuZHNVUkwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpy
ZXNldFN0YXRlKCkKK3sKKyAgICBwbGF0Zm9ybVJlc2V0U3RhdGUoKTsKK30KKwordm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBwbGF0Zm9ybUJyaW5n
VG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzYXZlKGNvbnN0
IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0
RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgcGxhdGZvcm1TYXZlKHN1Z2dl
c3RlZFVSTCwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlRGlhbG9nKTsKK30KKwor
dm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQoc3Vn
Z2VzdGVkVVJMLCBjb250ZW50KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
c2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBwbGF0Zm9ybVNldFNo
ZWV0UmVjdChyZWN0KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c3RhcnRX
aW5kb3dEcmFnKCkKK3sKKyAgICBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOworfQorCit2b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwp
Cit7CisgICAgcGxhdGZvcm1PcGVuSW5OZXdUYWIodXJsKTsKK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvKQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRl
SW5mbyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9C
YWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKTsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sK
KyAgICBpZiAobV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3Bl
Y3RvclBhZ2UgPSBwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAg
dHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSwgbnVsbHB0cik7CisKKyAgICBtX2lu
c3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5h
c3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCptX2luc3BlY3RvclBhZ2UsIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JCYXNlVVJMKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3Rv
clBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2Vzcygp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisK
KyAgICB1bnRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOworCisgICAgbV9pbnNw
ZWN0b3JQYWdlID0gbnVsbHB0cjsKKworICAgIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKTsKK30KKworI2lmICFFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgfHwgKCFQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pKQorV2ViUGFnZVByb3h5
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsg
fQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7
IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsg
fQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVN0YXJ0V2luZG93RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8m
KSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKSB7IH0KKyNlbmRpZiAvLyAhRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
IHx8ICghUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSkK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZhYjU4ZjhjZTA2ZWEyMWZiZWU5MTM4OTQzMjQ2Y2FlOGY1NGYzYTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorT0JKQ19DTEFT
UyBOU1VSTDsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmll
d0NvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRh
cHRlcjsKK09CSkNfQ0xBU1MgV0tXZWJWaWV3OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK30KKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBE
ZWJ1Z2dhYmxlSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQ
cm94eTsKK2NsYXNzIFdlYlZpZXc7CisKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVu
dCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSA9
IDA7Cit9OworCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkoKSk7CisgICAgfQorCisgICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisK
KyAgICB2b2lkIHNldENsaWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50
KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CisKKyAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUoYm9vbCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgbG9hZChSZWY8
QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwp
OworICAgIHZvaWQgY2xvc2VGcm9tQmFja2VuZCgpOworICAgIHZvaWQgc2hvdygpOworCisgICAg
dm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93
aW5kb3cuZ2V0KCk7IH0KKyAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKKworICAgIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVl
dFJlY3Q7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgdXBkYXRlV2lu
ZG93VGl0bGUoY29uc3QgQ1N0cmluZyYpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU5fQ0FJ
Uk8pCisgICAgTFJFU1VMVCBzaXplQ2hhbmdlKCk7CisgICAgTFJFU1VMVCBvbkNsb3NlKCk7CisK
KyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwg
TFBBUkFNKTsKKyNlbmRpZgorCisgICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOworCitwcml2YXRl
OgorICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBt
ZXNzYWdlcy4KKyAgICB2b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICB2b2lkIHJlb3Blbigp
OworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAg
dm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Ym9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKKyAgICB2b2lkIGFwcGVuZChj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQg
c2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgc3RhcnRX
aW5kb3dEcmFnKCk7CisgICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwor
ICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
OworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KworICAgIHZvaWQgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CisgICAgdm9pZCBjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworCisgICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRp
b25zLgorICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5k
b3coKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKyAg
ICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJv
bnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7
CisgICAgdm9pZCBwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpOworICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwor
ICAgIHZvaWQgcGxhdGZvcm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZv
aWQgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
Jik7CisKKyAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxs
cHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisK
KyAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKKyAgICBTdHJp
bmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWlu
UHRyPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKKyAgICBSZXRh
aW5QdHI8TlNXaW5kb3c+IG1fd2luZG93OworICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5T2JqQ0FkYXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFJldGFpblB0cjxOU1VSTD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7CisgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IG1fc2hlZXRSZWN0OworI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorICAg
IEd0a1dpZGdldCogbV93ZWJWaWV3IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV93aW5k
b3cgeyBudWxscHRyIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgSFdO
RCBtX2Zyb250ZW5kSGFuZGxlOworICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlMDkxYjc4ZmI2YThkNWRmN2IyM2UwNTBmZmZm
MWQ5MmE0YmQ0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0
MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAt
PiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSB7CisgICAgRnJvbnRlbmREaWRDbG9zZSgpCisgICAg
UmVvcGVuKCkKKyAgICBSZXNldFN0YXRlKCkKKyAgICBCcmluZ1RvRnJvbnQoKQorCisgICAgU2F2
ZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlQXMpCisgICAgQXBwZW5kKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRl
bnQpCisKKyAgICBTZXRTaGVldFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKKyAgICBT
dGFydFdpbmRvd0RyYWcoKQorCisgICAgT3BlbkluTmV3VGFiKFN0cmluZyB1cmwpCisgICAgU2hv
d0NlcnRpZmljYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8pCisK
KyAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIzZDcwNWU4M2U3MDZlYTgzNzRhYmJlODRlODE1ZGQ3YjYzYmJhNWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5z
cGVjdG9yUHJveHkuY3BwCkBAIC0wLDAgKzEsNzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9yUHJveHkuaCIKKworI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElQ
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElVSUNsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYkF1dG9tYXRpb25TZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXJNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIldlYkluc3BlY3Rvck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0RW5jb2RpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eUNsaWVudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0IHVuc2lnbmVkIFdlYkluc3Bl
Y3RvclByb3h5OjptaW5pbXVtV2luZG93V2lkdGggPSA1MDA7Citjb25zdCB1bnNpZ25lZCBXZWJJ
bnNwZWN0b3JQcm94eTo6bWluaW11bVdpbmRvd0hlaWdodCA9IDQwMDsKKworY29uc3QgdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCA9IDEwMDA7Citjb25zdCB1
bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCA9IDY1MDsKKwor
V2ViSW5zcGVjdG9yUHJveHk6OldlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSogaW5zcGVj
dGVkUGFnZSkKKyNpZiBQTEFURk9STShNQUMpCisgICAgOiBtX2Nsb3NlRnJvbnRlbmRBZnRlcklu
YWN0aXZpdHlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQpCisjZW5kaWYKK3sKKyAgICBp
ZiAoaW5zcGVjdGVkUGFnZSAmJiBpbnNwZWN0ZWRQYWdlLT5oYXNSdW5uaW5nUHJvY2VzcygpKSB7
CisgICAgICAgIG1faW5zcGVjdGVkUGFnZSA9IGluc3BlY3RlZFBhZ2U7CisgICAgICAgIG1faW5z
cGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQ
YWdlSUQoKSwgKnRoaXMpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yUHJveHk6On5XZWJJbnNw
ZWN0b3JQcm94eSgpCit7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
aW9uTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoaW5z
cGVjdGVkUGFnZSgpKTsKK30KKworV2ViUHJlZmVyZW5jZXMmIFdlYkluc3BlY3RvclByb3h5Ojpp
bnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdAoreworICAgIEFTU0VSVChtX2luc3BlY3Rv
clBhZ2UpOworICAgIHJldHVybiBtX2luc3BlY3RvclBhZ2UtPnBhZ2VHcm91cCgpLnByZWZlcmVu
Y2VzKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQoreworICAg
IGlmIChtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vzcygp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisKKyAgICBj
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOworICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwor
CisgICAgbV9pbnNwZWN0ZWRQYWdlID0gbnVsbHB0cjsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0
b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKG1lc3NhZ2UpKTsKK30KKworLy8gUHVibGljIEFQSXMKK2Jvb2wgV2ViSW5zcGVjdG9yUHJv
eHk6OmlzRnJvbnQoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Jc0Zyb250KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmNvbm5lY3QoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaG93TWVzc2FnZVNlbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gdHJ1ZTsKKyAgICBtX2lnbm9yZUZpcnN0
QnJpbmdUb0Zyb250ID0gdHJ1ZTsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNw
YXRjaGVyOjpOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpLCAwKTsKKyAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvdygpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6c2hvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgICAgIGJyaW5nVG9G
cm9udCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29ubmVjdCgpOworCisgICAg
Ly8gRG9uJ3QgaWdub3JlIHRoZSBmaXJzdCBicmluZ1RvRnJvbnQgc28gaXQgb3BlbnMgdGhlIElu
c3BlY3Rvci4KKyAgICBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250ID0gZmFsc2U7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmhpZGUoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgcGxh
dGZvcm1IaWRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlKCkKK3sKKyAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0
ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OkNsb3NlKCkpOworCisgICAgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGb3JDcmFzaCgpCit7CisgICAgY2xvc2UoKTsKKworICAgIHBsYXRmb3JtRGlkQ2xvc2VG
b3JDcmFzaCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZW9wZW4oKQoreworICAg
IGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBjbG9zZSgpOwor
ICAgIHNob3coKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXRTdGF0ZSgpCit7
CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHQoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0b3JB
dHRhY2hlZFdpZHRoKCk7CisgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5z
cGVjdG9yQXR0YWNobWVudFNpZGUoKTsKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5k
ZWxldGVJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOworICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmRlbGV0ZUluc3BlY3RvcldpbmRvd0ZyYW1lKCk7CisKKyAgICBwbGF0Zm9ybVJlc2V0
U3RhdGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cmVzZXQoKQoreworICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UpIHsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFn
ZSkKK3sKKyAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7CisgICAgQVNTRVJUKGluc3BlY3Rl
ZFBhZ2UpOworCisgICAgbV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKKyAgICBtX2lu
c3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2Vi
UGFnZUlEKCksICp0aGlzKTsKKworICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5l
Y3Rpb24oKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVj
dGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCit7CisgICAgaWYgKCFt
X2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVj
dGlvbklkZW50aWZpZXIpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNv
bGUoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yOjpTaG93Q29uc29sZSgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvd1Jlc291cmNlcygpCit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOworCisgICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dSZXNvdXJjZXMoKSk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShX
ZWJGcmFtZVByb3h5KiBmcmFtZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CisKKyAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd01haW5SZXNvdXJjZUZvckZy
YW1lKGZyYW1lLT5mcmFtZUlEKCkpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0
YWNoQm90dG9tKCkKK3sKKyAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OkJvdHRvbSk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaFJpZ2h0KCkKK3sKKyAgICBhdHRhY2goQXR0
YWNobWVudFNpZGU6OlJpZ2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNo
TGVmdCgpCit7CisgICAgYXR0YWNoKEF0dGFjaG1lbnRTaWRlOjpMZWZ0KTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRlIHNpZGUpCit7CisgICAgaWYg
KCFtX2luc3BlY3RlZFBhZ2UgfHwgIWNhbkF0dGFjaCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2lzQXR0YWNoZWQgPSB0cnVlOworICAgIG1fYXR0YWNobWVudFNpZGUgPSBzaWRlOworCisg
ICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yQXR0YWNobWVudFNpZGUo
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNpZGUpKTsKKworICAgIGlmIChtX2lzVmlzaWJsZSkKKyAg
ICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCkuc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWQodHJ1ZSk7CisKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSkpOworCisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRl
KSB7CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgorICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNo
ZWRSaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpM
ZWZ0OgorICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpBdHRhY2hlZExlZnQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHBsYXRm
b3JtQXR0YWNoKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmRldGFjaCgpCit7Cisg
ICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNBdHRh
Y2hlZCA9IGZhbHNlOworCisgICAgaWYgKG1faXNWaXNpYmxlKQorICAgICAgICBpbnNwZWN0b3JQ
YWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChmYWxzZSk7CisKKyAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNo
ZWQoZmFsc2UpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpEZXRhY2hlZCgpKTsKKworICAgIHBsYXRmb3JtRGV0YWNoKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdo
dCkKK3sKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRhY2hl
ZEhlaWdodChoZWlnaHQpOworICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVp
Z2h0KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dXaWR0
aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJ
bnNwZWN0b3JBdHRhY2hlZFdpZHRoKHdpZHRoKTsKKyAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93V2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRTaGVldFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHBsYXRmb3JtU2V0U2hlZXRSZWN0KHJl
Y3QpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQorewor
ICAgIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnRvZ2dsZVBhZ2VQcm9maWxpbmcoKQoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1Byb2ZpbGluZ1BhZ2UpCisgICAgICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wUGFnZVByb2Zp
bGluZygpKTsKKyAgICBlbHNlCisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTdGFydFBhZ2VQcm9maWxpbmcoKSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9lbGVtZW50U2VsZWN0aW9u
QWN0aXZlKSB7CisgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9IHRydWU7
CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
dG9wRWxlbWVudFNlbGVjdGlvbigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25uZWN0KCk7
CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
dGFydEVsZW1lbnRTZWxlY3Rpb24oKSk7CisgICAgfQorfQorCitib29sIFdlYkluc3BlY3RvclBy
b3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKGNvbnN0IFVSTCYgdXJsKQoreworICAgIC8v
IFVzZSBVUkwgc28gd2UgY2FuIGNvbXBhcmUgdGhlIHBhdGhzIGFuZCBwcm90b2NvbHMuCisgICAg
VVJMIG1haW5QYWdlVVJMKFVSTCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVS
TCgpKTsKKyAgICBpZiAodXJsLnByb3RvY29sKCkgPT0gbWFpblBhZ2VVUkwucHJvdG9jb2woKSAm
JiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSkgPT0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKG1haW5QYWdlVVJMLnBhdGgoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgYSBUZXN0IFVSTCBpbiBQcm9kdWN0aW9uIGJ1aWxkcy4K
KyAgICBTdHJpbmcgdGVzdFBhZ2VVUkxTdHJpbmcgPSBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dG9yVGVzdFBhZ2VVUkwoKTsKKyAgICBpZiAodGVzdFBhZ2VVUkxTdHJpbmcuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVSTCB0ZXN0UGFnZVVSTChVUkwoKSwgdGVzdFBh
Z2VVUkxTdHJpbmcpOworICAgIHJldHVybiB1cmwucHJvdG9jb2woKSA9PSB0ZXN0UGFnZVVSTC5w
cm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXModGVzdFBhZ2VVUkwucGF0aCgpKTsKK30KKwordm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6Y3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBwbGF0Zm9y
bUNyZWF0ZUZyb250ZW5kUGFnZSgpOworICAgIEFTU0VSVChtX2luc3BlY3RvclBhZ2UpOworICAg
IGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFja0luc3Bl
Y3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlLCBtX2luc3BlY3RlZFBhZ2UpOworCisgICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPmlkZW50
aWZpZXIoKSwgKnRoaXMpOworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFzc3VtZVJl
YWRBY2Nlc3NUb0Jhc2VVUkwoKm1faW5zcGVjdG9yUGFnZSwgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvckJhc2VVUkwoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2Nh
bEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzdCkKK3sKKyAg
ICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faW5z
cGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKSkgewor
ICAgICAgICBzaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3VuZGVyVGVz
dCA9IHVuZGVyVGVzdDsKKyAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKworICAgIEFTU0VSVCht
X2luc3BlY3RvclBhZ2UpOworICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpFc3RhYmxpc2hDb25uZWN0aW9uKG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBpbmZv
Rm9yTG9jYWxEZWJ1Z2dhYmxlKCksIG1fdW5kZXJUZXN0LCBpbnNwZWN0aW9uTGV2ZWwoKSkpOwor
CisgICAgQVNTRVJUKCFtX2lzQWN0aXZlRnJvbnRlbmQpOworICAgIG1faXNBY3RpdmVGcm9udGVu
ZCA9IHRydWU7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuY29u
bmVjdEZyb250ZW5kKCp0aGlzKTsKKworICAgIGlmICghbV91bmRlclRlc3QpIHsKKyAgICAgICAg
bV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChjYW5BdHRhY2gpOworICAgICAgICBtX2lz
QXR0YWNoZWQgPSBzaG91bGRPcGVuQXR0YWNoZWQoKTsKKyAgICAgICAgbV9hdHRhY2htZW50U2lk
ZSA9IHN0YXRpY19jYXN0PEF0dGFjaG1lbnRTaWRlPihpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5pbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpKTsKKworICAgICAgICBtX2luc3BlY3RlZFBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSk7
CisKKyAgICAgICAgaWYgKG1faXNBdHRhY2hlZCkgeworICAgICAgICAgICAgc3dpdGNoIChtX2F0
dGFjaG1lbnRTaWRlKSB7CisgICAgICAgICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206
CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJpZ2h0OgorICAgICAgICAgICAgICAgIG1f
aW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmln
aHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OkxlZnQ6CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOwor
CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpKTsKKyAgICB9CisKKyAgICAvLyBO
b3RpZnkgV2ViS2l0IGNsaWVudCB3aGVuIGEgbG9jYWwgaW5zcGVjdG9yIGF0dGFjaGVzIHNvIHRo
YXQgaXQgbWF5IGluc3RhbGwgZGVsZWdhdGVzIHByaW9yIHRvIHRoZSBfV0tJbnNwZWN0b3IgbG9h
ZGluZyBpdHMgZnJvbnRlbmQuCisgICAgbV9pbnNwZWN0ZWRQYWdlLT51aUNsaWVudCgpLmRpZEF0
dGFjaEluc3BlY3RvcigqbV9pbnNwZWN0ZWRQYWdlLCAqdGhpcyk7CisKKyAgICAvLyBCYWlsIG91
dCBpZiB0aGUgY2xpZW50IGNsb3NlZCB0aGUgaW5zcGVjdG9yIGZyb20gdGhlIGRlbGVnYXRlIG1l
dGhvZC4KKyAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9pbnNwZWN0b3JQYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIG1fdW5kZXJUZXN0ID8gV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkgOiBXZWJJbnNwZWN0b3JQcm94
eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9w
ZW4oKQoreworICAgIGlmIChtX3VuZGVyVGVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFNldEZvclNjb3BlPGJv
b2w+IGlzT3BlbmluZyhtX2lzT3BlbmluZywgdHJ1ZSk7CisgICAgbV9pc1Zpc2libGUgPSB0cnVl
OworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
dElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOworCisgICAgaWYgKG1faXNBdHRhY2hlZCkKKyAgICAg
ICAgcGxhdGZvcm1BdHRhY2goKTsKKyAgICBlbHNlCisgICAgICAgIHBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRXaW5kb3coKTsKKworICAgIHBsYXRmb3JtQnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OmRpZENsb3NlKCkKK3sKKyAgICBjbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpCit7CisgICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisgICAgbV9pc1Byb2ZpbGluZ1BhZ2UgPSBm
YWxzZTsKKyAgICBtX3Nob3dNZXNzYWdlU2VudCA9IGZhbHNlOworICAgIG1faWdub3JlRmlyc3RC
cmluZ1RvRnJvbnQgPSBmYWxzZTsKKworICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVj
dG9yUGFnZSk7CisKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKKyAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigp
KTsKKworICAgIGlmIChtX2lzQWN0aXZlRnJvbnRlbmQpIHsKKyAgICAgICAgbV9pc0FjdGl2ZUZy
b250ZW5kID0gZmFsc2U7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCgqdGhpcyk7CisgICAgfQorCisgICAgaWYgKG1faXNB
dHRhY2hlZCkKKyAgICAgICAgcGxhdGZvcm1EZXRhY2goKTsKKworICAgIC8vIE51bGwgb3V0IG1f
aW5zcGVjdG9yUGFnZSBhZnRlciBwbGF0Zm9ybURldGFjaCgpLCBzbyB0aGUgdmlld3MgY2FuIGJl
IGNsZWFuZWQgdXAgY29ycmVjdGx5LgorICAgIG1faW5zcGVjdG9yUGFnZSA9IG51bGxwdHI7CisK
KyAgICBtX2lzQXR0YWNoZWQgPSBmYWxzZTsKKyAgICBtX2NhbkF0dGFjaCA9IGZhbHNlOworICAg
IG1fdW5kZXJUZXN0ID0gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9CYWNr
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCkuZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgaWYgKCFtX2luc3BlY3Rl
ZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiBhdXRvbWF0aW9uU2Vzc2lv
biA9IG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYXV0b21hdGlvblNl
c3Npb24oKSkKKyAgICAgICAgYXV0b21hdGlvblNlc3Npb24tPmluc3BlY3RvckZyb250ZW5kTG9h
ZGVkKCptX2luc3BlY3RlZFBhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpicmlu
Z1RvRnJvbnQoKQoreworICAgIC8vIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwgdGVsbHMgdXMgdG8gZG8gdGhpcyBvbiBsb2FkLiBXZSB3YW50IHRvCisgICAgLy8gaWdub3Jl
IGl0IG9uY2UgaWYgd2Ugb25seSB3YW50ZWQgdG8gY29ubmVjdC4gVGhpcyBhbGxvd3MgdGhlIElu
c3BlY3RvciB0byBsYXRlcgorICAgIC8vIHJlcXVlc3QgdG8gYmUgYnJvdWdodCB0byB0aGUgZnJv
bnQgd2hlbiBhIGJyZWFrcG9pbnQgaXMgaGl0IG9yIHNvbWUgb3RoZXIgYWN0aW9uLgorICAgIGlm
IChtX2lnbm9yZUZpcnN0QnJpbmdUb0Zyb250KSB7CisgICAgICAgIG1faWdub3JlRmlyc3RCcmlu
Z1RvRnJvbnQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lz
VmlzaWJsZSkKKyAgICAgICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlCisgICAg
ICAgIG9wZW4oKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpCit7CisgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQo
Ym9vbCBhdmFpbGFibGUpCit7CisgICAgYm9vbCBwcmV2aW91c0NhbkF0dGFjaCA9IG1fY2FuQXR0
YWNoOworCisgICAgbV9jYW5BdHRhY2ggPSBwbGF0Zm9ybUNhbkF0dGFjaChhdmFpbGFibGUpOwor
CisgICAgaWYgKHByZXZpb3VzQ2FuQXR0YWNoID09IG1fY2FuQXR0YWNoKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9pbnNwZWN0b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKKyAgICAgICAg
bV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2lu
Z1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOworCisgICAgcGxhdGZvcm1BdHRhY2hBdmFpbGFi
aWxpdHlDaGFuZ2VkKG1fY2FuQXR0YWNoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBwbGF0
Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvKQoreworICAgIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNlcnRpZmljYXRlSW5mbyk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJv
b2wgYWN0aXZlKQoreworICAgIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSA9IGFjdGl2ZTsKKwor
ICAgIGlmIChtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UpIHsKKyAgICAgICAgbV9pZ25v
cmVFbGVtZW50U2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7CisgICAgICAgIGlmICghbV9pc1Zpc2li
bGUpCisgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGFjdGl2ZSkKKyAgICAgICAgcGxhdGZvcm1CcmluZ0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7
CisgICAgZWxzZSBpZiAoaXNDb25uZWN0ZWQoKSkKKyAgICAgICAgYnJpbmdUb0Zyb250KCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29s
IGFjdGl2ZSkKK3sKKyAgICBtX2lzUHJvZmlsaW5nUGFnZSA9IGFjdGl2ZTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9w
dGlvbmFsPGJvb2w+IGVuYWJsZWQpCit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBp
ZiAoIW1faW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0ZWRQ
YWdlLT5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShlbmFibGVkKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUoYXZhaWxhYmxlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhdmFpbGFibGUpOworI2VuZGlmCit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCit7Cisg
ICAgcGxhdGZvcm1TYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNh
dmVBcyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmFwcGVuZChjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgcGxhdGZvcm1BcHBlbmQo
ZmlsZW5hbWUsIGNvbnRlbnQpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpzaG91bGRP
cGVuQXR0YWNoZWQoKQoreworICAgIHJldHVybiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5p
bnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpICYmIGNhbkF0dGFjaCgpOworfQorCisvLyBVbnN1cHBv
cnRlZCBjb25maWd1cmF0aW9ucyBjYW4gdXNlIHRoZSBzdHVicyBwcm92aWRlZCBoZXJlLgorCisj
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKKwor
V2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFBh
Z2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2VGb3JDcmFz
aCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVJlc2V0U3RhdGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdU
b0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlm
aWNhdGVJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxv
ZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5n
JiBjb250ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Vuc2lnbmVkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQXR0YWNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JCYXNlVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworRGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9j
YWxEZWJ1Z2dhYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEZWJ1
Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWls
YWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjZW5k
aWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMWZkZmNhMWRm
YjhlNWM1NWZjY2Q4MDE2ZjQyMWY3MTQxNjNjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHkuaApAQCAtMCwwICsx
LDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQXR0YWNobWVu
dC5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFU
Rk9STShNQUMpCisjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK09CSkNfQ0xBU1MgTlNVUkw7CitPQkpD
X0NMQVNTIE5TVmlldzsKK09CSkNfQ0xBU1MgTlNXaW5kb3c7CitPQkpDX0NMQVNTIFdLV2ViSW5z
cGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKK09CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlcjsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ2VydGlmaWNhdGVJbmZvOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRnJhbWVQcm94eTsKK2NsYXNzIFdlYkluc3BlY3Rv
clByb3h5Q2xpZW50OworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJlZmVyZW5jZXM7
CisKK2VudW0gY2xhc3MgQXR0YWNobWVudFNpZGUgeworICAgIEJvdHRvbSwKKyAgICBSaWdodCwK
KyAgICBMZWZ0LAorfTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKKyAgICA6IHB1YmxpYyBB
UEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KKyAgICAsIHB1Ymxp
YyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsCisjaWYgUExBVEZPUk0oV0lOKQorICAgICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01l
c3NhZ2VMaXN0ZW5lcgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJJbnNw
ZWN0b3JQcm94eT4gY3JlYXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3BlY3RlZFBh
Z2UpKTsKKyAgICB9CisKKyAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsKKworICAgIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgLy8gUHVibGljIEFQSXMKKyAgICBXZWJQYWdlUHJveHkqIGluc3Bl
Y3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKyAgICBXZWJQYWdl
UHJveHkqIGluc3BlY3RvclBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2U7IH0K
KworICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVjdG9yUGFn
ZTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0K
KyAgICBib29sIGlzRnJvbnQoKTsKKworICAgIHZvaWQgY29ubmVjdCgpOworCisgICAgdm9pZCBz
aG93KCk7CisgICAgdm9pZCBoaWRlKCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgY2xv
c2VGb3JDcmFzaCgpOworICAgIHZvaWQgcmVvcGVuKCk7CisgICAgdm9pZCByZXNldFN0YXRlKCk7
CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhX
ZWJQYWdlUHJveHkqKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBlbnVtIGNsYXNzIEluc3Bl
Y3Rpb25UYXJnZXRUeXBlIHsgTG9jYWwsIFJlbW90ZSB9OworICAgIHN0YXRpYyBSZXRhaW5QdHI8
TlNXaW5kb3c+IGNyZWF0ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJ
bnNwZWN0aW9uVGFyZ2V0VHlwZSk7CisKKyAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1Rp
dGxlKCkgY29uc3Q7CisgICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9h
dCA9IDApOworICAgIHZvaWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB2b2lkIHdpbmRv
d0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKKyAgICBOU1dpbmRvdyogaW5zcGVjdG9yV2luZG93KCkg
Y29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KKworICAgIHZvaWQgY2xv
c2VGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlU
aW1lckZpcmVkKCk7CisKKyAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAq
b2xkVmlldywgTlNWaWV3ICpuZXdWaWV3KTsKKyAgICB2b2lkIGF0dGFjaG1lbnRXaWxsTW92ZUZy
b21XaW5kb3coTlNXaW5kb3cgKm9sZFdpbmRvdyk7CisgICAgdm9pZCBhdHRhY2htZW50RGlkTW92
ZVRvV2luZG93KE5TV2luZG93ICpuZXdXaW5kb3cpOworCisgICAgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzaGVldFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQorI2VuZGlm
CisKKyNpZiBQTEFURk9STShHVEspCisgICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3KCkgY29u
c3QgeyByZXR1cm4gbV9pbnNwZWN0b3JWaWV3OyB9OworICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6
dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJik7CisjZW5kaWYKKworICAgIHZv
aWQgc2hvd0NvbnNvbGUoKTsKKyAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNo
b3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CisKKyAgICBBdHRhY2htZW50
U2lkZSBhdHRhY2htZW50U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0K
KyAgICBib29sIGlzQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KKyAg
ICB2b2lkIGF0dGFjaFJpZ2h0KCk7CisgICAgdm9pZCBhdHRhY2hMZWZ0KCk7CisgICAgdm9pZCBh
dHRhY2hCb3R0b20oKTsKKyAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1l
bnRTaWRlOjpCb3R0b20pOworICAgIHZvaWQgZGV0YWNoKCk7CisKKyAgICB2b2lkIHNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lk
dGgodW5zaWduZWQpOworCisgICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7CisKKyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOworCisgICAgYm9vbCBpc1By
b2ZpbGluZ1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQorICAgIHZv
aWQgdG9nZ2xlUGFnZVByb2ZpbGluZygpOworCisgICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25B
Y3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KKyAgICB2
b2lkIHRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKTsKKworICAgIGJvb2wgaXNVbmRlclRlc3QoKSBj
b25zdCB7IHJldHVybiBtX3VuZGVyVGVzdDsgfQorCisgICAgdm9pZCBzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZShib29sKTsKKworICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYklu
c3BlY3RvclByb3h5IGltcGxlbWVudGF0aW9ucy4KKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3Rv
clBhZ2VVUkwoKTsKKyAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJMKCk7Cisg
ICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JCYXNlVVJMKCk7CisgICAgc3RhdGljIGJvb2wgaXNN
YWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBVUkwmKTsKKyAgICBzdGF0aWMgRGVidWdnYWJs
ZUluZm9EYXRhIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKTsKKworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtaW5pbXVtV2luZG93V2lkdGg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1p
bmltdW1XaW5kb3dIZWlnaHQ7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdp
bmRvd1dpZHRoOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0
OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94
eSopOworCisgICAgdm9pZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisKKyAgICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAorICAgIHZvaWQg
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Cisg
ICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBDb25uZWN0aW9uVHlwZTo6TG9jYWw7IH0KKworICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2UoKTsKKyAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5k
b3coKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKKwor
ICAgIHZvaWQgcGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCk7CisgICAgdm9pZCBwbGF0Zm9ybUlu
dmFsaWRhdGUoKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcGxh
dGZvcm1CcmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdl
VG9Gcm9udCgpOworICAgIHZvaWQgcGxhdGZvcm1IaWRlKCk7CisgICAgYm9vbCBwbGF0Zm9ybUlz
RnJvbnQoKTsKKyAgICB2b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29s
KTsKKyAgICB2b2lkIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmlj
YXRlSW5mbyYpOworICAgIHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCk7
CisgICAgdW5zaWduZWQgcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOworICAgIHZvaWQg
cGxhdGZvcm1BdHRhY2goKTsKKyAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7CisgICAgdm9pZCBw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKyAgICB2b2lkIHBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCk7CisgICAgdm9pZCBwbGF0Zm9ybVNl
dFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBsYXRmb3Jt
U3RhcnRXaW5kb3dEcmFnKCk7CisgICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wg
Zm9yY2VTYXZlQXMpOworICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBi
b29sIHBsYXRmb3JtQ2FuQXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7CisjZWxzZQor
ICAgIGJvb2wgcGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKSB7IHJl
dHVybiB3ZWJQcm9jZXNzQ2FuQXR0YWNoOyB9CisjZW5kaWYKKworICAgIC8vIENhbGxlZCBieSBX
ZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcworICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJv
bnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKKyAgICB2b2lkIHNldEZyb250
ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRv
QmFja2VuZChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisgICAg
dm9pZCBkaWRDbG9zZSgpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBicmlu
Z0luc3BlY3RlZFBhZ2VUb0Zyb250KCk7CisgICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxpdHlDaGFu
Z2VkKGJvb2wpOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KTsKKyAgICB2b2lkIGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgdGlt
ZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZp
Y2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKKworICAgIHZvaWQgc2F2ZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50KTsKKworICAgIGJvb2wgY2FuQXR0YWNoKCkg
Y29uc3QgeyByZXR1cm4gbV9jYW5BdHRhY2g7IH0KKyAgICBib29sIHNob3VsZE9wZW5BdHRhY2hl
ZCgpOworCisgICAgdm9pZCBvcGVuKCk7CisKKyAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwo
KSBjb25zdDsKKworICAgIFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KSBjb25zdDsKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIHZvaWQg
dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oV0lOKQorICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwgVUlOVCwg
V1BBUkFNLCBMUEFSQU0pOworICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgIHZv
aWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKSBvdmVy
cmlkZTsKKyNlbmRpZgorCisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2UgeyBudWxs
cHRyIH07CisgICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07CisK
KyAgICBib29sIG1fdW5kZXJUZXN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWaXNpYmxlIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Nh
bkF0dGFjaCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZhbHNlIH07
CisgICAgYm9vbCBtX3Nob3dNZXNzYWdlU2VudCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9y
ZUZpcnN0QnJpbmdUb0Zyb250IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZWxlbWVudFNlbGVjdGlv
bkFjdGl2ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFu
Z2UgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pc0FjdGl2ZUZyb250ZW5kIHsgZmFsc2UgfTsKKworICAgIEF0dGFjaG1lbnRTaWRlIG1fYXR0
YWNobWVudFNpZGUge0F0dGFjaG1lbnRTaWRlOjpCb3R0b219OworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFJldGFpblB0cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JXaW5kb3c7
CisgICAgUmV0YWluUHRyPFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRh
cHRlcjsKKyAgICBIYXNoTWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRU
b0FjdHVhbFVSTE1hcDsKKyAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94eT4gbV9j
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXI7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5n
OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKKyAgICBib29sIG1faXNPYnNl
cnZpbmdDb250ZW50TGF5b3V0UmVjdCB7IGZhbHNlIH07CisjZWxpZiBQTEFURk9STShHVEspCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVudDsKKyAg
ICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKKyAgICBHdGtXaWRnZXQq
IG1faW5zcGVjdG9yV2luZG93IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogbV9oZWFkZXJC
YXIgeyBudWxscHRyIH07CisgICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOworI2VsaWYg
UExBVEZPUk0oV0lOKQorICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVsbHB0ciB9
OworICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9OworICAg
IEhXTkQgbV9pbnNwZWN0b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9pbnNw
ZWN0b3JEZXRhY2hXaW5kb3cgeyBudWxscHRyIH07CisgICAgUmVmUHRyPFdlYlZpZXc+IG1faW5z
cGVjdG9yVmlldzsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yUHJveHku
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJiNzc1NTNjNmIxMTA5NzI2MmQ0N2Q0
MWYyNmIyNGMyMTYyMGYwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDU4
IEBACisjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3Nh
Z2VzIC0+IFdlYkluc3BlY3RvclByb3h5IHsKKyAgICBPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVu
ZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlc3QpCisgICAgU2V0RnJvbnRlbmRDb25uZWN0
aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKKworICAgIFNlbmRNZXNz
YWdlVG9CYWNrZW5kKFN0cmluZyBtZXNzYWdlKQorCisgICAgRnJvbnRlbmRMb2FkZWQoKQorICAg
IERpZENsb3NlKCkKKyAgICBCcmluZ1RvRnJvbnQoKQorICAgIEJyaW5nSW5zcGVjdGVkUGFnZVRv
RnJvbnQoKQorICAgIFJlb3BlbigpCisgICAgUmVzZXRTdGF0ZSgpCisKKyAgICBJbnNwZWN0ZWRV
UkxDaGFuZ2VkKFN0cmluZyB1cmxTdHJpbmcpCisgICAgU2hvd0NlcnRpZmljYXRlKFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8pCisgICAgRWxlbWVudFNlbGVjdGlvbkNo
YW5nZWQoYm9vbCBhY3RpdmUpCisgICAgVGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0
aXZlKQorICAgIFNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxi
b29sPiBlbmFibGVkKQorCisgICAgU2F2ZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50
LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCisgICAgQXBwZW5kKFN0cmlu
ZyBmaWxlbmFtZSwgU3RyaW5nIGNvbnRlbnQpCisKKyAgICBBdHRhY2hCb3R0b20oKQorICAgIEF0
dGFjaFJpZ2h0KCkKKyAgICBBdHRhY2hMZWZ0KCkKKyAgICBEZXRhY2goKQorCisgICAgQXR0YWNo
QXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKKworICAgIFNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKKyAgICBTZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVu
c2lnbmVkIHdpZHRoKQorCisgICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KQorCisgICAgU3RhcnRXaW5kb3dEcmFnKCkKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2ZlYTE1ZWU2NTdkM2U1YjI2NGJlYzhjYWY3ZGI3YjdmNjUzNTRkNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JV
dGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgorCisjaW5jbHVkZSAi
QVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiBI
YXNoTWFwPFdlYlBhZ2VQcm94eSosIHVuc2lnbmVkPiBQYWdlTGV2ZWxNYXA7CisKK3N0YXRpYyBQ
YWdlTGV2ZWxNYXAmIHBhZ2VMZXZlbE1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFBhZ2VMZXZlbE1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3Vuc2lnbmVkIGluc3Bl
Y3RvckxldmVsRm9yUGFnZShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpIHsK
KyAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gcGFnZUxldmVsTWFwKCkuZmluZChwYWdlKTsKKyAg
ICAgICAgaWYgKGZpbmRSZXN1bHQgIT0gcGFnZUxldmVsTWFwKCkuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUgKyAxOworICAgIH0KKworICAgIHJldHVybiAxOwor
fQorCitTdHJpbmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVBy
b3h5KiBwYWdlKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJfX1dlYkluc3BlY3RvclBhZ2VH
cm91cExldmVsIiwgaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKHBhZ2UpLCAiX18iKTsKK30KKwordm9p
ZCB0cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlLCBXZWJQYWdl
UHJveHkqIGluc3BlY3RlZFBhZ2UpCit7CisgICAgcGFnZUxldmVsTWFwKCkuc2V0KGluc3BlY3Rv
clBhZ2UsIGluc3BlY3RvckxldmVsRm9yUGFnZShpbnNwZWN0ZWRQYWdlKSk7Cit9CisKK3ZvaWQg
dW50cmFja0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5KiBpbnNwZWN0b3JQYWdlKQoreworICAg
IHBhZ2VMZXZlbE1hcCgpLnJlbW92ZShpbnNwZWN0b3JQYWdlKTsKK30KKworc3RhdGljIFdlYlBy
b2Nlc3NQb29sKiBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbDsKK3N0YXRpYyBXZWJQcm9jZXNz
UG9vbCogc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbDsKKworV2ViUHJvY2Vzc1Bvb2wmIGlu
c3BlY3RvclByb2Nlc3NQb29sKHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCkKK3sKKyAgICAvLyBI
YXZpbmcgb3VyIG93biBwcm9jZXNzIHBvb2wgcmVtb3ZlcyB1cyBmcm9tIHRoZSBtYWluIHByb2Nl
c3MgcG9vbCBhbmQKKyAgICAvLyBndWFyYW50ZWVzIG5vIHByb2Nlc3Mgc2hhcmluZyBmb3Igb3Vy
IHVzZXIgaW50ZXJmYWNlLgorICAgIFdlYlByb2Nlc3NQb29sKiYgcG9vbCA9IChpbnNwZWN0aW9u
TGV2ZWwgPT0gMSkgPyBzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCA6IHNfbmVzdGVkSW5zcGVj
dG9yUHJvY2Vzc1Bvb2w7CisgICAgaWYgKCFwb29sKSB7CisgICAgICAgIGF1dG8gY29uZmlndXJh
dGlvbiA9IEFQSTo6UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAg
cG9vbCA9ICZXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKGNvbmZpZ3VyYXRpb24uZ2V0KCkpLmxlYWtS
ZWYoKTsKKyAgICAgICAgLy8gRG8gbm90IGRlbGF5IHByb2Nlc3MgbGF1bmNoIGZvciBpbnNwZWN0
b3IgcGFnZXMgYXMgaW5zcGVjdG9yIHBhZ2VzIGRvIG5vdCBrbm93IGhvdyB0byB0cmFuc2l0aW9u
IGZyb20gYSB0ZXJtaW5hdGVkIHByb2Nlc3MuCisgICAgICAgIHBvb2wtPmRpc2FibGVEZWxheWVk
V2ViUHJvY2Vzc0xhdW5jaCgpOworICAgIH0KKyAgICByZXR1cm4gKnBvb2w7Cit9CisKK2Jvb2wg
aXNJbnNwZWN0b3JQcm9jZXNzUG9vbChXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCit7Cisg
ICAgcmV0dXJuIChzX21haW5JbnNwZWN0b3JQcm9jZXNzUG9vbCAmJiBzX21haW5JbnNwZWN0b3JQ
cm9jZXNzUG9vbCA9PSAmcHJvY2Vzc1Bvb2wpCisgICAgICAgIHx8IChzX25lc3RlZEluc3BlY3Rv
clByb2Nlc3NQb29sICYmIHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bvb2wgPT0gJnByb2Nlc3NQ
b29sKTsKK30KKworYm9vbCBpc0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5JiB3ZWJQYWdlKQor
eworICAgIHJldHVybiBwYWdlTGV2ZWxNYXAoKS5jb250YWlucygmd2ViUGFnZSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOWVhNzU4
OGNjMTk0MTJiZmJhZDhhMzlmNDI5MDVjMGU4NzgwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgKQEAg
LTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
UHJveHk7CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKKworLy8gVGhlIGluc3BlY3RvciBwYWdlIGdy
b3VwcyBhcmUgdXNlZCB0byBnaXZlIGRpZmZlcmVudCBwcmVmZXJlbmNlcyB0byBlYWNoCisvLyBp
bnNwZWN0b3IgbGV2ZWwgYnkgc2V0dGluZyBhIHBlci1sZXZlbCBwYWdlIGdyb3VwIGlkZW50aWZp
ZXIuCit1bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UoV2ViUGFnZVByb3h5Kik7CitTdHJp
bmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UoV2ViUGFnZVByb3h5Kik7Cit2
b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdlYlBh
Z2VQcm94eSogaW5zcGVjdGVkUGFnZSk7Cit2b2lkIHVudHJhY2tJbnNwZWN0b3JQYWdlKFdlYlBh
Z2VQcm94eSogaW5zcGVjdG9yUGFnZSk7CisKK1dlYlByb2Nlc3NQb29sJiBpbnNwZWN0b3JQcm9j
ZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOworYm9vbCBpc0luc3BlY3RvclByb2Nl
c3NQb29sKFdlYlByb2Nlc3NQb29sJik7Citib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJv
eHkmKTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9y
L1dlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmViYmRmODdhY2UxNzJkMjMwYTg1
YzYxZDA1YjY5MTBjZDcyNGIyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVidWdnYWJsZS5jcHAKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZURlYnVnZ2FibGUuaCIKKworI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgorI2luY2x1ZGUg
IldlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitX
ZWJQYWdlRGVidWdnYWJsZTo6V2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVByb3h5JiBwYWdlKQor
ICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9CisKK1N0cmluZyBXZWJQYWdlRGVidWdnYWJsZTo6bmFt
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX25hbWVPdmVycmlkZS5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuIG1fbmFtZU92ZXJyaWRlOworCisgICAgaWYgKCFtX3BhZ2UubWFpbkZyYW1lKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBtX3BhZ2UubWFpbkZyYW1lKCkt
PnRpdGxlKCk7Cit9CisKK1N0cmluZyBXZWJQYWdlRGVidWdnYWJsZTo6dXJsKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6YmxhbmtV
UkwoKS5zdHJpbmcoKTsKKworICAgIFN0cmluZyB1cmwgPSBtX3BhZ2UubWFpbkZyYW1lKCktPnVy
bCgpLnN0cmluZygpOworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RG
OjpibGFua1VSTCgpLnN0cmluZygpOworCisgICAgcmV0dXJuIHVybDsKK30KKworYm9vbCBXZWJQ
YWdlRGVidWdnYWJsZTo6aGFzTG9jYWxEZWJ1Z2dlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuaGFzTG9jYWxGcm9udGVuZCgpOworfQorCit2b2lk
IFdlYlBhZ2VEZWJ1Z2dhYmxlOjpjb25uZWN0KEZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCwgYm9v
bCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSkKK3sKKyAgICBt
X3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmNvbm5lY3RGcm9udGVuZChjaGFubmVsLCBpc0F1
dG9tYXRpY0Nvbm5lY3Rpb24sIGltbWVkaWF0ZWx5UGF1c2UpOworfQorCit2b2lkIFdlYlBhZ2VE
ZWJ1Z2dhYmxlOjpkaXNjb25uZWN0KEZyb250ZW5kQ2hhbm5lbCYgY2hhbm5lbCkKK3sKKyAgICBt
X3BhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZChjaGFubmVsKTsK
K30KKwordm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6ZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgbV9wYWdlLmluc3BlY3RvckNvbnRyb2xsZXIo
KS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZURlYnVnZ2FibGU6OnNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5nKQoreworICAgIG1fcGFn
ZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5kaWNhdGluZyhpbmRpY2F0aW5nKTsKK30KKwor
dm9pZCBXZWJQYWdlRGVidWdnYWJsZTo6c2V0TmFtZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBtX25hbWVPdmVycmlkZSA9IG5hbWU7CisgICAgdXBkYXRlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZURl
YnVnZ2FibGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlRGVi
dWdnYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmODQ4ZGUxMTZhNjE0NThkMTgzM2VhODA5ZmMwNmVmZDVl
ZTdhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZURlYnVnZ2FibGUuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3Bl
Y3Rpb25UYXJnZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3MgV2ViUGFnZURlYnVnZ2Fi
bGUgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0aW9uVGFyZ2V0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQ
YWdlRGVidWdnYWJsZSk7CitwdWJsaWM6CisgICAgV2ViUGFnZURlYnVnZ2FibGUoV2ViUGFnZVBy
b3h5Jik7CisgICAgfldlYlBhZ2VEZWJ1Z2dhYmxlKCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVj
dG9yOjpSZW1vdGVDb250cm9sbGFibGVUYXJnZXQ6OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIEluc3BlY3Rvcjo6UmVtb3RlQ29udHJvbGxhYmxlVGFyZ2V0OjpUeXBlOjpXZWJQYWdl
OyB9CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyB1cmwoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGhhc0xvY2FsRGVidWdnZXIoKSBjb25zdCBmaW5hbDsKKwor
ICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRv
bWF0aWNDb25uZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBm
aW5hbDsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKSBm
aW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCkgZmluYWw7CisKKyAg
ICBjb25zdCBTdHJpbmcmIG5hbWVPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZU92ZXJy
aWRlOyB9CisgICAgdm9pZCBzZXROYW1lT3ZlcnJpZGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZh
dGU6CisgICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7CisgICAgU3RyaW5nIG1fbmFtZU92ZXJyaWRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q09OVFJPTExBQkxFX1RBUkdFVChXZWJLaXQ6OldlYlBhZ2VEZWJ1Z2dhYmxlLCBXZWJQYWdlKTsK
KworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWVlMjhiZjcxNjM3NDM3MTQzMzIxNTE0OGFhMjBhNTE5
MjdhOGEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgor
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJhc2UuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworc3RhdGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNpb25hbFBhZ2VQ
cm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Ojp0b1RhcmdldElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Cit9CisKK1dlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fZnJvbnRlbmRSb3V0ZXIo
RnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQorICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigpKSkKK3sKKyAg
ICBhdXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9m
cm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7CisKKyAgICBt
X3RhcmdldEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7CisKKyAgICBtX2FnZW50cy5hcHBlbmQo
V1RGTW92ZSh0YXJnZXRBZ2VudCkpOworfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjppbml0KCkKK3sKKyAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIGNyZWF0ZUluc3Bl
Y3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6
UGFnZSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQo
KQoreworICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKKworICAgIG1fYWdlbnRzLmRpc2Nh
cmRWYWx1ZXMoKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzTG9j
YWxGcm9udGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0ZXItPmhhc0xv
Y2FsRnJvbnRlbmQoKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29u
bmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWws
IGJvb2wsIGJvb2wpCit7CisgICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVuZCA9ICFtX2Zy
b250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXItPmNv
bm5lY3RGcm9udGVuZChmcm9udGVuZENoYW5uZWwpOworCisgICAgaWYgKGNvbm5lY3RpbmdGaXJz
dEZyb250ZW5kKQorICAgICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
Jm1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKKwor
ICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0
ZXItPmZyb250ZW5kQ291bnQoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAg
ICBpZiAoaGFzTG9jYWxGcm9udGVuZCgpKQorICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9y
SW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVsJiBmcm9udGVu
ZENoYW5uZWwpCit7CisgICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZyb250ZW5kKGZy
b250ZW5kQ2hhbm5lbCk7CisKKyAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQgPSAh
bV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCk7CisgICAgaWYgKGRpc2Nvbm5lY3RpbmdM
YXN0RnJvbnRlbmQpCisgICAgICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RvckRlc3Ryb3llZCk7CisKKyAgICBtX3BhZ2Uu
ZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVu
ZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgaWYgKGRpc2Nv
bm5lY3RpbmdMYXN0RnJvbnRlbmQpCisgICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZv
cm1hdGlvbkRpZENoYW5nZSgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKQoreworICAgIC8vIEZJWE1FOiBIYW5k
bGUgYSBsb2NhbCBpbnNwZWN0b3IgY2xpZW50LgorCisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVy
LT5oYXNGcm9udGVuZHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTm90aWZ5IGFnZW50
cyBmaXJzdCwgc2luY2UgdGhleSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xpZW50LgorICAg
IG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246
Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisKKyAgICAvLyBEaXNjb25uZWN0IGFueSByZW1h
aW5pbmcgcmVtb3RlIGZyb250ZW5kcy4KKyAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0
QWxsRnJvbnRlbmRzKCk7CisKKyAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRD
b3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOworCisjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCisgICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlk
Q2hhbmdlKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKK30KKworI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCit7CisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgbV9wYWdlLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7CisjZWxzZQorICAgIGlmIChp
bmRpY2F0aW5nKQorICAgICAgICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fcGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOworI2VuZGlm
Cit9CisjZW5kaWYKKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5z
cGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSB0eXBlKQoreworICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dElkKQoreworICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7CisgICAgaWYg
KGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGFyZ2V0QWdl
bnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKKyAgICBtX3RhcmdldHMucmVtb3ZlKGl0
KTsKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0lu
c3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250
ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKK30KKworYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9u
dGVuZHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byogdGFyZ2V0ID0gbV90
YXJnZXRzLmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKKyAgICBBU1NFUlQodGFy
Z2V0KTsKKyAgICByZXR1cm4gdGFyZ2V0LT5pc1BhdXNlZCgpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92
aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBjYWxsYmFjaykKK3sKKyAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdl
dElEKHByb3Zpc2lvbmFsUGFnZSkpOworICAgIEFTU0VSVCh0YXJnZXQpOworICAgIHRhcmdldC0+
c2V0UmVzdW1lQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQ
YWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKK3sKKyAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFs
UGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOworfQorCit2b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShj
b25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQoreworICAgIGRlc3Ry
b3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Cit9CisKK3Zv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIG5ld1dlYlBhZ2VJRCkKK3sKKyAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7CisgICAgU3RyaW5nIG5ld0lEID0gV2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOworICAgIGF1dG8g
bmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOworICAgIEFTU0VSVChuZXdUYXJnZXQp
OworICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKKyAgICBtX3Rh
cmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOworCisg
ICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCBy
ZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCisgICAgLy8gd2UgZGVzdHJveSBldmVyeXRo
aW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMjAyOTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRo
ZSBjb21taXR0ZWQgcGFnZS4KKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1
ZXMoKSkKKyAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOwor
ICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVu
dGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+JiYgdGFyZ2V0KQoreworICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQoKnRhcmdl
dCk7CisgICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZSh0YXJn
ZXQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc4Y2FlZGYwYzBjZTgzNjc1NTY5NTAyZDE1MGZjYzQ0ZTVmOTg2OGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJJbnNwZWN0b3JUYXJnZXRQcm94eS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFnZW50UmVnaXN0cnkuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JU
YXJnZXRBZ2VudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKK2NsYXNz
IEJhY2tlbmREaXNwYXRjaGVyOworY2xhc3MgRnJvbnRlbmRDaGFubmVsOworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXIpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOworCisgICAgdm9pZCBp
bml0KCk7CisgICAgdm9pZCBwYWdlQ2xvc2VkKCk7CisKKyAgICBib29sIGhhc0xvY2FsRnJvbnRl
bmQoKSBjb25zdDsKKworICAgIHZvaWQgY29ubmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRl
bmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0luc3BlY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1l
ZGlhdGVseVBhdXNlID0gZmFsc2UpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb250ZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJik7CisgICAgdm9pZCBkaXNjb25uZWN0QWxsRnJvbnRlbmRz
KCk7CisKKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOworCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgdm9pZCBzZXRJ
bmRpY2F0aW5nKGJvb2wpOworI2VuZGlmCisKKyAgICB2b2lkIGNyZWF0ZUluc3BlY3RvclRhcmdl
dChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUp
OworICAgIHZvaWQgZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElk
KTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBTdHJpbmcm
IHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgYm9vbCBzaG91bGRQYXVz
ZUxvYWRpbmcoY29uc3QgUHJvdmlzaW9uYWxQYWdlUHJveHkmKSBjb25zdDsKKyAgICB2b2lkIHNl
dENvbnRpbnVlTG9hZGluZ0NhbGxiYWNrKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiwgV1RG
OjpGdW5jdGlvbjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBkaWRDcmVhdGVQcm92aXNpb25hbFBh
Z2UoUHJvdmlzaW9uYWxQYWdlUHJveHkmKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95UHJvdmlzaW9u
YWxQYWdlKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7CisgICAgdm9pZCBkaWRDb21taXRQ
cm92aXNpb25hbFBhZ2UoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb2xkV2ViUGFnZUlELCBXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciBuZXdXZWJQYWdlSUQpOworCitwcml2YXRlOgorICAgIHZvaWQg
YWRkVGFyZ2V0KHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4mJik7CisKKyAg
ICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKKyAgICBSZWY8SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
cj4gbV9mcm9udGVuZFJvdXRlcjsKKyAgICBSZWY8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBJbnNwZWN0b3I6OkFnZW50UmVnaXN0cnkgbV9h
Z2VudHM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRBZ2VudCogbV90YXJnZXRBZ2Vu
dDsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclRhcmdldFBy
b3h5Pj4gbV90YXJnZXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ2xpYi9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOWQ1MGRjMjg2YmQ1M2Q3N2U3OWFiYTk3
YzEwOGM4MTM2ZWIyN2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKworI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8u
aCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvclV0aWxzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNw
ZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAg
ICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNs
aWVudCwgdWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCkKKyAgICAgICAg
OiBtX3Byb3h5KFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGUoKSkKKyAgICAgICAgLCBt
X2luc3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCisgICAgICAgICwgbV9jb25uZWN0aW9u
SUQoY29ubmVjdGlvbklEKQorICAgICAgICAsIG1fdGFyZ2V0SUQodGFyZ2V0SUQpCisgICAgewor
ICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUlu
c3BlY3RvclByb3h5KCkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRy
KTsKKyAgICAgICAgbV9wcm94eS0+aW52YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZCgpCisgICAgeworICAgICAgICAvLyBGSVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM2
PjogdGhpcyBzaG91bGQgaW5mZXIgbW9yZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFy
Z2V0LgorICAgICAgICBSZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8gPSBB
UEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVhdGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKTsK
KyAgICAgICAgZGVidWdnYWJsZUluZm8tPnNldERlYnVnZ2FibGVUeXBlKEluc3BlY3Rvcjo6RGVi
dWdnYWJsZVR5cGU6OldlYlBhZ2UpOworICAgICAgICBtX3Byb3h5LT5sb2FkKFdURk1vdmUoZGVi
dWdnYWJsZUluZm8pLCBtX2luc3BlY3RvckNsaWVudC5iYWNrZW5kQ29tbWFuZHNVUkwoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNob3coKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldFRhcmdldE5hbWUoY29uc3QgQ1N0cmluZyYgbmFtZSkKKyAg
ICB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBtX3Byb3h5LT51cGRhdGVXaW5kb3dUaXRs
ZShuYW1lKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1fcHJveHktPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChtZXNzYWdlKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9C
YWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
aW5zcGVjdG9yQ2xpZW50LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1fY29ubmVjdGlvbklELCBtX3Rh
cmdldElELCBtZXNzYWdlKTsKKyAgICB9CisKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LmNsb3NlRnJvbUZyb250
ZW5kKG1fY29ubmVjdGlvbklELCBtX3RhcmdldElEKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
UmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBtX3Byb3h5OworICAgIFJlbW90ZUluc3BlY3Rv
ckNsaWVudCYgbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgdWludDY0X3QgbV9jb25uZWN0aW9uSUQ7
CisgICAgdWludDY0X3QgbV90YXJnZXRJRDsKK307CisKK2NvbnN0IFNvY2tldENvbm5lY3Rpb246
Ok1lc3NhZ2VIYW5kbGVycyYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjptZXNzYWdlSGFuZGxlcnMo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTb2NrZXRDb25uZWN0aW9uOjpN
ZXNzYWdlSGFuZGxlcnM+IG1lc3NhZ2VIYW5kbGVycyA9IFNvY2tldENvbm5lY3Rpb246Ok1lc3Nh
Z2VIYW5kbGVycyh7CisgICAgeyAiRGlkQ2xvc2UiLCBzdGQ6OnBhaXI8Q1N0cmluZywgU29ja2V0
Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7IHsgfSwKKyAgICAgICAgW10oU29ja2V0Q29u
bmVjdGlvbiYsIEdWYXJpYW50KiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1
dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxSZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0
YSk7CisgICAgICAgICAgICBjbGllbnQuY29ubmVjdGlvbkRpZENsb3NlKCk7CisgICAgICAgIH19
CisgICAgfSwKKyAgICB7ICJEaWRTZXR1cEluc3BlY3RvckNsaWVudCIsIHN0ZDo6cGFpcjxDU3Ry
aW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIihheSkiLAorICAgICAg
ICBbXShTb2NrZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3Rl
SW5zcGVjdG9yQ2xpZW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgR1JlZlB0cjxHVmFyaWFu
dD4gYmFja2VuZENvbW1hbmRzVmFyaWFudDsKKyAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFy
YW1ldGVycywgIihAYXkpIiwgJmJhY2tlbmRDb21tYW5kc1ZhcmlhbnQub3V0UHRyKCkpOworICAg
ICAgICAgICAgY2xpZW50LnNldEJhY2tlbmRDb21tYW5kcyhnX3ZhcmlhbnRfZ2V0X2J5dGVzdHJp
bmcoYmFja2VuZENvbW1hbmRzVmFyaWFudC5nZXQoKSkpOworICAgICAgICB9fQorICAgIH0sCisg
ICAgeyAiU2V0VGFyZ2V0TGlzdCIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9u
OjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0YSh0c3NzYikpIiwKKyAgICAgICAgW10oU29ja2V0Q29u
bmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVu
dCo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGd1aW50NjQgY29ubmVjdGlvbklEOworICAgICAg
ICAgICAgR1VuaXF1ZU91dFB0cjxHVmFyaWFudEl0ZXI+IGl0ZXI7CisgICAgICAgICAgICBnX3Zh
cmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodGEodHNzc2IpKSIsICZjb25uZWN0aW9uSUQsICZpdGVy
Lm91dFB0cigpKTsKKyAgICAgICAgICAgIHNpemVfdCB0YXJnZXRDb3VudCA9IGdfdmFyaWFudF9p
dGVyX25fY2hpbGRyZW4oaXRlci5nZXQoKSk7CisgICAgICAgICAgICBWZWN0b3I8UmVtb3RlSW5z
cGVjdG9yQ2xpZW50OjpUYXJnZXQ+IHRhcmdldExpc3Q7CisgICAgICAgICAgICB0YXJnZXRMaXN0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGFyZ2V0Q291bnQpOworICAgICAgICAgICAgZ3VpbnQ2
NCB0YXJnZXRJRDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHR5cGU7CisgICAgICAgICAgICBj
b25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgY29uc3QgY2hhciogdXJsOworICAgICAgICAg
ICAgZ2Jvb2xlYW4gaGFzTG9jYWxEZWJ1Z2dlcjsKKyAgICAgICAgICAgIHdoaWxlIChnX3Zhcmlh
bnRfaXRlcl9sb29wKGl0ZXIuZ2V0KCksICIodCZzJnMmc2IpIiwgJnRhcmdldElELCAmdHlwZSwg
Jm5hbWUsICZ1cmwsICZoYXNMb2NhbERlYnVnZ2VyKSkgeworICAgICAgICAgICAgICAgIGlmICgh
Z19zdHJjbXAwKHR5cGUsICJXZWIiKSB8fCAhZ19zdHJjbXAwKHR5cGUsICJKYXZhU2NyaXB0Iikp
CisgICAgICAgICAgICAgICAgICAgIHRhcmdldExpc3QudW5jaGVja2VkQXBwZW5kKHsgdGFyZ2V0
SUQsIHR5cGUsIG5hbWUsIHVybCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsaWVu
dC5zZXRUYXJnZXRMaXN0KGNvbm5lY3Rpb25JRCwgV1RGTW92ZSh0YXJnZXRMaXN0KSk7CisgICAg
ICAgIH19CisgICAgfSwKKyAgICB7ICJTZW5kTWVzc2FnZVRvRnJvbnRlbmQiLCBzdGQ6OnBhaXI8
Q1N0cmluZywgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUNhbGxiYWNrPiB7ICIodHRzKSIsCisg
ICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxS
ZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBndWludDY0IGNv
bm5lY3Rpb25JRCwgdGFyZ2V0SUQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOwor
ICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKHR0JnMpIiwgJmNvbm5lY3Rp
b25JRCwgJnRhcmdldElELCAmbWVzc2FnZSk7CisgICAgICAgICAgICBjbGllbnQuc2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIG1lc3NhZ2UpOworICAgICAgICB9
fQorICAgIH0KKyAgICB9KTsKKyAgICByZXR1cm4gbWVzc2FnZUhhbmRsZXJzOworfQorCitSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChjb25zdCBjaGFyKiBhZGRy
ZXNzLCB1bnNpZ25lZCBwb3J0LCBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCisg
ICAgOiBtX2hvc3RBbmRQb3J0KFN0cmluZzo6ZnJvbVVURjgoYWRkcmVzcykgKyAnOicgKyBTdHJp
bmc6Om51bWJlcihwb3J0KSkKKyAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAgLCBtX2Nh
bmNlbGxhYmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKK3sKKyAgICBHUmVmUHRy
PEdTb2NrZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRf
bmV3KCkpOworICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29ja2V0
Q2xpZW50LmdldCgpLCBtX2hvc3RBbmRQb3J0LnV0ZjgoKS5kYXRhKCksIDAsIG1fY2FuY2VsbGFi
bGUuZ2V0KCksCisgICAgICAgIFtdKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJv
cj4gZXJyb3I7CisgICAgICAgICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0
aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKEdf
U09DS0VUX0NMSUVOVChvYmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAg
ICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19F
UlJPUl9DQU5DRUxMRUQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1
dG8qIGNsaWVudCA9IHN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRh
KTsKKyAgICAgICAgICAgIGlmIChjb25uZWN0aW9uKQorICAgICAgICAgICAgICAgIGNsaWVudC0+
c2V0dXBDb25uZWN0aW9uKFNvY2tldENvbm5lY3Rpb246OmNyZWF0ZShXVEZNb3ZlKGNvbm5lY3Rp
b24pLCBtZXNzYWdlSGFuZGxlcnMoKSwgY2xpZW50KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlJlbW90ZUluc3BlY3RvckNsaWVudCBmYWlsZWQg
dG8gY29ubmVjdCB0byBpbnNwZWN0b3Igc2VydmVyOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAg
ICAgICAgICAgICAgICBjbGllbnQtPm1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqY2xpZW50
KTsKKyAgICAgICAgICAgIH0KKyAgICB9LCB0aGlzKTsKK30KKworUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50Ojp+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCkKK3sKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChtX2NhbmNlbGxhYmxlLmdldCgpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OnNldHVwQ29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJiBjb25uZWN0aW9uKQorewor
ICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoY29ubmVjdGlvbik7CisgICAgbV9zb2Nr
ZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXBJbnNwZWN0b3JDbGllbnQiLCBnX3Zhcmlh
bnRfbmV3KCIoQGF5KSIsIGdfdmFyaWFudF9uZXdfYnl0ZXN0cmluZyhJbnNwZWN0b3I6OmJhY2tl
bmRDb21tYW5kc0hhc2goKS5kYXRhKCkpKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xp
ZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgY2hhciogYmFja2VuZENvbW1hbmRzKQorewor
ICAgIGlmICghYmFja2VuZENvbW1hbmRzIHx8ICFiYWNrZW5kQ29tbWFuZHNbMF0pIHsKKyAgICAg
ICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShiYWNr
ZW5kQ29tbWFuZHMsIHN0cmxlbihiYWNrZW5kQ29tbWFuZHMpLCBiYXNlNjREYXRhKTsKKyAgICBt
X2JhY2tlbmRDb21tYW5kc1VSTCA9ICJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIiArIGJh
c2U2NERhdGE7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojpjb25uZWN0aW9uRGlk
Q2xvc2UoKQoreworICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIG1faW5zcGVjdG9yUHJveHlN
YXAuY2xlYXIoKTsKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBudWxscHRyOworICAgIG1fb2Jz
ZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQp
Cit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6
Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwg
dGFyZ2V0SURdIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVtb3RlSW5zcGVjdG9yUHJv
eHk+KCp0aGlzLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKTsKKyAgICB9KTsKKyAgICBpZiAoIWFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PnNob3coKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc29ja2V0Q29ubmVjdGlv
bi0+c2VuZE1lc3NhZ2UoIlNldHVwIiwgZ192YXJpYW50X25ldygiKHR0KSIsIGNvbm5lY3Rpb25J
RCwgdGFyZ2V0SUQpKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Cit9
CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZCh1aW50
NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgbV9zb2NrZXRDb25uZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2VuZE1lc3NhZ2VU
b0JhY2tlbmQiLCBnX3ZhcmlhbnRfbmV3KCIodHRzKSIsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQs
IG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVu
dDo6Y2xvc2VGcm9tRnJvbnRlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJn
ZXRJRCkKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JQcm94eU1hcC5jb250YWlucyhzdGQ6Om1h
a2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSkpOworICAgIG1fc29ja2V0Q29ubmVjdGlv
bi0+c2VuZE1lc3NhZ2UoIkZyb250ZW5kRGlkQ2xvc2UiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwg
Y29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3Zl
KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBW
ZWN0b3I8VGFyZ2V0PiYmIHRhcmdldExpc3QpCit7CisgICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0
cyB0byByZW1vdmUgdGhlbS4KKyAgICBWZWN0b3I8dWludDY0X3QsIDQ+IHRhcmdldHNUb1JlbW92
ZTsKKyAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb25UYXJnZXRQYWlyIDogbV9pbnNwZWN0b3JQcm94
eU1hcC5rZXlzKCkpIHsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb25UYXJnZXRQYWlyLmZpcnN0ICE9
IGNvbm5lY3Rpb25JRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDogdGFyZ2V0TGlzdCkg
eworICAgICAgICAgICAgaWYgKHRhcmdldC5pZCA9PSBjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNv
bmQpIHsKKyAgICAgICAgICAgICAgICBtX2luc3BlY3RvclByb3h5TWFwLmdldChjb25uZWN0aW9u
VGFyZ2V0UGFpciktPnNldFRhcmdldE5hbWUodGFyZ2V0Lm5hbWUpOworICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3Zl
LmFwcGVuZChjb25uZWN0aW9uVGFyZ2V0UGFpci5zZWNvbmQpOworICAgIH0KKyAgICBmb3IgKGF1
dG8gdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCisgICAgICAgIG1faW5zcGVjdG9yUHJveHlN
YXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKKworICAg
IG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsKKyAgICBt
X29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKK30KKwordm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQs
IHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGF1dG8gcHJv
eHkgPSBtX2luc3BlY3RvclByb3h5TWFwLmdldChzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQs
IHRhcmdldElEKSk7CisgICAgQVNTRVJUKHByb3h5KTsKKyAgICBpZiAoIXByb3h5KQorICAgICAg
ICByZXR1cm47CisgICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmc6OmZyb21V
VEY4KG1lc3NhZ2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWRlZTAyY2U1ZDZmMTg5YzkyMzRmMDc5ODcxYzczZDBkNTg5MTE0OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9nbGliL1JlbW90ZUlu
c3BlY3RvckNsaWVudC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L1NvY2tldENvbm5lY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
dHlwZWRlZiBzdHJ1Y3QgX0dDYW5jZWxsYWJsZSBHQ2FuY2VsbGFibGU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBSZW1vdGVJbnNw
ZWN0b3JQcm94eTsKK2NsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OworCitjbGFzcyBSZW1v
dGVJbnNwZWN0b3JPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVtb3RlSW5zcGVj
dG9yT2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVt
b3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xv
c2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsKK307CisKK2NsYXNzIFJlbW90ZUluc3Bl
Y3RvckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAg
ICBSZW1vdGVJbnNwZWN0b3JDbGllbnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9y
dCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImKTsKKyAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50
KCk7CisKKyAgICBzdHJ1Y3QgVGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVpbnQ2NF90
IGlkOworICAgICAgICBDU3RyaW5nIHR5cGU7CisgICAgICAgIENTdHJpbmcgbmFtZTsKKyAgICAg
ICAgQ1N0cmluZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZl
Y3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorICAg
IGNvbnN0IFN0cmluZyYgaG9zdEFuZFBvcnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RBbmRQb3J0
OyB9CisgICAgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmRDb21tYW5kc1VSTDsgfQorCisgICAgdm9pZCBpbnNwZWN0KHVpbnQ2NF90IGNv
bm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3Ry
aW5nJik7CisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQs
IHVpbnQ2NF90IHRhcmdldElEKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgU29ja2V0
Q29ubmVjdGlvbjo6TWVzc2FnZUhhbmRsZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKKyAgICB2b2lk
IHNldHVwQ29ubmVjdGlvbihSZWY8U29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAgdm9pZCBjb25u
ZWN0aW9uRGlkQ2xvc2UoKTsKKworICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNo
YXIqKTsKKyAgICB2b2lkIHNldFRhcmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0
b3I8VGFyZ2V0PiYmKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBj
b25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElELCBjb25zdCBjaGFyKik7CisKKyAgICBTdHJp
bmcgbV9ob3N0QW5kUG9ydDsKKyAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisgICAg
UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7CisgICAgUmVmUHRyPFNvY2tldENv
bm5lY3Rpb24+IG1fc29ja2V0Q29ubmVjdGlvbjsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4g
bV9jYW5jZWxsYWJsZTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90
YXJnZXRzOworICAgIEhhc2hNYXA8c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6
dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0
ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3IvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xMTA4OGRkMDhiMDYwMmQyZTk0ZTg1Nzk0NjA0YTIyNjI4Y2I0MjA1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eUd0ay5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKKworI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRv
dy5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZVdp
bmRvd1RpdGxlKGNvbnN0IENTdHJpbmcmIHRhcmdldE5hbWUpCit7CisgICAgaWYgKCFtX3dpbmRv
dykKKyAgICAgICAgcmV0dXJuOworICAgIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxl
KFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1fd2luZG93KSwgIXRhcmdldE5hbWUuaXNOdWxsKCkg
PyB0YXJnZXROYW1lLmRhdGEoKSA6IG51bGxwdHIpOworfQorCitzdGF0aWMgdm9pZCByZW1vdGVJ
bnNwZWN0b3JWaWV3RGVzdHJveWVkKFJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3JQ
cm94eSkKK3sKKyAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2VGcm9tQ3Jhc2goKTsKK30KKworV2Vi
UGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQoreworICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKKworICAgIGF1dG8g
cHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0Mi4i
LCAiV2ViS2l0Mi4iKTsKKyNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCisgICAgLy8gQWxsb3cg
ZGV2ZWxvcGVycyB0byBpbnNwZWN0IHRoZSBXZWIgSW5zcGVjdG9yIGluIGRlYnVnIGJ1aWxkcyB3
aXRob3V0IGNoYW5naW5nIHNldHRpbmdzLgorICAgIHByZWZlcmVuY2VzLT5zZXREZXZlbG9wZXJF
eHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2VzLT5zZXRMb2dzUGFnZU1lc3NhZ2Vz
VG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRpZgorICAgIGF1dG8gcGFnZUdyb3Vw
ID0gV2ViUGFnZUdyb3VwOjpjcmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBh
Z2UobnVsbHB0cikpOworCisgICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb246OmNyZWF0ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNz
UG9vbCgmaW5zcGVjdG9yUHJvY2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIp
KSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0
cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIo
KSk7CisgICAgbV93ZWJWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgq
cGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV93ZWJWaWV3LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0socmVtb3RlSW5zcGVjdG9yVmlld0Rlc3Ry
b3llZCksIHRoaXMpOworICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QobV93
ZWJWaWV3KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXcpKTsKKworICAgIG1f
d2luZG93ID0gd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KG51bGxwdHIpOworICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIobV93aW5kb3cpLCBtX3dlYlZpZXcpOworICAgIGd0a193
aWRnZXRfc2hvdyhtX3dlYlZpZXcpOworCisgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihH
X09CSkVDVChtX3dpbmRvdyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93aW5kb3cpKTsK
KyAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhtX3dpbmRvdykpOworCisgICAgcmV0
dXJuIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3dlYlZp
ZXcpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZy
b250ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgaWYgKG1fd2ViVmlldykgeworICAgICAgICBp
ZiAoYXV0byogd2ViUGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJ
RVdfQkFTRShtX3dlYlZpZXcpKSkKKyAgICAgICAgICAgIHdlYlBhZ2UtPmNsb3NlKCk7CisgICAg
fQorICAgIGlmIChtX3dpbmRvdykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2luZG93
KTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRl
KCkKK3sKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1Rv
RnJvbnQoKQoreworICAgIGlmIChtX3dpbmRvdykKKyAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50
KEdUS19XSU5ET1cobV93aW5kb3cpKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3RlRmlsZVJlcGxh
Y2VDb250ZW50c0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIEdGaWxlKiBmaWxlID0gR19GSUxFKHNv
dXJjZU9iamVjdCk7CisgICAgaWYgKCFnX2ZpbGVfcmVwbGFjZV9jb250ZW50c19maW5pc2goZmls
ZSwgcmVzdWx0LCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2VQcm94eSo+KHVzZXJEYXRhKTsKKyAgICBHVW5p
cXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUpKTsKKyAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5n
ZXQoKSksIHBhZ2UtPndlYlBhZ2VJRCgpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7
CisgICAgVU5VU0VEX1BBUkFNKGZvcmNlU2F2ZURpYWxvZyk7CisKKyAgICBHUmVmUHRyPEd0a0Zp
bGVDaG9vc2VyTmF0aXZlPiBkaWFsb2cgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9uYXRp
dmVfbmV3KCJTYXZlIEZpbGUiLAorICAgICAgICBHVEtfV0lORE9XKG1fd2luZG93KSwgR1RLX0ZJ
TEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2FuY2VsIikpOworCisgICAgR3RrRmls
ZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7CisgICAg
Z3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBU
UlVFKTsKKworICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNl
KSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAorICAgIC8vIGFzIHdlYi1pbnNwZWN0b3Iu
IFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAor
ICAgIC8vIHVuZm9ydHVuYXRlbHkuCisgICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsK
KyAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgorICAgIGd0a19maWxlX2Nob29zZXJf
c2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCku
ZGF0YSgpKTsKKworICAgIGlmIChndGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFM
T0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FDQ0VQVCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7CisgICAgQ1N0cmluZyBkYXRhU3RyaW5n
OworICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNv
bnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9GaXQoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOworCisgICAgY29uc3QgY2hhciogZGF0
YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9y
LmRhdGEoKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8g
ZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6ZSgpOworICAgIEdSZWZQdHI8R0Zp
bGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7
CisgICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0
YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCisgICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9E
RVNUSU5BVElPTiwgbnVsbHB0ciwgcmVtb3RlRmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBt
X2luc3BlY3RvclBhZ2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJl
Y3QmKQoreworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0
V2luZG93RHJhZygpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5m
byYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTk5YzQ0NjU3Njg4YTI4YWJhZTdhYTEwMWFiMjI2NzdiZDgxMTNhZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlDbGllbnQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnNwZWN0b3JQ
cm94eTsKKworY2xhc3MgV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgfldlYkluc3BlY3RvclByb3h5Q2xpZW50KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwg
Ym9vbCBvcGVuV2luZG93KFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYnJp
bmdUb0Zyb250KFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiB1cmwpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5JikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBkZXRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3BlY3RvclByb3h5JiwgdW5zaWdu
ZWQgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFjaGVkV2lkdGgo
V2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCB3aWR0aCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoV2ViSW5zcGVjdG9yUHJveHkmLCBib29sIGF2
YWlsYWJsZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmZGUzNDliYjcxOWEwZjVlZjIwYTdiYjZmZTM2N2Qy
MTdmZTQ3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApAQCAtMCwwICsxLDUzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9y
UHJveHkuaCIKKworI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJBUElOYXZp
Z2F0aW9uQWN0aW9uLmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLQ29udGV4
dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eUNs
aWVudC5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJX
ZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2Vy
dGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGlsaXRpZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0u
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgdm9pZCBpbnNwZWN0b3JWaWV3RGVzdHJveWVkKEd0a1dpZGdldCosIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3JQcm94
eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4odXNlckRhdGEpOworCisgICAgLy8g
SW5mb3JtIFdlYlByb2Nlc3MgYWJvdXQgd2ViaW5zcGVjdG9yIGNsb3N1cmUuIE5vdCBkb2luZyBz
bywKKyAgICAvLyByZXN1bHRzIGluIGZhaWx1cmUgb2Ygc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9m
IHdlYmluc3BlY3Rvci4KKyAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2UoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJbnNwZWN0b3JQ
cm94eUNsaWVudD4mJiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cpOworICAgIHdlYmtpdElu
c3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1JfV0lORE9XKG1faW5zcGVj
dG9yV2luZG93KSwgIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHkoKSA/IG1faW5zcGVjdGVk
VVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKK30KKworc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBleGNlZWRlZERhdGFiYXNlUXVvdGEoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBX
S1NlY3VyaXR5T3JpZ2luUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdSZWYsIHVuc2lnbmVkIGxv
bmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudERh
dGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBjb25zdCB2b2lk
KikKK3sKKyAgICByZXR1cm4gc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVz
YWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSAqIDEuMjUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJQ
cm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYklu
c3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIEFTU0VS
VCh3ZWJJbnNwZWN0b3JQcm94eSk7CisgICAgd2ViSW5zcGVjdG9yUHJveHktPmNsb3NlRm9yQ3Jh
c2goKTsKK30KKworc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihX
S1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb25S
ZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tUeXBlUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBu
YXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBBUEk6OkZyYW1lSW5mbyogc291cmNlRnJhbWUgPSB0b0lt
cGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7CisgICAgaWYgKHNvdXJjZUZy
YW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgeworICAgICAgICB0b0ltcGwobGlz
dGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0
IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PGNvbnN0
IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKHdlYkluc3BlY3Rv
clByb3h5KTsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gdG9JbXBs
KG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7CisKKyAgICAvLyBBbGxvdyBsb2FkaW5n
IG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgorICAgIGlmIChXZWJJbnNwZWN0b3JQcm94eTo6
aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkgeworICAgICAgICB0b0lt
cGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBpbiB0aGUgaW5zcGVjdG9y
J3MgcGFnZS4KKyAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKKworICAgIC8vIEFu
ZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIHdlYkluc3BlY3Rv
clByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwor
fQorCitzdGF0aWMgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnUoV0tQYWdlUmVm
IHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJvcG9zZWRNZW51UmVmLCBXS0FycmF5UmVmKiBuZXdNZW51
UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYsIFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAg
V0tNdXRhYmxlQXJyYXlSZWYgbWVudUl0ZW1zID0gV0tNdXRhYmxlQXJyYXlDcmVhdGUoKTsKKwor
ICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHByb3Bvc2VkTWVudVJlZik7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFdLQ29udGV4dE1l
bnVJdGVtUmVmIGNvbnRleHRNZW51SXRlbSA9IHN0YXRpY19jYXN0PFdLQ29udGV4dE1lbnVJdGVt
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgocHJvcG9zZWRNZW51UmVmLCBpKSk7CisgICAgICAg
IHN3aXRjaCAoV0tDb250ZXh0TWVudUl0ZW1HZXRUYWcoY29udGV4dE1lbnVJdGVtKSkgeworICAg
ICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAg
ICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAg
ICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAg
ICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6CisgICAg
ICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAg
ICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKG1lbnVJdGVtcywgY29udGV4dE1lbnVJdGVtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgKm5ld01lbnVSZWYgPSBtZW51SXRlbXM7Cit9CisKK1dlYlBh
Z2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkK
K3sKKyAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9y
Vmlldyk7CisKKyAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShT
dHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVMT1BFUl9N
T0RFKQorICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3Rv
ciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJl
bmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+
c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYK
KyAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyh7CisgICAgfSk7Cisg
ICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3Jv
dXBJZGVudGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKKworICAgIGF1dG8gcGFnZUNv
bmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKyAgICBwYWdl
Q29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3Bl
Y3Rpb25MZXZlbCgpKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHBy
ZWZlcmVuY2VzLnB0cigpKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBh
Z2VHcm91cC5wdHIoKSk7CisgICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RLX1dJREdFVCh3ZWJraXRX
ZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkpKTsKKyAgICBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yVmlldyksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JWaWV3KSk7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X2luc3BlY3RvclZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JWaWV3RGVzdHJv
eWVkKSwgdGhpcyk7CisKKyAgICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xpZW50ID0geworICAgICAg
ICB7IDIsIHRoaXMgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNh
dGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCisgICAgICAgIG51
bGxwdHIsIC8vIGNsb3NlUGFnZQorICAgICAgICBudWxscHRyLCAvLyB0YWtlRm9jdXMKKyAgICAg
ICAgbnVsbHB0ciwgLy8gZm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5mb2N1cworICAgICAg
ICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVu
SmF2YVNjcmlwdENvbmZpcm0KKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21w
dAorICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNUZXh0CisgICAgICAgIG51bGxwdHIsIC8v
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAg
bnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdp
dGhWMAorICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAorICAgICAgICBu
dWxscHRyLCAvLyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIGFy
ZVRvb2xiYXJzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFyc1Zpc2libGUK
KyAgICAgICAgbnVsbHB0ciwgLy8gaXNNZW51QmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAv
LyBzZXRNZW51QmFyVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBpc1N0YXR1c0JhclZpc2li
bGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJsZQorICAgICAgICBudWxs
cHRyLCAvLyBpc1Jlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRSZXNpemFibGUKKyAg
ICAgICAgbnVsbHB0ciwgLy8gZ2V0V2luZG93RnJhbWUsCisgICAgICAgIG51bGxwdHIsIC8vIHNl
dFdpbmRvd0ZyYW1lLAorICAgICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdworICAgICAgICBudWxscHRyLCAvLyBw
YWdlRGlkU2Nyb2xsCisgICAgICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gcnVuT3BlblBhbmVsLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIGhlYWRl
ckhlaWdodAorICAgICAgICBudWxscHRyLCAvLyBmb290ZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0
ciwgLy8gZHJhd0hlYWRlcgorICAgICAgICBudWxscHRyLCAvLyBkcmF3Rm9vdGVyCisgICAgICAg
IG51bGxwdHIsIC8vIHByaW50RnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gdW51c2VkCisgICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9G
aWxlSW5Eb3dubG9hZHNGb2xkZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0
SmF2YVNjcmlwdAorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVQYWdlCisgICAgICAgIG51bGxw
dHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50CisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lk
ZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIs
IC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYx
CisgICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgorICAgICAgICBudWxscHRyLCAv
LyBoaWRlQ29sb3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5C
dXR0b25DbGlja2VkCisgICAgfTsKKworICAgIFdLUGFnZU5hdmlnYXRpb25DbGllbnRWMCBuYXZp
Z2F0aW9uQ2xpZW50ID0geworICAgICAgICB7IDAsIHRoaXMgfSwKKyAgICAgICAgZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvblJlc3BvbnNlCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZv
clBsdWdpbkxvYWQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQcm92aXNpb25hbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25h
bE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0TmF2aWdhdGlvbgorICAg
ICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZEZhaWxOYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZhaWxQcm92aXNpb25h
bExvYWRJblN1YmZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaERvY3VtZW50TG9h
ZAorICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uCisgICAgICAg
IG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIs
IC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCisgICAgICAgIHdlYlByb2Nl
c3NEaWRDcmFzaCwKKyAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNyeXB0b01hc3RlcktleQor
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAg
bnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8v
IGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZFJlbW92ZU5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3QKKyAgICB9OworCisgICAgV0tQYWdlQ29udGV4dE1lbnVD
bGllbnRWMyBjb250ZXh0TWVudUNsaWVudCA9IHsKKyAgICAgICAgeyAzLCB0aGlzIH0sCisgICAg
ICAgIG51bGxwdHIsIC8vIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIGN1c3RvbUNvbnRleHRNZW51SXRlbVNl
bGVjdGVkCisgICAgICAgIG51bGxwdHIsIC8vIGNvbnRleHRNZW51RGlzbWlzc2VkCisgICAgICAg
IGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hv
d0NvbnRleHRNZW51CisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb250ZXh0TWVudQorICAgIH07
CisKKyAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3KSk7CisgICAgQVNTRVJU
KGluc3BlY3RvclBhZ2UpOworCisgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHRvQVBJKGluc3Bl
Y3RvclBhZ2UpLCAmdWlDbGllbnQuYmFzZSk7CisgICAgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25D
bGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xpZW50LmJhc2UpOworICAg
IFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudCh0b0FQSShpbnNwZWN0b3JQYWdlKSwgJmNv
bnRleHRNZW51Q2xpZW50LmJhc2UpOworCisgICAgcmV0dXJuIGluc3BlY3RvclBhZ2U7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKQor
eworICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+b3BlbldpbmRvdygqdGhpcykpCisgICAg
ICAgIHJldHVybjsKKworICAgIEd0a1dpZGdldCogaW5zcGVjdGVkVmlld1BhcmVudCA9IGd0a193
aWRnZXRfZ2V0X3RvcGxldmVsKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKKyAgICBp
ZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhpbnNwZWN0ZWRWaWV3
UGFyZW50KSkKKyAgICAgICAgaW5zcGVjdGVkVmlld1BhcmVudCA9IG51bGxwdHI7CisKKyAgICBB
U1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKKyAgICBtX2luc3BlY3RvcldpbmRvdyA9IHdlYmtp
dEluc3BlY3RvcldpbmRvd05ldyhpbnNwZWN0ZWRWaWV3UGFyZW50ID8gR1RLX1dJTkRPVyhpbnNw
ZWN0ZWRWaWV3UGFyZW50KSA6IG51bGxwdHIpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZpZXcpOworICAgIGd0a193
aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOworCisgICAgaWYgKCFtX2luc3BlY3RlZFVSTFN0
cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7CisK
KyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yV2luZG93
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3RvcldpbmRvdykpOworICAgIGd0
a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2luZG93KSk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3co
KQoreworICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOworICAgICAgICBtX2luc3BlY3Rv
clZpZXcgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPmRpZENsb3NlKCp0aGlzKTsKKworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewor
ICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBt
X2luc3BlY3RvcldpbmRvdyA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9p
c09wZW5pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVu
dC0+YnJpbmdUb0Zyb250KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrV2lkZ2V0
KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOworICAg
IGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5kb3cocGFyZW50KSkKKyAg
ICAgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cocGFyZW50KSk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1Jc0Zyb250KCkKK3sKKyAgICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0
X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7CisgICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25z
Y3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQorICAgICAgICByZXR1cm4gbV9pc1Zpc2libGUg
JiYgZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyhwYXJlbnQpKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2luc3BlY3RlZFVSTFN0cmluZyA9
IHVybDsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKCp0aGlzLCB1cmwpOworCisgICAgaWYgKG1faW5zcGVjdG9yV2luZG93KQorICAgICAg
ICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCit7CisgICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6
Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9NYWluLmh0bWwiKTsKK30KKwor
U3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisgICAg
cmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVy
ZmFjZS9UZXN0Lmh0bWwiKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JCYXNlVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0
L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlLyIpOworfQorCitEZWJ1Z2dhYmxlSW5mb0RhdGEgV2Vi
SW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQoreworICAgIC8vIEZJWE1F
IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVz
ZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCisgICAgcmV0dXJuIERlYnVnZ2FibGVJ
bmZvRGF0YTo6ZW1wdHkoKTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGVkX2hlaWdodChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSk7Cit9CisKK3Vu
c2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKCkK
K3sKKyAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX3dpZHRoKGluc3BlY3RlZFBh
Z2UoKS0+dmlld1dpZGdldCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1BdHRhY2goKQoreworICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9p
bnNwZWN0b3JWaWV3OworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICBndGtf
Y29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9yV2luZG93KSwgbV9pbnNw
ZWN0b3JWaWV3KTsKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2luZG93
KTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOworICAgIH0KKworICAgIC8vIFNldCBh
IGRlZmF1bHQgc2l6ZXMgYmFzZWQgb24gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC4KKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6ZSA9IDMwMDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGggPSA3NTA7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKKworICAgIGlm
IChtX2F0dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKKyAgICAgICAg
dW5zaWduZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dI
ZWlnaHQoKSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVk
U2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVu
c2lnbmVkIG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0
aCgpICogMyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6
Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwg
bWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50ICYmIG1f
Y2xpZW50LT5hdHRhY2goKnRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRXZWJW
aWV3QmFzZUFkZFdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdl
KCktPnZpZXdXaWRnZXQoKSksIG1faW5zcGVjdG9yVmlldywgbV9hdHRhY2htZW50U2lkZSk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKK3sKKyAgICBpZiAoIWluc3BlY3RlZFBhZ2UoKS0+
aGFzUnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHdGtX
aWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7CisgICAgaWYgKCFtX2NsaWVu
dCB8fCAhbV9jbGllbnQtPmRldGFjaCgqdGhpcykpIHsKKyAgICAgICAgLy8gRGV0YWNoIGlzIGNh
bGxlZCB3aGVuIG1faXNBdHRhY2hlZCBpcyB0cnVlLCBidXQgaXQgY291bGQgY2FsbGVkIGJlZm9y
ZQorICAgICAgICAvLyB0aGUgaW5zcGVjdG9yIGlzIG9wZW5lZCBpZiB0aGUgaW5zcGVjdG9yIGlz
IHNob3duL2Nsb3NlZCBxdWlja2x5LiBTbywKKyAgICAgICAgLy8gd2UgbWlnaHQgbm90IGhhdmUg
YSBwYXJlbnQgeWV0LgorICAgICAgICBpZiAoR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0
X2dldF9wYXJlbnQobV9pbnNwZWN0b3JWaWV3KSkKKyAgICAgICAgICAgIGd0a19jb250YWluZXJf
cmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgbV9pbnNwZWN0b3JWaWV3KTsKKyAgICB9CisK
KyAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxlLiBUaGlzIG1lYW5zIHRo
ZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAorICAgIC8vIGFuZCB3ZSBzaG91
bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRvdy4KKyAgICBpZiAoIW1f
aXNWaXNpYmxlKSB7CisgICAgICAgIC8vIFRoZSBpbnNwZWN0b3IgdmlldyB3aWxsIGJlIGRlc3Ry
b3llZCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIgcHJvY2VzcyB0byBjbG9z
ZSB0aGUKKyAgICAgICAgLy8gaW5zcGVjdG9yIGluIHRoaXMgY2FzZSwgc2luY2UgaXQncyBhbHJl
YWR5IGNsb3NlZC4KKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rl
c3Ryb3llZCksIHRoaXMpOworICAgICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgb3BlbigpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkK
K3sKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQoKnRoaXMs
IGhlaWdodCk7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0b3JWaWV3U2l6ZShXRUJL
SVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIGhlaWdodCk7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dX
aWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBpZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdl
QXR0YWNoZWRXaWR0aCgqdGhpcywgd2lkdGgpOworICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0SW5z
cGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVjdGVkUGFnZSgpLT52aWV3
V2lkZ2V0KCkpLCB3aWR0aCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
U2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRv
d0RyYWcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVS
ZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBHRmlsZSogZmlsZSA9IEdfRklM
RShzb3VyY2VPYmplY3QpOworICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNfZmluaXNo
KGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7CisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7CisgICAgcGFnZS0+
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0
KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIFVO
VVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOworCisgICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBn
dGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOworICAgIGlmICghV2ViQ29y
ZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRpYWxvZyA9IGFkb3B0R1Jl
ZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIsCisgICAgICAgIEdUS19X
SU5ET1cocGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FWRSwgIlNhdmUiLCAiQ2Fu
Y2VsIikpOworCisgICAgR3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBHVEtfRklMRV9DSE9PU0VS
KGRpYWxvZy5nZXQoKSk7CisgICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRfZG9fb3ZlcndyaXRlX2Nv
bmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKKworICAgIC8vIFNvbWUgaW5zcGVjdG9yIHZpZXdz
IChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNjaGVtZSwgc3VjaAorICAg
IC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24gdGhlIFVSTCBiZWluZyBh
IHZhbGlkIGZpbGU6Ly8vIFVSTAorICAgIC8vIHVuZm9ydHVuYXRlbHkuCisgICAgVVJMIHVybChV
UkwoKSwgc3VnZ2VzdGVkVVJMKTsKKyAgICAvLyBTdHJpcCBsZWFkaW5nIC8gY2hhcmFjdGVyLgor
ICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9vc2VyLCB1cmwucGF0aCgp
LnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmIChndGtfbmF0aXZlX2RpYWxv
Z19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0gR1RLX1JFU1BPTlNFX0FD
Q0VQVCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPGNoYXI+IGRhdGFWZWN0b3I7Cisg
ICAgQ1N0cmluZyBkYXRhU3RyaW5nOworICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJhc2U2NFZhbGlkYXRlUGFk
ZGluZykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGFWZWN0b3Iuc2hyaW5rVG9G
aXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGF0YVN0cmluZyA9IGNvbnRlbnQudXRmOCgpOwor
CisgICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmlu
Zy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKKyAgICBzaXplX3QgZGF0YUxlbmd0aCA9ICFk
YXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6IGRhdGFWZWN0b3Iuc2l6
ZSgpOworICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nl
cl9nZXRfZmlsZShjaG9vc2VyKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9n
ZXRfcGF0aChmaWxlLmdldCgpKSk7CisgICAgZ19maWxlX3JlcGxhY2VfY29udGVudHNfYXN5bmMo
ZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFsc2UsCisgICAgICAgIEdf
RklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwgZmlsZVJlcGxhY2VDb250
ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKK3sKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hBdmFpbGFiaWxpdHkoKnRo
aXMsIGF2YWlsYWJsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNwZWN0b3JXaW5k
b3cuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2d0ay9XZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0OTBmMGU2ZjMwZjgzY2M2NzRhZDg3NzEyMGQ5
YTg5YWE3Nzk1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5jcHAKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEluc3BlY3RvcldpbmRvdy5oIgorCisjaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
Kworc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgeworICAgIEd0a1dpbmRvdyBwYXJlbnQ7
CisKKyAgICBHdGtXaWRnZXQqIGhlYWRlckJhcjsKK307CisKK3N0cnVjdCBfV2ViS2l0SW5zcGVj
dG9yV2luZG93Q2xhc3MgeworICAgIEd0a1dpbmRvd0NsYXNzIHBhcmVudDsKK307CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0SW5zcGVjdG9yV2luZG93LCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvdywg
R1RLX1RZUEVfV0lORE9XKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19j
bGFzc19pbml0KFdlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzKikKK3sKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfaW5pdChXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdp
bmRvdykKK3sKKyAgICB3aW5kb3ctPmhlYWRlckJhciA9IGd0a19oZWFkZXJfYmFyX25ldygpOwor
ICAgIGd0a19oZWFkZXJfYmFyX3NldF90aXRsZShHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRl
ckJhciksIF8oIldlYiBJbnNwZWN0b3IiKSk7CisgICAgZ3RrX2hlYWRlcl9iYXJfc2V0X3Nob3df
Y2xvc2VfYnV0dG9uKEdUS19IRUFERVJfQkFSKHdpbmRvdy0+aGVhZGVyQmFyKSwgVFJVRSk7Cisg
ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGViYXIoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ctPmhl
YWRlckJhcik7CisgICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+aGVhZGVyQmFyKTsKK30KKwor
R3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3RrV2luZG93KiBwYXJlbnQpCit7
CisgICAgcmV0dXJuIEdUS19XSURHRVQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0lOU1BFQ1RP
Ul9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZFTCwgInRyYW5zaWVudC1mb3IiLCBw
YXJlbnQsCisgICAgICAgICJkZWZhdWx0LXdpZHRoIiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRp
YWxXaW5kb3dXaWR0aCwgImRlZmF1bHQtaGVpZ2h0IiwgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRp
YWxXaW5kb3dIZWlnaHQsIG51bGxwdHIpKTsKK30KKwordm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5k
b3dTZXRTdWJ0aXRsZShXZWJLaXRJbnNwZWN0b3JXaW5kb3cqIHdpbmRvdywgY29uc3QgY2hhciog
c3VidGl0bGUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfSU5TUEVDVE9SX1dJ
TkRPVyh3aW5kb3cpKTsKKworICAgIGd0a19oZWFkZXJfYmFyX3NldF9zdWJ0aXRsZShHVEtfSEVB
REVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIHN1YnRpdGxlKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYktpdEluc3BlY3Rv
cldpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViZGMyOGQxMDlmMDc5ZmEyNGEyNzgwOWIyYmNmZjM5ZmJh
ZmNmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8Z3RrL2d0ay5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfSU5TUEVDVE9SX1dJTkRPVyAgICAgICAgICAgICh3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9JTlNQRUNU
T1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3cpKQorI2RlZmluZSBXRUJLSVRfSVNfSU5T
UEVDVE9SX1dJTkRPVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BF
Q1RPUl9XSU5ET1dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9SX1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93
Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1Jf
V0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0lOU1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfSU5TUEVDVE9S
X1dJTkRPVywgV2ViS2l0SW5zcGVjdG9yV2luZG93Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0SW5zcGVjdG9yV2luZG93IFdlYktpdEluc3BlY3RvcldpbmRvdzsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFz
czsKKworR1R5cGUgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7CisKK0d0
a1dpZGdldCogd2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KTsKK3Zv
aWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93
KiwgY29uc3QgY2hhciogc3VidGl0bGUpOworCitHX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JI
aWdobGlnaHRWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk4MzkxYzQyMGM1NDU1OGM4ZWFlNzZmM2JjMTY2
ZWUxY2E0Y2UxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaW1wb3J0IDxVSUtpdC9V
SUtpdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgSGlnaGxpZ2h0OworfQorCitA
aW50ZXJmYWNlIFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldyA6IFVJVmlldyB7CisgICAgTlNNdXRh
YmxlQXJyYXkgKl9sYXllcnM7IC8vIENBU2hhcGVMYXllcnMuCit9CistICh2b2lkKXVwZGF0ZToo
Y29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQ7CitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9z
L1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjVmMGMwM2UzMzUyNzVl
NmJjMTYyMjIzMzM2NDk1YzJiMWUzOTUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KQEAg
LTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IldLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KworI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0
cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheS5oPgorCitA
aW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfbGF5ZXJz
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOworICAgIFtf
bGF5ZXJzIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfcmVt
b3ZlQWxsTGF5ZXJzCit7CisgICAgZm9yIChDQVNoYXBlTGF5ZXIgKmxheWVyIGluIF9sYXllcnMp
CisgICAgICAgIFtsYXllciByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW19sYXllcnMgcmVt
b3ZlQWxsT2JqZWN0c107Cit9CisKKy0gKHZvaWQpX2NyZWF0ZUxheWVyczooTlNVSW50ZWdlcilu
dW1MYXllcnMKK3sKKyAgICBpZiAoW19sYXllcnMgY291bnRdID09IG51bUxheWVycykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107CisKKyAgICBmb3IgKE5T
VUludGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgeworICAgICAgICBDQVNoYXBlTGF5
ZXIgKmxheWVyID0gW1tDQVNoYXBlTGF5ZXIgYWxsb2NdIGluaXRdOworICAgICAgICBbX2xheWVy
cyBhZGRPYmplY3Q6bGF5ZXJdOworICAgICAgICBbc2VsZi5sYXllciBhZGRTdWJsYXllcjpsYXll
cl07CisgICAgICAgIFtsYXllciByZWxlYXNlXTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGZp
bmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHAxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwMiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgZDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGQyLCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBpbnRlcnNlY3Rpb24pIAoreworICAgIC8vIERvIHRoZSBsaW5lcyBpbnRlcnNlY3Q/
CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludDsKKyAg
ICBpZiAoIWZpbmRJbnRlcnNlY3Rpb24ocDEsIHAyLCBkMSwgZDIsIHRlbXBvcmFyeUludGVyc2Vj
dGlvblBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSXMgdGhlIGludGVy
c2VjdGlvbiBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzIG9uIHRoZSBsaW5lPworICAgIGlmIChwMS54
KCkgPj0gcDIueCgpKSB7CisgICAgICAgIGlmICh0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54
KCkgPiBwMS54KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpIDwgcDIueCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0ZW1w
b3JhcnlJbnRlcnNlY3Rpb25Qb2ludC54KCkgPiBwMi54KCkgfHwgdGVtcG9yYXJ5SW50ZXJzZWN0
aW9uUG9pbnQueCgpIDwgcDEueCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAocDEueSgpID49IHAyLnkoKSkgeworICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJz
ZWN0aW9uUG9pbnQueSgpID4gcDEueSgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50Lnko
KSA8IHAyLnkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueSgpID4gcDIueSgpIHx8IHRlbXBv
cmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA8IHAxLnkoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpbnRlcnNlY3Rpb24gPSB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Q
b2ludDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gVGhpcyBxdWFkIGludGVyc2VjdGlvbiB3
b3JrcyBiZWNhdXNlIHRoZSB0d28gcXVhZHMgYXJlIGtub3duIHRvIGJlIGF0IHRoZSBzYW1lCisv
LyByb3RhdGlvbiBhbmQgY2xvY2t3aXNlLW5lc3MuCitzdGF0aWMgV2ViQ29yZTo6RmxvYXRRdWFk
IHF1YWRJbnRlcnNlY3Rpb24oV2ViQ29yZTo6RmxvYXRRdWFkIGJvdW5kcywgV2ViQ29yZTo6Rmxv
YXRRdWFkIHRvQ2xhbXApCit7CisgICAgLy8gUmVzdWx0aW5nIHBvaW50cy4KKyAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IHAxLCBwMiwgcDMsIHA0OworICAgIGJvb2wgY29udGFpbnNQb2ludDEgPSBm
YWxzZTsKKyAgICBib29sIGNvbnRhaW5zUG9pbnQyID0gZmFsc2U7CisgICAgYm9vbCBjb250YWlu
c1BvaW50MyA9IGZhbHNlOworICAgIGJvb2wgY29udGFpbnNQb2ludDQgPSBmYWxzZTsKKyAgICBi
b29sIGludGVyc2VjdEZvclBvaW50MSA9IGZhbHNlOworICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9p
bnQyID0gZmFsc2U7CisgICAgYm9vbCBpbnRlcnNlY3RGb3JQb2ludDMgPSBmYWxzZTsKKyAgICBi
b29sIGludGVyc2VjdEZvclBvaW50NCA9IGZhbHNlOworCisgICAgLy8gVG9wIC8gYm90dG9tIHZl
cnRpY2FsIGNsYW1waW5nLgorICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAx
KCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQxID0gdHJ1ZTsKKyAgICAgICAgcDEgPSB0b0Ns
YW1wLnAxKCk7CisgICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MSA9IGZpbmRJbnRl
cnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9D
bGFtcC5wMSgpLCB0b0NsYW1wLnA0KCksIHAxKSkpCisgICAgICAgIHAxID0gdG9DbGFtcC5wMSgp
OworCisgICAgaWYgKGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDIoKSkpIHsKKyAgICAg
ICAgY29udGFpbnNQb2ludDIgPSB0cnVlOworICAgICAgICBwMiA9IHRvQ2xhbXAucDIoKTsKKyAg
ICB9IGVsc2UgaWYgKCEoaW50ZXJzZWN0Rm9yUG9pbnQyID0gZmluZEludGVyc2VjdGlvbk9uTGlu
ZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJvdW5kcy5wMigpLCB0b0NsYW1wLnAyKCksIHRv
Q2xhbXAucDMoKSwgcDIpKSkKKyAgICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7CisKKyAgICBpZiAo
Ym91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5wMygpKSkgeworICAgICAgICBjb250YWluc1Bv
aW50MyA9IHRydWU7CisgICAgICAgIHAzID0gdG9DbGFtcC5wMygpOworICAgIH0gZWxzZSBpZiAo
IShpbnRlcnNlY3RGb3JQb2ludDMgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50
cyhib3VuZHMucDQoKSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDIoKSwgdG9DbGFtcC5wMygpLCBw
MykpKQorICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKKworICAgIGlmIChib3VuZHMuY29udGFp
bnNQb2ludCh0b0NsYW1wLnA0KCkpKSB7CisgICAgICAgIGNvbnRhaW5zUG9pbnQ0ID0gdHJ1ZTsK
KyAgICAgICAgcDQgPSB0b0NsYW1wLnA0KCk7CisgICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZv
clBvaW50NCA9IGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wNCgp
LCBib3VuZHMucDMoKSwgdG9DbGFtcC5wMSgpLCB0b0NsYW1wLnA0KCksIHA0KSkpCisgICAgICAg
IHA0ID0gdG9DbGFtcC5wNCgpOworCisgICAgLy8gSWYgb25seSBvbmUgb2YgdGhlIHBvaW50cyBp
bnRlcnNlY3RlZCBvbiBlaXRoZXIgdGhlIHRvcCBvciBib3R0b20gbGluZSB0aGVuIHdlCisgICAg
Ly8gY2FuIGNsYW1wIHRoZSBvdGhlciBwb2ludCBvbiB0aGF0IGxpbmUgdG8gdGhlIGNvcm5lciBv
ZiB0aGUgYm91bmRzLgorICAgIGlmICghY29udGFpbnNQb2ludDEgJiYgaW50ZXJzZWN0Rm9yUG9p
bnQyICYmICFpbnRlcnNlY3RGb3JQb2ludDEpIHsKKyAgICAgICAgY29udGFpbnNQb2ludDEgPSB0
cnVlOworICAgICAgICBwMSA9IGJvdW5kcy5wMSgpOworICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5z
UG9pbnQyICYmIGludGVyc2VjdEZvclBvaW50MSAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQyKSB7Cisg
ICAgICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKKyAgICAgICAgcDIgPSBib3VuZHMucDIoKTsK
KyAgICB9CisgICAgaWYgKCFjb250YWluc1BvaW50NCAmJiBpbnRlcnNlY3RGb3JQb2ludDMgJiYg
IWludGVyc2VjdEZvclBvaW50NCkgeworICAgICAgICBjb250YWluc1BvaW50NCA9IHRydWU7Cisg
ICAgICAgIHA0ID0gYm91bmRzLnA0KCk7CisgICAgfSBlbHNlIGlmICghY29udGFpbnNQb2ludDMg
JiYgaW50ZXJzZWN0Rm9yUG9pbnQ0ICYmICFpbnRlcnNlY3RGb3JQb2ludDMpIHsKKyAgICAgICAg
Y29udGFpbnNQb2ludDMgPSB0cnVlOworICAgICAgICBwMyA9IGJvdW5kcy5wMygpOworICAgIH0K
KworICAgIC8vIE5vdyB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBob3Jpem9udGFsIGNsYW1waW5n
IGZvciB1bmFkanVzdGVkIHBvaW50cy4KKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQyICYmICFpbnRl
cnNlY3RGb3JQb2ludDIpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9p
bnRzKGJvdW5kcy5wMigpLCBib3VuZHMucDMoKSwgcDEsIHAyLCBwMik7CisgICAgaWYgKCFjb250
YWluc1BvaW50MyAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKQorICAgICAgICBmaW5kSW50ZXJzZWN0
aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCksIHA0LCBwMywg
cDMpOworICAgIGlmICghY29udGFpbnNQb2ludDEgJiYgIWludGVyc2VjdEZvclBvaW50MSkKKyAg
ICAgICAgZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAxKCksIGJv
dW5kcy5wNCgpLCBwMSwgcDIsIHAxKTsKKyAgICBpZiAoIWNvbnRhaW5zUG9pbnQ0ICYmICFpbnRl
cnNlY3RGb3JQb2ludDQpCisgICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9p
bnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDQoKSwgcDQsIHAzLCBwNCk7CisKKyAgICByZXR1cm4g
V2ViQ29yZTo6RmxvYXRRdWFkKHAxLCBwMiwgcDMsIHA0KTsKK30KKworc3RhdGljIHZvaWQgbGF5
ZXJQYXRoV2l0aEhvbGUoQ0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRR
dWFkJiBvdXRlclF1YWQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVhZCYgaG9sZVF1YWQpCit7Cisg
ICAgLy8gTm90aGluZyB0byBzaG93LgorICAgIGlmIChvdXRlclF1YWQgPT0gaG9sZVF1YWQgfHwg
aG9sZVF1YWQuY29udGFpbnNRdWFkKG91dGVyUXVhZCkpIHsKKyAgICAgICAgbGF5ZXIucGF0aCA9
IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIG5l
Z2F0aXZlIG1hcmdpbiAvIHBhZGRpbmcgdGhlbiB0aGUgb3V0ZXIgYm94IG1pZ2h0IG5vdAorICAg
IC8vIGZ1bGx5IGNvbnRhaW4gdGhlIGhvbGUgYm94LiBJbiBzdWNoIGNhc2VzIHdlIHJlY2FsY3Vs
YXRlIHRoZSBob2xlIHRvCisgICAgLy8gYmUgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgdHdvIHF1
YWRzLgorICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBpbm5lckhvbGU7CisgICAgaWYgKG91dGVyUXVh
ZC5jb250YWluc1F1YWQoaG9sZVF1YWQpKQorICAgICAgICBpbm5lckhvbGUgPSBob2xlUXVhZDsK
KyAgICBlbHNlCisgICAgICAgIGlubmVySG9sZSA9IHF1YWRJbnRlcnNlY3Rpb24ob3V0ZXJRdWFk
LCBob2xlUXVhZCk7CisKKyAgICAvLyBDbG9ja3dpc2UgaW5zaWRlIHJlY3QgKGhvbGUpLCBDb3Vu
dGVyLUNsb2Nrd2lzZSBvdXRzaWRlIHJlY3QgKGZpbGwpLgorICAgIENHTXV0YWJsZVBhdGhSZWYg
cGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKKyAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRo
LCAwLCBpbm5lckhvbGUucDEoKS54KCksIGlubmVySG9sZS5wMSgpLnkoKSk7CisgICAgQ0dQYXRo
QWRkTGluZVRvUG9pbnQocGF0aCwgMCwgaW5uZXJIb2xlLnAyKCkueCgpLCBpbm5lckhvbGUucDIo
KS55KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMygp
LngoKSwgaW5uZXJIb2xlLnAzKCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRo
LCAwLCBpbm5lckhvbGUucDQoKS54KCksIGlubmVySG9sZS5wNCgpLnkoKSk7CisgICAgQ0dQYXRo
TW92ZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAxKCkueCgpLCBvdXRlclF1YWQucDEoKS55
KCkpOworICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wNCgpLngo
KSwgb3V0ZXJRdWFkLnA0KCkueSgpKTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAw
LCBvdXRlclF1YWQucDMoKS54KCksIG91dGVyUXVhZC5wMygpLnkoKSk7CisgICAgQ0dQYXRoQWRk
TGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAyKCkueCgpLCBvdXRlclF1YWQucDIoKS55
KCkpOworICAgIGxheWVyLnBhdGggPSBwYXRoOworICAgIENHUGF0aFJlbGVhc2UocGF0aCk7Cit9
CisKK3N0YXRpYyB2b2lkIGxheWVyUGF0aChDQVNoYXBlTGF5ZXIgKmxheWVyLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFF1YWQmIG91dGVyUXVhZCkKK3sKKyAgICBDR011dGFibGVQYXRoUmVmIHBhdGgg
PSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CisgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwg
b3V0ZXJRdWFkLnAxKCkueCgpLCBvdXRlclF1YWQucDEoKS55KCkpOworICAgIENHUGF0aEFkZExp
bmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wNCgpLngoKSwgb3V0ZXJRdWFkLnA0KCkueSgp
KTsKKyAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDMoKS54KCks
IG91dGVyUXVhZC5wMygpLnkoKSk7CisgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwg
b3V0ZXJRdWFkLnAyKCkueCgpLCBvdXRlclF1YWQucDIoKS55KCkpOworICAgIGxheWVyLnBhdGgg
PSBwYXRoOworICAgIENHUGF0aFJlbGVhc2UocGF0aCk7Cit9CisKKy0gKHZvaWQpX2xheW91dEZv
ck5vZGVIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0IG9mZnNl
dDoodW5zaWduZWQpb2Zmc2V0Cit7CisgICAgQVNTRVJUKFtfbGF5ZXJzIGNvdW50XSA+PSBvZmZz
ZXQgKyA0KTsKKyAgICBBU1NFUlQoaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSA+PSBvZmZzZXQgKyA0
KTsKKyAgICBpZiAoW19sYXllcnMgY291bnRdIDwgb2Zmc2V0ICsgNCB8fCBoaWdobGlnaHQucXVh
ZHMuc2l6ZSgpIDwgb2Zmc2V0ICsgNCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0FTaGFwZUxh
eWVyICptYXJnaW5MYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0XTsKKyAgICBD
QVNoYXBlTGF5ZXIgKmJvcmRlckxheWVyID0gW19sYXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQg
KyAxXTsKKyAgICBDQVNoYXBlTGF5ZXIgKnBhZGRpbmdMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0
SW5kZXg6b2Zmc2V0ICsgMl07CisgICAgQ0FTaGFwZUxheWVyICpjb250ZW50TGF5ZXIgPSBbX2xh
eWVycyBvYmplY3RBdEluZGV4Om9mZnNldCArIDNdOworCisgICAgV2ViQ29yZTo6RmxvYXRRdWFk
IG1hcmdpblF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0XTsKKyAgICBXZWJDb3JlOjpGbG9h
dFF1YWQgYm9yZGVyUXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tvZmZzZXQgKyAxXTsKKyAgICBXZWJD
b3JlOjpGbG9hdFF1YWQgcGFkZGluZ1F1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMl07
CisgICAgV2ViQ29yZTo6RmxvYXRRdWFkIGNvbnRlbnRRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29m
ZnNldCArIDNdOworCisgICAgbWFyZ2luTGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvciho
aWdobGlnaHQubWFyZ2luQ29sb3IpOworICAgIGJvcmRlckxheWVyLmZpbGxDb2xvciA9IGNhY2hl
ZENHQ29sb3IoaGlnaGxpZ2h0LmJvcmRlckNvbG9yKTsKKyAgICBwYWRkaW5nTGF5ZXIuZmlsbENv
bG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQucGFkZGluZ0NvbG9yKTsKKyAgICBjb250ZW50
TGF5ZXIuZmlsbENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHQuY29udGVudENvbG9yKTsK
KworICAgIGxheWVyUGF0aFdpdGhIb2xlKG1hcmdpbkxheWVyLCBtYXJnaW5RdWFkLCBib3JkZXJR
dWFkKTsKKyAgICBsYXllclBhdGhXaXRoSG9sZShib3JkZXJMYXllciwgYm9yZGVyUXVhZCwgcGFk
ZGluZ1F1YWQpOworICAgIGxheWVyUGF0aFdpdGhIb2xlKHBhZGRpbmdMYXllciwgcGFkZGluZ1F1
YWQsIGNvbnRlbnRRdWFkKTsKKyAgICBsYXllclBhdGgoY29udGVudExheWVyLCBjb250ZW50UXVh
ZCk7Cit9CisKKy0gKHZvaWQpX2xheW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0Oihjb25zdCBXZWJD
b3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodAoreworICAgIGlmICghaGlnaGxpZ2h0LnF1YWRzLnNp
emUoKSkgeworICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IGhpZ2hsaWdodC5xdWFkcy5zaXpl
KCkgLyA0OworICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bm9kZUNvdW50ICogNF07CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpCisgICAgICAgIFtzZWxmIF9s
YXlvdXRGb3JOb2RlSGlnaGxpZ2h0OmhpZ2hsaWdodCBvZmZzZXQ6aSAqIDRdOworfQorCistICh2
b2lkKV9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SGlnaGxpZ2h0Jilo
aWdobGlnaHQKK3sKKyAgICBOU1VJbnRlZ2VyIG51bUxheWVycyA9IGhpZ2hsaWdodC5xdWFkcy5z
aXplKCk7CisgICAgaWYgKCFudW1MYXllcnMpIHsKKyAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExh
eWVyc107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBfY3JlYXRlTGF5ZXJz
Om51bUxheWVyc107CisKKyAgICBDR0NvbG9yUmVmIGNvbnRlbnRDb2xvciA9IGNhY2hlZENHQ29s
b3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBp
IDwgbnVtTGF5ZXJzOyArK2kpIHsKKyAgICAgICAgQ0FTaGFwZUxheWVyICpsYXllciA9IFtfbGF5
ZXJzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIGxheWVyLmZpbGxDb2xvciA9IGNvbnRlbnRD
b2xvcjsKKyAgICAgICAgbGF5ZXJQYXRoKGxheWVyLCBoaWdobGlnaHQucXVhZHNbaV0pOworICAg
IH0KK30KKworLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpaGlnaGxp
Z2h0Cit7CisgICAgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6
Ok5vZGUgfHwgaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SGlnaGxpZ2h0VHlwZTo6Tm9kZUxp
c3QpCisgICAgICAgIFtzZWxmIF9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDpoaWdobGlnaHRd
OworICAgIGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6
OlJlY3RzKQorICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6aGlnaGxpZ2h0
XTsKK30KKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JOb2Rl
U2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmJhNjk1ZTZiYWY0MGRjZWY5
OTcyODUxYWQzNmM5YmRhOTliODNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2du
aXplci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKworI2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplci5oPgorCitAaW50ZXJm
YWNlIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyIDogVUlHZXN0dXJlUmVj
b2duaXplcgorLSAoQ0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldzsKK0BlbmQK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
aW9zL1dLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJl
UmVjb2duaXplci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjdmZTdiY2NkYjZjODJmNDNkZWI4NTQ3MGI4Zjhi
ZDFiZGFjNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbQpAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
S0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oIgorCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKworI2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplclN1YmNsYXNz
Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBXS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplciB7CisgICAgUmV0YWluUHRyPFVJVG91Y2g+
IF90b3VjaDsKK30KKworLSAoQ0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldwor
eworICAgIHJldHVybiBbX3RvdWNoIGxvY2F0aW9uSW5WaWV3OnZpZXddOworfQorCistICh2b2lk
KV9wcm9jZXNzVG91Y2hlczooTlNTZXQgKil0b3VjaGVzIHN0YXRlOihVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGUpbmV3U3RhdGUKK3sKKyAgICBBU1NFUlQoX3RvdWNoKTsKKyAgICBpZiAoW3RvdWNo
ZXMgY29udGFpbnNPYmplY3Q6X3RvdWNoLmdldCgpXSkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IG5l
d1N0YXRlOworfQorCistICh2b2lkKXRvdWNoZXNCZWdhbjooTlNTZXQgKil0b3VjaGVzIHdpdGhF
dmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKHNlbGYuc3RhdGUgIT0gVUlHZXN0dXJl
UmVjb2duaXplclN0YXRlUG9zc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCgh
X3RvdWNoKTsKKyAgICBfdG91Y2ggPSBbdG91Y2hlcyBhbnlPYmplY3RdOworCisgICAgW3NlbGYg
X3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVn
YW5dOworfQorCistICh2b2lkKXRvdWNoZXNNb3ZlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVu
dDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMg
c3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdlZF07Cit9CisKKy0gKHZvaWQpdG91
Y2hlc0VuZGVkOihOU1NldCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKK3sK
KyAgICBbc2VsZiBfcHJvY2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGVFbmRlZF07Cit9CisKKy0gKHZvaWQpdG91Y2hlc0NhbmNlbGxlZDooTlNTZXQgKil0
b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2ZW50Cit7CisgICAgW3NlbGYgX3Byb2Nlc3NU
b3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkXTsK
K30KKworLSAodm9pZClyZXNldAoreworICAgIF90b3VjaCA9IG5pbDsKK30KKworQGVuZAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3RvclByb3h5TWFjLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRh
YmRlYjVmNmQwNjRjZTk0ZmE3YTJhNTMxMzE4YzRmOGFmN2Y3MDYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5TWFjLm1tCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorCisjaW1wb3J0ICJSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0
b3JVSU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXS0ZyYW1lSW5mby5oIgorI2ltcG9ydCAiV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uQWN0aW9uLmgiCisj
aW1wb3J0ICJXS05hdmlnYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW1wb3J0ICJXZWJQYWdlR3Jv
dXAuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8U2VjdXJpdHlJbnRlcmZh
Y2UvU0ZDZXJ0aWZpY2F0ZVBhbmVsLmg+CisjaW1wb3J0IDxTZWN1cml0eUludGVyZmFjZS9TRkNl
cnRpZmljYXRlVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCitAaW50ZXJmYWNlIFdLUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlPYmpDQWRhcHRlciA6IE5TT2JqZWN0IDxOU1dpbmRvd0RlbGVnYXRlLCBXS0luc3Bl
Y3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IHsKKyAgICBXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5KiBfaW5zcGVjdG9yUHJveHk7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSop
aW5zcGVjdG9yUHJveHk7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5T2JqQ0FkYXB0ZXIKKworLSAoTlNSZWN0KXdpbmRvdzooTlNXaW5kb3cgKil3aW5k
b3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93ICopc2hlZXQgdXNpbmdSZWN0OihOU1JlY3Qp
cmVjdAoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIHJldHVybiBOU01ha2VS
ZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQ
cm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFJlbW90ZVdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6OlJl
bW90ZVdlYkluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eQoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2luc3BlY3RvclBy
b3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClp
bnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXIKK3sKKyAgICBfaW5zcGVjdG9yUHJv
eHktPmNsb3NlRnJvbUNyYXNoKCk7Cit9CisKKy0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3Bl
Y3RvclZpZXdDb250cm9sbGVyCit7CisgICAgcmV0dXJuIF9pbnNwZWN0b3JQcm94eS0+aXNVbmRl
clRlc3QoKTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitXS1dlYlZpZXcgKlJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojp3ZWJWaWV3
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnNwZWN0b3JWaWV3LmdldCgpLndlYlZpZXc7Cit9
CisKK1dlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKK3sKKyAgICBtX29iakNBZGFwdGVyID0gYWRvcHROUyhb
W1dLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlciBhbGxvY10gaW5pdFdpdGhSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTp0aGlzXSk7CisKKyAgICBtX2luc3BlY3RvclZpZXcgPSBhZG9w
dE5TKFtbV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRQ
YWdlOm51bGxwdHJdKTsKKyAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm1f
b2JqQ0FkYXB0ZXIuZ2V0KCldOworCisgICAgbV93aW5kb3cgPSBXZWJJbnNwZWN0b3JQcm94eTo6
Y3JlYXRlRnJvbnRlbmRXaW5kb3coTlNaZXJvUmVjdCwgV2ViSW5zcGVjdG9yUHJveHk6Okluc3Bl
Y3Rpb25UYXJnZXRUeXBlOjpSZW1vdGUpOworICAgIFttX3dpbmRvdyBzZXREZWxlZ2F0ZTptX29i
akNBZGFwdGVyLmdldCgpXTsKKyAgICBbbV93aW5kb3cgc2V0RnJhbWVBdXRvc2F2ZU5hbWU6QCJX
S1JlbW90ZVdlYkluc3BlY3RvcldpbmRvd0ZyYW1lIl07CisKKyAgICBOU1ZpZXcgKmNvbnRlbnRW
aWV3ID0gbV93aW5kb3cuZ2V0KCkuY29udGVudFZpZXc7CisgICAgW3dlYlZpZXcoKSBzZXRGcmFt
ZTpjb250ZW50Vmlldy5ib3VuZHNdOworICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3OndlYlZp
ZXcoKV07CisKKyAgICByZXR1cm4gd2ViVmlldygpLT5fcGFnZS5nZXQoKTsKK30KKwordm9pZCBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRv
dygpCit7CisgICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgIFttX3dpbmRvdyBzZXREZWxlZ2F0
ZTpuaWxdOworICAgICAgICBbbV93aW5kb3cgY2xvc2VdOworICAgICAgICBtX3dpbmRvdyA9IG5p
bDsKKyAgICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3KSB7CisgICAgICAgIFttX2luc3Bl
Y3RvclZpZXcuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3
ID0gbmlsOworICAgIH0KKworICAgIGlmIChtX29iakNBZGFwdGVyKQorICAgICAgICBtX29iakNB
ZGFwdGVyID0gbmlsOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVJlc2V0U3RhdGUoKQoreworICAgIFtOU1dpbmRvdyByZW1vdmVGcmFtZVVzaW5nTmFtZTpbbV93
aW5kb3cgZnJhbWVBdXRvc2F2ZU5hbWVdXTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIFttX3dpbmRvdyBtYWtlS2V5QW5k
T3JkZXJGcm9udDpuaWxdOworICAgIFttX3dpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6d2ViVmll
dygpXTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7CisgICAgLy8gRklYTUU6IFNoYXJl
IHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCisKKyAgICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5p
c0VtcHR5KCkpOworICAgIAorICAgIE5TVVJMICpwbGF0Zm9ybVVSTCA9IG1fc3VnZ2VzdGVkVG9B
Y3R1YWxVUkxNYXAuZ2V0KHN1Z2dlc3RlZFVSTCkuZ2V0KCk7CisgICAgaWYgKCFwbGF0Zm9ybVVS
TCkgeworICAgICAgICBwbGF0Zm9ybVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnN1Z2dlc3Rl
ZFVSTF07CisgICAgICAgIC8vIFRoZSB1c2VyIG11c3QgY29uZmlybSBuZXcgZmlsZW5hbWVzIGJl
Zm9yZSB3ZSBjYW4gc2F2ZSB0byB0aGVtLgorICAgICAgICBmb3JjZVNhdmVEaWFsb2cgPSB0cnVl
OworICAgIH0KKyAgICAKKyAgICBBU1NFUlQocGxhdGZvcm1VUkwpOworICAgIGlmICghcGxhdGZv
cm1VUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE5lY2Vzc2FyeSBmb3IgdGhlIGJsb2Nr
IGJlbG93LgorICAgIFN0cmluZyBzdWdnZXN0ZWRVUkxDb3B5ID0gc3VnZ2VzdGVkVVJMOworICAg
IFN0cmluZyBjb250ZW50Q29weSA9IGNvbnRlbnQ7CisKKyAgICBhdXRvIHNhdmVUb1VSTCA9IF4o
TlNVUkwgKmFjdHVhbFVSTCkgeworICAgICAgICBBU1NFUlQoYWN0dWFsVVJMKTsKKworICAgICAg
ICBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLnNldChzdWdnZXN0ZWRVUkxDb3B5LCBhY3R1YWxV
UkwpOworCisgICAgICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CisgICAgICAgICAgICBWZWN0b3I8
Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudENvcHksIG91
dCwgQmFzZTY0VmFsaWRhdGVQYWRkaW5nKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhQ29udGVudCA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6b3V0LmRhdGEoKSBsZW5ndGg6b3V0LnNpemUoKV0pOworICAg
ICAgICAgICAgW2RhdGFDb250ZW50IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVT
XTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBbY29udGVudENvcHkgd3JpdGVUb1VSTDph
Y3R1YWxVUkwgYXRvbWljYWxseTpZRVMgZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmcgZXJy
b3I6TlVMTF07CisKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0
cmluZ10pLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICB9OworCisgICAgaWYg
KCFmb3JjZVNhdmVEaWFsb2cpIHsKKyAgICAgICAgc2F2ZVRvVVJMKHBsYXRmb3JtVVJMKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TU2F2ZVBhbmVsICpwYW5lbCA9IFtOU1NhdmVQ
YW5lbCBzYXZlUGFuZWxdOworICAgIHBhbmVsLm5hbWVGaWVsZFN0cmluZ1ZhbHVlID0gcGxhdGZv
cm1VUkwubGFzdFBhdGhDb21wb25lbnQ7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsZSBVUkwg
d2UndmUgYWxyZWFkeSBzYXZlZCB0aGlzIGZpbGUgdG8gYSBwYXRoIGFuZAorICAgIC8vIGNhbiBw
cm92aWRlIGEgZ29vZCBkaXJlY3RvcnkgdG8gc2hvdy4gT3RoZXJ3aXNlLCB1c2UgdGhlIHN5c3Rl
bSdzCisgICAgLy8gZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIGluaXRpYWwgZGlyZWN0b3J5IHRv
IHNob3cgaW4gdGhlIGRpYWxvZy4KKyAgICBpZiAocGxhdGZvcm1VUkwuaXNGaWxlVVJMKQorICAg
ICAgICBwYW5lbC5kaXJlY3RvcnlVUkwgPSBbcGxhdGZvcm1VUkwgVVJMQnlEZWxldGluZ0xhc3RQ
YXRoQ29tcG9uZW50XTsKKworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBeKE5TSW50ZWdl
ciByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VDYW5jZWwp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gTlNNb2RhbFJl
c3BvbnNlT0spOworICAgICAgICBzYXZlVG9VUkwocGFuZWwuVVJMKTsKKyAgICB9OworCisgICAg
TlNXaW5kb3cgKndpbmRvdyA9IG1fd2luZG93ID8gbV93aW5kb3cuZ2V0KCkgOiBbTlNBcHAga2V5
V2luZG93XTsKKyAgICBpZiAod2luZG93KQorICAgICAgICBbcGFuZWwgYmVnaW5TaGVldE1vZGFs
Rm9yV2luZG93OndpbmRvdyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cisg
ICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihbcGFuZWwgcnVuTW9kYWxdKTsKK30K
Kwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sKKyAgICAvLyBGSVhN
RTogU2hhcmUgd2l0aCBXZWJJbnNwZWN0b3JQcm94eU1hYy4KKworICAgIEFTU0VSVCghc3VnZ2Vz
dGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgUmV0YWluUHRyPE5TVVJMPiBhY3R1YWxVUkwg
PSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpOworICAgIC8vIERv
IG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNvbmZpcm1lZCB0aGlzIGZp
bGVuYW1lIGluIHNhdmUoKS4KKyAgICBpZiAoIWFjdHVhbFVSTCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVGb3JX
cml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9yOk5VTExdOworICAgIFtoYW5kbGUgc2Vl
a1RvRW5kT2ZGaWxlXTsKKyAgICBbaGFuZGxlIHdyaXRlRGF0YTpbY29udGVudCBkYXRhVXNpbmdF
bmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgIFtoYW5kbGUgY2xvc2VGaWxlXTsK
KworICAgIFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSA9IHdlYlZpZXcoKS0+X3BhZ2UuZ2V0
KCk7CisgICAgaW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBpbnNw
ZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBt
X3NoZWV0UmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICB3ZWJWaWV3KCktPl9wYWdlLT5zdGFydFdp
bmRvd0RyYWcoKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1P
cGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgW1tOU1dvcmtzcGFjZSBzaGFy
ZWRXb3Jrc3BhY2VdIG9wZW5VUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6dXJsXV07Cit9CisKK3Zv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0
IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIEFTU0VSVCghY2VydGlm
aWNhdGVJbmZvLmlzRW1wdHkoKSk7CisKKyAgICBSZXRhaW5QdHI8U0ZDZXJ0aWZpY2F0ZVBhbmVs
PiBjZXJ0aWZpY2F0ZVBhbmVsID0gYWRvcHROUyhbW1NGQ2VydGlmaWNhdGVQYW5lbCBhbGxvY10g
aW5pdF0pOworCisgICAgQVNTRVJUKG1fd2luZG93KTsKKyNpZiBIQVZFKFNFQ19UUlVTVF9TRVJJ
QUxJWkFUSU9OKQorICAgIFtjZXJ0aWZpY2F0ZVBhbmVsIGJlZ2luU2hlZXRGb3JXaW5kb3c6bV93
aW5kb3cuZ2V0KCkgbW9kYWxEZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0
SW5mbzpudWxscHRyIHRydXN0OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNob3dHcm91cDpZRVNd
OworI2Vsc2UKKyAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93Om1fd2lu
ZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVjdG9yOk5VTEwgY29udGV4dElu
Zm86bnVsbHB0ciBjZXJ0aWZpY2F0ZXM6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUluZm8uY2VydGlm
aWNhdGVDaGFpbigpIHNob3dHcm91cDpZRVNdOworI2VuZGlmCisKKyAgICAvLyBUaGlzIG11c3Qg
YmUgY2FsbGVkIGFmdGVyIHRoZSB0cnVzdCBwYW5lbCBoYXMgYmVlbiBkaXNwbGF5ZWQsIGJlY2F1
c2UgdGhlIGNlcnRpZmljYXRlVmlldyBkb2Vzbid0IGV4aXN0IGJlZm9yZWhhbmQuCisgICAgU0ZD
ZXJ0aWZpY2F0ZVZpZXcgKmNlcnRpZmljYXRlVmlldyA9IFtjZXJ0aWZpY2F0ZVBhbmVsIGNlcnRp
ZmljYXRlVmlld107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREaXNwbGF5VHJ1c3Q6WUVTXTsK
KyAgICBbY2VydGlmaWNhdGVWaWV3IHNldEVkaXRhYmxlVHJ1c3Q6Tk9dOworICAgIFtjZXJ0aWZp
Y2F0ZVZpZXcgc2V0RGlzcGxheURldGFpbHM6WUVTXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNl
dERldGFpbHNEaXNjbG9zZWQ6WUVTXTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9X
S0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGJkMDhm
ZjlkNDg3YzQwYjVlZGQxYjcxZTc4YzM5Mzc5YWEyZjQzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9s
bGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1w
b3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvTmFrZWRQdHIuaD4KKwor
I2lmIFBMQVRGT1JNKE1BQykKKworT0JKQ19DTEFTUyBXS1dlYlZpZXc7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JW
aWV3Q29udHJvbGxlckRlbGVnYXRlOworCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50
ZXJmYWNlIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgOiBOU09iamVjdAorCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFdLV2ViVmlldyAqd2ViVmlldzsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiBkZWxl
Z2F0ZTsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW5zcGVjdGVkUGFnZTooTmFrZWRQdHI8
V2ViS2l0OjpXZWJQYWdlUHJveHk+KWluc3BlY3RlZFBhZ2U7CisKKysgKEJPT0wpdmlld0lzSW5z
cGVjdG9yV2ViVmlldzooTlNWaWV3ICopdmlldzsKKworQGVuZAorCitAcHJvdG9jb2wgV0tJbnNw
ZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9p
ZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvckRpZENyYXNoOihXS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyICopaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7CistIChCT09MKWluc3BlY3Rv
clZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKKy0gKHZvaWQpaW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXI6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJv
bGxlciB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdzsKKy0gKHZvaWQpaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5V
TExfRU5ECisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkyNjNlMGZkNmU2YWZhNmJhN2I1YTE5ODU5ODk1NDRm
N2FhNzBlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQpAQCAtMCwwICsxLDI3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tJbnNwZWN0b3JWaWV3
Q29udHJvbGxlci5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJBUElOYXZpZ2F0
aW9uLmgiCisjaW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgiCisjaW1wb3J0ICJXS0ZyYW1lSW5mby5o
IgorI2ltcG9ydCAiV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldLTmF2aWdhdGlv
bkFjdGlvbi5oIgorI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldL
T3BlblBhbmVsUGFyYW1ldGVycy5oIgorI2ltcG9ydCAiV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCIK
KyNpbXBvcnQgIldLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tVSURlbGVnYXRl
UHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaCIKKyNp
bXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkluc3BlY3RvclByb3h5Lmgi
CisjaW1wb3J0ICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94
eS5oIgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKK0BpbnRlcmZhY2UgV0tJbnNwZWN0
b3JWaWV3Q29udHJvbGxlciAoKSA8V0tVSURlbGVnYXRlLCBXS05hdmlnYXRpb25EZWxlZ2F0ZSwg
V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdL
SW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgeworICAgIE5ha2VkUHRyPFdlYktpdDo6V2ViUGFnZVBy
b3h5PiBfaW5zcGVjdGVkUGFnZTsKKyAgICBSZXRhaW5QdHI8V0tJbnNwZWN0b3JXS1dlYlZpZXc+
IF93ZWJWaWV3OworICAgIFdlYWtPYmpDUHRyPGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVy
RGVsZWdhdGU+PiBfZGVsZWdhdGU7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEluc3Bl
Y3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PilpbnNwZWN0ZWRQYWdlCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICAvLyBUaGUgKGxvY2FsKSBpbnNwZWN0ZWQgcGFnZSBpcyBuaWwgaWYgdGhlIGNvbnRyb2xs
ZXIgaXMgaG9zdGluZyBhIFJlbW90ZSBXZWIgSW5zcGVjdG9yIHZpZXcuCisgICAgX2luc3BlY3Rl
ZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZGVhbGxvYworeworICAgIGlmIChfd2ViVmlldykgeworICAgICAgICBbX3dlYlZpZXcgc2V0VUlE
ZWxlZ2F0ZTpuaWxdOworICAgICAgICBbX3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOm5p
bF07CisgICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTpuaWxd
OworICAgICAgICBfd2ViVmlldyA9IG5pbDsKKyAgICB9CisKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+KWRlbGVnYXRl
Cit7CisgICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKK30KKworLSAoV0tX
ZWJWaWV3ICopd2ViVmlldworeworICAgIC8vIENvbnN0cnVjdCBsYXppbHkgc28gdGhlIGNsaWVu
dCBjYW4gc2V0IHRoZSBkZWxlZ2F0ZSBiZWZvcmUgdGhlIFdlYlZpZXcgaXMgY3JlYXRlZC4KKyAg
ICBpZiAoIV93ZWJWaWV3KSB7CisgICAgICAgIE5TUmVjdCBpbml0aWFsRnJhbWUgPSBOU01ha2VS
ZWN0KDAsIDAsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dXaWR0aCwg
V2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCk7CisgICAgICAg
IF93ZWJWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOmluaXRpYWxGcmFtZSBjb25maWd1cmF0aW9uOltzZWxmIGNvbmZpZ3VyYXRpb25dXSk7
CisgICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOnNlbGZdOworICAgICAgICBbX3dlYlZp
ZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOnNlbGZdOworICAgICAgICBbX3dlYlZpZXcgc2V0SW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfd2ViVmlldyBfc2V0QXV0
b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzOk5PXTsKKyAgICAgICAgW193ZWJWaWV3IF9z
ZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOllFU107CisgICAgICAgIFtfd2ViVmlldyBzZXRBdXRvcmVz
aXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOworICAg
IH0KKworICAgIHJldHVybiBfd2ViVmlldy5nZXQoKTsKK30KKworLSAodm9pZClzZXREZWxlZ2F0
ZTooaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAg
ICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAoV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAq
KWNvbmZpZ3VyYXRpb24KK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworCisgICAgV0tQcmVmZXJlbmNlcyAq
cHJlZmVyZW5jZXMgPSBjb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVuY2VzOworICAgIHByZWZl
cmVuY2VzLl9hbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMgPSBZRVM7CisgICAgW2NvbmZpZ3Vy
YXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOllFU107CisgICAgcHJl
ZmVyZW5jZXMuX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9IF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGlj
eUFsbG93QWxsOworICAgIHByZWZlcmVuY2VzLl9qYXZhU2NyaXB0UnVudGltZUZsYWdzID0gMDsK
KworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBBbGxvdyBkZXZlbG9wZXJzIHRvIGluc3BlY3QgdGhl
IFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhvdXQgY2hhbmdpbmcgc2V0dGluZ3Mu
CisgICAgcHJlZmVyZW5jZXMuX2RldmVsb3BlckV4dHJhc0VuYWJsZWQgPSBZRVM7CisgICAgcHJl
ZmVyZW5jZXMuX2xvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkID0gWUVTOwor
I2VuZGlmCisKKyAgICBwcmVmZXJlbmNlcy5fZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkID0gWUVT
OworCisgICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlckluc3BlY3RvcklzVW5kZXJUZXN0Oild
KSB7CisgICAgICAgIGlmIChbX2RlbGVnYXRlIGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVj
dG9ySXNVbmRlclRlc3Q6c2VsZl0pIHsKKyAgICAgICAgICAgIHByZWZlcmVuY2VzLl9oaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9IE5POworICAgICAgICAgICAgcHJlZmVyZW5j
ZXMuX3BhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkID0gTk87Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBbY29uZmlndXJhdGlvbiBzZXRQcm9jZXNzUG9vbDp3cmFw
cGVyKFdlYktpdDo6aW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2ViS2l0OjppbnNwZWN0b3JMZXZlbEZv
clBhZ2UoX2luc3BlY3RlZFBhZ2UpKSldOworICAgIFtjb25maWd1cmF0aW9uIF9zZXRHcm91cElk
ZW50aWZpZXI6V2ViS2l0OjppbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShfaW5z
cGVjdGVkUGFnZSldOworCisgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb24uYXV0b3JlbGVhc2UoKTsK
K30KKworKyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJWaWV3OihOU1ZpZXcgKil2aWV3Cit7Cisg
ICAgcmV0dXJuIFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dLSW5zcGVjdG9yV0tXZWJWaWV3IGNsYXNz
XV07Cit9CisKKy8vIE1BUks6IFdLVUlEZWxlZ2F0ZSBtZXRob2RzCisKKy0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZ2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6KHZvaWQgKF4pKENHUmVjdCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBpZiAoIV93ZWJW
aWV3LmdldCgpLndpbmRvdykKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ0dSZWN0WmVybyk7
CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihOU1JlY3RUb0NHUmVjdChbd2Vi
VmlldyBmcmFtZV0pKTsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBzZXRXaW5kb3dGcmFtZTooQ0dSZWN0KWZyYW1lCit7CisgICAgaWYgKCFfd2ViVmlldy5nZXQo
KS53aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIFtfd2ViVmlldy5nZXQoKS53aW5kb3cg
c2V0RnJhbWU6TlNSZWN0RnJvbUNHUmVjdChmcmFtZSkgZGlzcGxheTpZRVNdOworfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRl
cnM6KFdLT3BlblBhbmVsUGFyYW1ldGVycyAqKXBhcmFtZXRlcnMgaW5pdGlhdGVkQnlGcmFtZToo
V0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxO
U1VSTCAqPiAqVVJMcykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBOU09wZW5QYW5lbCAqb3Bl
blBhbmVsID0gW05TT3BlblBhbmVsIG9wZW5QYW5lbF07CisgICAgb3BlblBhbmVsLmFsbG93c011
bHRpcGxlU2VsZWN0aW9uID0gcGFyYW1ldGVycy5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbjsKKwor
ICAgIGF1dG8gcmVwb3J0U2VsZWN0ZWRGaWxlcyA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgeworICAg
ICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKQorICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIob3BlblBhbmVsLlVSTHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihuaWwpOworICAgIH07CisKKyAgICBpZiAoX3dlYlZpZXcuZ2V0KCku
d2luZG93KQorICAgICAgICBbb3BlblBhbmVsIGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzpfd2Vi
Vmlldy5nZXQoKS53aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6cmVwb3J0U2VsZWN0ZWRGaWxlc107
CisgICAgZWxzZQorICAgICAgICByZXBvcnRTZWxlY3RlZEZpbGVzKFtvcGVuUGFuZWwgcnVuTW9k
YWxdKTsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVE
YXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46KFdLU2VjdXJpdHlPcmlnaW4gKilzZWN1cml0
eU9yaWdpbiBjdXJyZW50UXVvdGE6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50UXVvdGEgY3Vy
cmVudE9yaWdpblVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudE9yaWdpblVzYWdlIGN1
cnJlbnREYXRhYmFzZVVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudFVzYWdlIGV4cGVj
dGVkVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3RlZFVzYWdlIGRlY2lzaW9uSGFuZGxl
cjoodm9pZCAoXikodW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSlkZWNpc2lvbkhhbmRsZXIK
K3sKKyAgICBkZWNpc2lvbkhhbmRsZXIoc3RkOjptYXg8dW5zaWduZWQgbG9uZyBsb25nPihleHBl
Y3RlZFVzYWdlLCBjdXJyZW50VXNhZ2UgKiAxLjI1KSk7Cit9CisKKy0gKE5TTWVudSAqKV93ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNvbnRleHRNZW51OihOU01lbnUgKiltZW51IGZvckVs
ZW1lbnQ6KF9XS0NvbnRleHRNZW51RWxlbWVudEluZm8gKillbGVtZW50Cit7CisgICAgZm9yIChO
U0ludGVnZXIgaSA9IG1lbnUubnVtYmVyT2ZJdGVtcyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIE5TTWVudUl0ZW0gKml0ZW0gPSBbbWVudSBpdGVtQXRJbmRleDppXTsKKyAgICAgICAgc3dp
dGNoIChpdGVtLnRhZykgeworICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbklt
YWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZy
YW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1l
ZGlhSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnQ29weUlt
YWdlVXJsVG9DbGlwYm9hcmQ6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnQ29w
eUltYWdlVG9DbGlwYm9hcmQ6CisgICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRMaW5rVG9EaXNrOgorICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkSW1hZ2VUb0Rpc2s6CisgICAgICAgICAgICBbbWVudSByZW1vdmVJdGVtQXRJbmRleDppXTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1lbnU7
Cit9CisKKy8vIE1BUks6IFdLTmF2aWdhdGlvbkRlbGVnYXRlIG1ldGhvZHMKKworLSAodm9pZCl3
ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGU6KFdLV2ViVmlldyAqKXdlYlZpZXcK
K3sKKyAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KV0pCisg
ICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFz
aDpzZWxmXTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRp
b25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xp
Y3kpKWRlY2lzaW9uSGFuZGxlcgoreworICAgIC8vIEFsbG93IG5vbi1tYWluIGZyYW1lcyB0byBu
YXZpZ2F0ZSBhbnl3aGVyZS4KKyAgICBpZiAoIW5hdmlnYXRpb25BY3Rpb24udGFyZ2V0RnJhbWUu
aXNNYWluRnJhbWUpIHsKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlv
blBvbGljeUFsbG93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEFsbG93IGxv
YWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYktpdDo6V2ViSW5z
cGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UobmF2aWdhdGlvbkFjdGlvbi5y
ZXF1ZXN0LlVSTCkpIHsKKyAgICAgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlv
blBvbGljeUFsbG93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFByZXZlbnQg
ZXZlcnl0aGluZyBlbHNlLgorICAgIGRlY2lzaW9uSGFuZGxlcihXS05hdmlnYXRpb25BY3Rpb25Q
b2xpY3lDYW5jZWwpOworICAgIAorICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGlu
c3BlY3RlZCBwYWdlLgorICAgIGlmIChfaW5zcGVjdGVkUGFnZSkKKyAgICAgICAgX2luc3BlY3Rl
ZFBhZ2UtPmxvYWRSZXF1ZXN0KG5hdmlnYXRpb25BY3Rpb24ucmVxdWVzdCk7Cit9CisKKy8vIE1B
Uks6IFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgbWV0aG9kcworCistICh2b2lkKWluc3Bl
Y3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJWaWV3Cit7Cisg
ICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3B0aW9uU2V0
PFdlYkNvcmU6OlJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0aW9uczsKKyAgICBpZiAoV2ViS2l0Ojps
aW5rZWRPbk9yQWZ0ZXIoV2ViS2l0OjpTREtWZXJzaW9uOjpGaXJzdFdpdGhFeHBpcmVkT25seVJl
bG9hZEJlaGF2aW9yKSkKKyAgICAgICAgcmVsb2FkT3B0aW9ucy5hZGQoV2ViQ29yZTo6UmVsb2Fk
T3B0aW9uOjpFeHBpcmVkT25seSk7CisKKyAgICBfaW5zcGVjdGVkUGFnZS0+cmVsb2FkKHJlbG9h
ZE9wdGlvbnMpOworfQorCistICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZEZyb21Pcmln
aW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIGlmICghX2luc3BlY3Rl
ZFBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIF9pbnNwZWN0ZWRQYWdlLT5yZWxvYWQoV2Vi
Q29yZTo6UmVsb2FkT3B0aW9uOjpGcm9tT3JpZ2luKTsKK30KKworLSAodm9pZClpbnNwZWN0b3JX
S1dlYlZpZXc6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsTW92ZVRvV2luZG93
OihOU1dpbmRvdyAqKW5ld1dpbmRvdworeworICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXI6
d2lsbE1vdmVUb1dpbmRvdzopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBpbnNwZWN0b3JWaWV3Q29u
dHJvbGxlcjpzZWxmIHdpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKK30KKworLSAodm9pZClp
bnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICop
d2ViVmlldworeworICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6
KV0pCisgICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEaWRNb3ZlVG9X
aW5kb3c6c2VsZl07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNwZWN0b3JX
S1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV0tJbnNw
ZWN0b3JXS1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTdlNzdjZmU3ZjI4NTljNDQ1YmQ0NWZmZmNi
Y2I5YzJkMTU2MjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlldy5oPgor
CisjaWYgUExBVEZPUk0oTUFDKQorCitAcHJvdG9jb2wgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxl
Z2F0ZTsKKworQGludGVyZmFjZSBXS0luc3BlY3RvcldLV2ViVmlldyA6IFdLV2ViVmlldworQHBy
b3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRl
PiBpbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZTsKK0BlbmQKKworQHByb3RvY29sIFdLSW5zcGVj
dG9yV0tXZWJWaWV3RGVsZWdhdGUKK0ByZXF1aXJlZAorLSAodm9pZClpbnNwZWN0b3JXS1dlYlZp
ZXdSZWxvYWQ6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsKKy0gKHZvaWQpaW5zcGVj
dG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJW
aWV3OworLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXc6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICop
d2ViVmlldyB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdzsKKy0gKHZvaWQp
aW5zcGVjdG9yV0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OihXS0luc3BlY3RvcldLV2ViVmlldyAq
KXdlYlZpZXc7CitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XS0luc3BlY3RvcldL
V2ViVmlldy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmZlZjRhMDFiYWYxM2FkNGZlNzFmOGE5ZDNkYzY1NDI1
OGE5Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQpAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvcldLV2ViVmlldy5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJXS0luc3BlY3RvclByaXZhdGVNYWMu
aCIKKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCitAaW1wbGVtZW50YXRpb24gV0tJbnNw
ZWN0b3JXS1dlYlZpZXcgeworICAgIFdlYWtPYmpDUHRyPGlkIDxXS0luc3BlY3RvcldLV2ViVmll
d0RlbGVnYXRlPj4gX2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOworfQorCistIChOU1JlY3Qp
X29wYXF1ZVJlY3RGb3JXaW5kb3dNb3ZlV2hlbkluVGl0bGViYXIKK3sKKyAgICAvLyBUaGlzIGNv
bnZpbmNlcyBBcHBLaXQgdG8gYWxsb3cgd2luZG93IG1vdmVzIHdoZW4gY2xpY2tpbmcgYW55d2hl
cmUgaW4gdGhlIHRpdGxlYmFyICh0b3AgMjJwdCkKKyAgICAvLyB3aGVuIHRoaXMgdmlldydzIGNv
bnRlbnRzIGNvdmVyIHRoZSBlbnRpcmUgd2luZG93J3MgY29udGVudHMsIGluY2x1ZGluZyB0aGUg
dGl0bGViYXIuCisgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Cit9CisKKy0gKE5TSW50ZWdlcil0YWcK
K3sKKyAgICByZXR1cm4gV0tJbnNwZWN0b3JWaWV3VGFnOworfQorCistIChpZCA8V0tJbnNwZWN0
b3JXS1dlYlZpZXdEZWxlZ2F0ZT4paW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUKK3sKKyAgICBy
ZXR1cm4gX2luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQor
CistICh2b2lkKXNldEluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlOihpZCA8V0tJbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfaW5zcGVjdG9yV0tXZWJWaWV3RGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworLSAoSUJBY3Rpb24pcmVsb2FkOihpZClzZW5kZXIKK3sK
KyAgICBbc2VsZi5pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdS
ZWxvYWQ6c2VsZl07Cit9CisKKy0gKElCQWN0aW9uKXJlbG9hZEZyb21PcmlnaW46KGlkKXNlbmRl
cgoreworICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlIGluc3BlY3RvcldLV2Vi
Vmlld1JlbG9hZEZyb21PcmlnaW46c2VsZl07Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9X
aW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Cit7CisgICAgW3N1cGVyIHZpZXdXaWxsTW92ZVRv
V2luZG93Om5ld1dpbmRvd107CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUg
aW5zcGVjdG9yV0tXZWJWaWV3OnNlbGYgd2lsbE1vdmVUb1dpbmRvdzpuZXdXaW5kb3ddOworfQor
CistICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBbc3VwZXIgdmlld0RpZE1vdmVU
b1dpbmRvd107CisgICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgaW5zcGVjdG9y
V0tXZWJWaWV3RGlkTW92ZVRvV2luZG93OnNlbGZdOworfQorCitAZW5kCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0
b3JQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9tYWMvV2Vi
SW5zcGVjdG9yUHJveHlNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJlNzI4ZDQzNWNhZjcwNTk2NTJhZDJi
M2Q5ZTIxNzE0NjdlYjBmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KQEAgLTAsMCArMSw4MDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiV0tJbnNwZWN0
b3JQcml2YXRlTWFjLmgiCisjaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCisj
aW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIK
KyNpbXBvcnQgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VHcm91
cC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRl
cm5hbC5oIgorI2ltcG9ydCAiX1dLSW5zcGVjdG9yV2luZG93LmgiCisjaW1wb3J0IDxTZWN1cml0
eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KKyNpbXBvcnQgPFNlY3VyaXR5SW50ZXJm
YWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5m
by5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorCitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciB3aW5kb3dTdHlsZU1hc2sgPSBOU1dp
bmRvd1N0eWxlTWFza1RpdGxlZCB8IE5TV2luZG93U3R5bGVNYXNrQ2xvc2FibGUgfCBOU1dpbmRv
d1N0eWxlTWFza01pbmlhdHVyaXphYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tSZXNpemFibGUgfCBO
U1dpbmRvd1N0eWxlTWFza0Z1bGxTaXplQ29udGVudFZpZXc7CisKKy8vIFRoZSB0aW1lIHdlIGtl
ZXAgb3VyIFdlYlZpZXcgYWxpdmUgYmVmb3JlIGNsb3NpbmcgaXQgYW5kIGl0cyBwcm9jZXNzLgor
Ly8gUmV1c2luZyB0aGUgV2ViVmlldyBpbXByb3ZlcyBzdGFydCB1cCB0aW1lIGZvciBwZW9wbGUg
dGhhdCBqdW1wIGluIGFuZCBvdXQgb2YgdGhlIEluc3BlY3Rvci4KK3N0YXRpYyBjb25zdCBTZWNv
bmRzIHdlYlZpZXdDbG9zZVRpbWVvdXQgeyAxX21pbiB9OworCitzdGF0aWMgdm9pZCoga1dpbmRv
d0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQgPSAma1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNl
cnZlckNvbnRleHQ7CisKK0BpbnRlcmZhY2UgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
ICgpIDxOU1dpbmRvd0RlbGVnYXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIHsK
KyAgICBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KiBfaW5zcGVjdG9yUHJveHk7Cit9CisKKy0g
KFdLSW5zcGVjdG9yUmVmKWluc3BlY3RvclJlZgoreworICAgIHJldHVybiB0b0FQSShfaW5zcGVj
dG9yUHJveHkpOworfQorCistIChfV0tJbnNwZWN0b3IgKilpbnNwZWN0b3IKK3sKKyAgICBpZiAo
X2luc3BlY3RvclByb3h5KQorICAgICAgICByZXR1cm4gd3JhcHBlcigqX2luc3BlY3RvclByb3h5
KTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNw
ZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKK3sK
KyAgICBBU1NFUlRfQVJHKGluc3BlY3RvclByb3h5LCBpbnNwZWN0b3JQcm94eSk7CisKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8v
IFVucmV0YWluZWQgdG8gYXZvaWQgYSByZWZlcmVuY2UgY3ljbGUuCisgICAgX2luc3BlY3RvclBy
b3h5ID0gaW5zcGVjdG9yUHJveHk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClp
bnZhbGlkYXRlCit7CisgICAgX2luc3BlY3RvclByb3h5ID0gbnVsbHB0cjsKK30KKworLSAoTlNS
ZWN0KXdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93
ICopc2hlZXQgdXNpbmdSZWN0OihOU1JlY3QpcmVjdAoreworICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCisgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRS
ZWN0KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKKy0gKHZvaWQpd2luZG93RGlkTW92ZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAg
ICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Cit9CisKKy0gKHZvaWQp
d2luZG93RGlkUmVzaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlm
IChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVE
aWRDaGFuZ2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2lu
c3BlY3RvclByb3h5LT5jbG9zZSgpOworfQorCistICh2b2lkKXdpbmRvd0RpZEVudGVyRnVsbFNj
cmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3Rv
clByb3h5KQorICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFu
Z2UoKTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoX2luc3BlY3RvclByb3h5KQorICAgICAgICBf
aW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKK30KKworLSAodm9p
ZClpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uCit7CisgICAgLy8gUmVzaXppbmcgdGhlIHZpZXdzIHdoaWxlIGluc2lkZSB0aGlzIG5vdGlm
aWNhdGlvbiBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyB3aGVuIGVudGVyaW5nCisgICAgLy8gb3Ig
ZXhpdGluZyBmdWxsIHNjcmVlbi4gVG8gYXZvaWQgdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gdGhl
IHdvcmsgYWZ0ZXIgYSBkZWxheS4gV2Ugb25seQorICAgIC8vIGRlcGVuZCBvbiB0aGlzIGZvciBl
bmZvcmNpbmcgdGhlIGhlaWdodCBjb25zdHJhaW50cywgc28gYSBzbWFsbCBkZWxheSBpc24ndCB0
ZXJyaWJsZS4gTW9zdAorICAgIC8vIG9mIHRoZSB0aW1lIHRoZSB2aWV3cyB3aWxsIGFscmVhZHkg
aGF2ZSB0aGUgY29ycmVjdCBmcmFtZXMgYmVjYXVzZSBvZiBhdXRvcmVzaXppbmcgbWFza3MuCisK
KyAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7CisgICAgfSk7Cit9
CisKKy0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoIG9m
T2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnk8TlNLZXlWYWx1ZUNoYW5nZUtl
eSwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0Cit7CisgICAgaWYgKGNvbnRl
eHQgIT0ga1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQpIHsKKyAgICAgICAgW3N1
cGVyIG9ic2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvZk9iamVjdDpvYmplY3QgY2hhbmdl
OmNoYW5nZSBjb250ZXh0OmNvbnRleHRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TlNXaW5kb3cgKndpbmRvdyA9IG9iamVjdDsKKyAgICBBU1NFUlQoW3dpbmRvdyBpc0tpbmRPZkNs
YXNzOltOU1dpbmRvdyBjbGFzc11dKTsKKyAgICBpZiAod2luZG93LmluTGl2ZVJlc2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
CisgICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5n
ZSgpOworICAgIH0pOworfQorCisvLyBNQVJLOiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVs
ZWdhdGUgbWV0aG9kcworCistICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9y
RGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJv
bGxlcgoreworICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCisgICAgICAgIF9pbnNwZWN0b3JQcm94
eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCistIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcgoreworICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHkgPyBfaW5zcGVj
dG9yUHJveHktPmlzVW5kZXJUZXN0KCkgOiBmYWxzZTsKK30KKworLSAodm9pZClpbnNwZWN0b3JW
aWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdD
b250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Cit7CisgICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5hdHRhY2htZW50
V2lsbE1vdmVGcm9tV2luZG93KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndlYlZpZXcud2luZG93
KTsKK30KKworLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzoo
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCit7Cisg
ICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKKyAgICAgICAgX2luc3BlY3RvclByb3h5LT5hdHRhY2ht
ZW50RGlkTW92ZVRvV2luZG93KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndlYlZpZXcud2luZG93
KTsKK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50Vmlld0RpZENoYW5nZShO
U1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3VmlldykKK3sKKyAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkg
bmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6b2xkVmlld107Cisg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29i
akNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3RnJhbWVEaWRD
aGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpuZXdW
aWV3XTsKKworICAgIGlmIChtX2lzQXR0YWNoZWQpCisgICAgICAgIGF0dGFjaChtX2F0dGFjaG1l
bnRTaWRlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudFdpbGxNb3Zl
RnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KQoreworICAgIGlmIChtX2lzT2JzZXJ2aW5n
Q29udGVudExheW91dFJlY3QpIHsKKyAgICAgICAgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRS
ZWN0ID0gZmFsc2U7CisgICAgICAgIFtvbGRXaW5kb3cgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRh
cHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExheW91dFJlY3QiIGNvbnRleHQ6a1dpbmRv
d0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHRdOworICAgIH0KK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRvdyAqbmV3V2luZG93
KQoreworICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgISFuZXdXaW5kb3cpIHsKKyAgICAgICAgbV9p
c09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0ID0gdHJ1ZTsKKyAgICAgICAgW25ld1dpbmRvdyBh
ZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0
UmVjdCIgb3B0aW9uczowIGNvbnRleHQ6a1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRl
eHRdOworICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKKyAgICB9Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICB1bnNpZ25lZCBsZXZlbCA9IGluc3BlY3Rpb25MZXZlbCgpOworICAgIGlmIChsZXZlbCA+IDEp
IHsKKyAgICAgICAgTlNTdHJpbmcgKmRlYnVnVGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIFslZF0g4oCUICVAIiwgIldlYiBJbnNw
ZWN0b3Igd2luZG93IHRpdGxlIHdoZW4gaW5zcGVjdGluZyBXZWIgSW5zcGVjdG9yIiksIGxldmVs
LCAoTlNTdHJpbmcgKiltX3VybFN0cmluZ107CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBz
ZXRUaXRsZTpkZWJ1Z1RpdGxlXTsKKyAgICB9IGVsc2UgeworICAgICAgICBOU1N0cmluZyAqdGl0
bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVj
dG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAoTlNTdHJpbmcgKilt
X3VybFN0cmluZ107CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRUaXRsZTp0aXRsZV07
CisgICAgfQorfQorCitSZXRhaW5QdHI8TlNXaW5kb3c+IFdlYkluc3BlY3RvclByb3h5OjpjcmVh
dGVGcm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdl
dFR5cGUgdGFyZ2V0VHlwZSkKK3sKKyAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSAhTlNJc0VtcHR5
UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSA/IHNhdmVkV2luZG93RnJhbWUgOiBOU01ha2VSZWN0KDAs
IDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCk7CisgICAgYXV0byB3
aW5kb3cgPSBhZG9wdE5TKFtbX1dLSW5zcGVjdG9yV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRl
bnRSZWN0OndpbmRvd0ZyYW1lIHN0eWxlTWFzazp3aW5kb3dTdHlsZU1hc2sgYmFja2luZzpOU0Jh
Y2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7CisgICAgW3dpbmRvdyBzZXRNaW5TaXplOk5T
TWFrZVNpemUobWluaW11bVdpbmRvd1dpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07CisgICAg
W3dpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworICAgIFt3aW5kb3cgc2V0Q29sbGVj
dGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBOU1dpbmRvd0NvbGxl
Y3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5QcmltYXJ5KV07CisKKyAgICBib29sIGZvclJlbW90ZVRh
cmdldCA9IHRhcmdldFR5cGUgPT0gSW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZTsKKyAgICBb
d2luZG93IHNldEZvclJlbW90ZVRhcmdldDpmb3JSZW1vdGVUYXJnZXRdOworCisgICAgQ0dGbG9h
dCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUgPSAoW3dpbmRvdyBzY3JlZW5dLmZyYW1lLnNp
emUud2lkdGggLyAyKSAtIDQ7CisgICAgQ0dGbG9hdCBtaW5pbXVtRnVsbFNjcmVlbldpZHRoID0g
c3RkOjptYXg8Q0dGbG9hdD4oNjM2LCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUpOworICAg
IFt3aW5kb3cgc2V0TWluRnVsbFNjcmVlbkNvbnRlbnRTaXplOk5TTWFrZVNpemUobWluaW11bUZ1
bGxTY3JlZW5XaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOworICAgIFt3aW5kb3cgc2V0Q29s
bGVjdGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBOU1dpbmRvd0Nv
bGxlY3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5BbGxvd3NUaWxpbmcpXTsKKworICAgIFt3aW5kb3cg
c2V0VGl0bGViYXJBcHBlYXJzVHJhbnNwYXJlbnQ6WUVTXTsKKworICAgIC8vIENlbnRlciB0aGUg
d2luZG93IGlmIHRoZSBzYXZlZCBmcmFtZSB3YXMgZW1wdHkuCisgICAgaWYgKE5TSXNFbXB0eVJl
Y3Qoc2F2ZWRXaW5kb3dGcmFtZSkpCisgICAgICAgIFt3aW5kb3cgY2VudGVyXTsKKworICAgIHJl
dHVybiB3aW5kb3c7Cit9CisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsK
KyAgICBBU1NFUlQoIW1faW5zcGVjdG9yUGFnZSk7CisKKyAgICBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lci5zdG9wKCk7CisKKyAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlcikgeworICAgICAgICBBU1NFUlQobV9vYmpDQWRhcHRlcik7CisgICAgICAgIHJldHVybiBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UuZ2V0KCk7CisgICAgfQor
CisgICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1dlYkluc3BlY3RvclByb3h5T2JqQ0Fk
YXB0ZXIgYWxsb2NdIGluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOworICAgIE5TVmll
dyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZp
ZXcoKTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2Jq
ZWN0Omluc3BlY3RlZFZpZXddOworCisgICAgbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciA9IGFk
b3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rl
ZFBhZ2U6aW5zcGVjdGVkUGFnZSgpXSk7CisgICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
Z2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07CisKKyAgICBXZWJQYWdlUHJv
eHkgKmluc3BlY3RvclBhZ2UgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+
X3BhZ2UuZ2V0KCk7CisgICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOworCisgICAgcmV0dXJuIGlu
c3BlY3RvclBhZ2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRXaW5kb3coKQoreworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOworCisg
ICAgTlNTdHJpbmcgKnNhdmVkV2luZG93RnJhbWVTdHJpbmcgPSBpbnNwZWN0ZWRQYWdlKCktPnBh
Z2VHcm91cCgpLnByZWZlcmVuY2VzKCkuaW5zcGVjdG9yV2luZG93RnJhbWUoKTsKKyAgICBOU1Jl
Y3Qgc2F2ZWRXaW5kb3dGcmFtZSA9IE5TUmVjdEZyb21TdHJpbmcoc2F2ZWRXaW5kb3dGcmFtZVN0
cmluZyk7CisKKyAgICBtX2luc3BlY3RvcldpbmRvdyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVh
dGVGcm9udGVuZFdpbmRvdyhzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6
TG9jYWwpOworICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVy
LmdldCgpXTsKKworICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddOworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbbV9pbnNw
ZWN0b3JXaW5kb3cgY29udGVudFZpZXddOworICAgIGluc3BlY3RvclZpZXcuZnJhbWUgPSBbY29u
dGVudFZpZXcgYm91bmRzXTsKKyAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JW
aWV3XTsKKworICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNB
dHRhY2hlZCB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpOworCisgICAgaWYgKG1faW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuZ2V0KCkg
c2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciA9IG5p
bDsKKyAgICB9CisKKyAgICBpZiAobV9vYmpDQWRhcHRlcikgeworICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIu
Z2V0KCldOworCisgICAgICAgIFttX29iakNBZGFwdGVyIGludmFsaWRhdGVdOworICAgICAgICBt
X29iakNBZGFwdGVyID0gbmlsOworICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKQoreworICAgIGNsb3NlRnJv
bnRlbmRQYWdlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewor
ICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICAgICAgW21f
aW5zcGVjdG9yV2luZG93IGNsb3NlXTsKKyAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7
CisgICAgfQorCisgICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RhcnRP
bmVTaG90KHdlYlZpZXdDbG9zZVRpbWVvdXQpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQoreworICAgIG1fY2xvc2VGcm9udGVuZEFmdGVy
SW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKKworICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbV9j
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOworCisgICAgY2xvc2VGcm9u
dGVuZFBhZ2UoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkK
K3sKKyAgICBpZiAobV9pc0F0dGFjaGVkKSB7CisgICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAg
ICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX2lu
c3BlY3RvcldpbmRvdyBjbG9zZV07CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwor
ICAgIH0KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkK
K3sKKyAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuZGVsZXRl
SW5zcGVjdG9yV2luZG93RnJhbWUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAgIC8vIElmIHRoZSBXZWIgSW5zcGVjdG9yIGlzIG5v
IGxvbmdlciBpbiB0aGUgc2FtZSB3aW5kb3cgYXMgdGhlIGluc3BlY3RlZCB2aWV3LAorICAgIC8v
IHRoZW4gd2UgbmVlZCB0byByZW9wZW4gdGhlIEluc3BlY3RvciB0byBnZXQgaXQgYXR0YWNoZWQg
dG8gdGhlIHJpZ2h0IHdpbmRvdy4KKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBkcmFnZ2lu
ZyB0YWJzIHRvIGFub3RoZXIgd2luZG93IGluIFNhZmFyaS4KKyAgICBpZiAobV9pc0F0dGFjaGVk
ICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyAhPSBpbnNwZWN0
ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkpIHsKKyAgICAgICAgb3BlbigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4Pjog
dGhpcyB3aWxsIG5vdCBicmluZyBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSB0byB0aGUgZnJv
bnQsIG9ubHkgaXRzIHdpbmRvdy4KKyAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld10ud2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07CisgICAgW1ttX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6W21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld11dOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQoreworICAgIFtpbnNwZWN0
ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKK30K
KworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKK3sKKyAgICAvLyBG
SVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IHJldHVybiBmYWxz
ZSBmb3IgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmksIG9ubHkgYSBiYWNrZ3JvdW5kIHdpbmRv
dy4KKyAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2ViVmlld10ud2luZG93LmlzTWFpbldpbmRvdzsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKQoreworICAgIE5T
VmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVu
dFZpZXcoKTsKKyAgICBpZiAoW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgdmlld0lzSW5zcGVj
dG9yV2ViVmlldzppbnNwZWN0ZWRWaWV3XSkKKyAgICAgICAgcmV0dXJuIHdlYlByb2Nlc3NDYW5B
dHRhY2g7CisKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0g
MjUwOworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9
IDAuNzU7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAw
OworCisgICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7
CisKKyAgICBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBOU0hlaWdodChpbnNwZWN0ZWRW
aWV3RnJhbWUpICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87CisgICAgcmV0dXJuIG1pbmlt
dW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFj
aGVkV2lkdGggPD0gTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFp
bGFibGUpCit7CisgICAgLy8gRG8gbm90aGluZy4KK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQor
eworICAgIG1fdXJsU3RyaW5nID0gdXJsU3RyaW5nOworCisgICAgdXBkYXRlSW5zcGVjdG9yV2lu
ZG93VGl0bGUoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2Vy
dGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCit7CisgICAg
QVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKKworICAgIFJldGFpblB0cjxTRkNl
cnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0
ZVBhbmVsIGFsbG9jXSBpbml0XSk7CisKKyAgICBOU1dpbmRvdyAqd2luZG93OworICAgIGlmICht
X2luc3BlY3RvcldpbmRvdykKKyAgICAgICAgd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0
KCk7CisgICAgZWxzZQorICAgICAgICB3aW5kb3cgPSBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgd2ViVmlld10gd2luZG93XTsKKworICAgIGlmICghd2luZG93KQorICAgICAgICB3aW5kb3cg
PSBbTlNBcHAga2V5V2luZG93XTsKKworI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04p
CisgICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxE
ZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIHRydXN0
OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNob3dHcm91cDpZRVNdOworI2Vsc2UKKyAgICBbY2Vy
dGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5p
bCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihO
U0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVT
XTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3Qg
cGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9l
c24ndCBleGlzdCBiZWZvcmVoYW5kLgorICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0
ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOworICAgIFtjZXJ0aWZp
Y2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXRF
ZGl0YWJsZVRydXN0Ok5PXTsKKyAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxz
OllFU107CisgICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlRGlhbG9nKQoreworICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHko
KSk7CisgICAgCisgICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKKyAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Cisg
ICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsK
KyAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdl
IGNhbiBzYXZlIHRvIHRoZW0uCisgICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7CisgICAg
fQorICAgIAorICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7CisgICAgaWYgKCFwbGF0Zm9ybVVSTCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cu
CisgICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7CisgICAgU3RyaW5n
IGNvbnRlbnRDb3B5ID0gY29udGVudDsKKworICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAq
YWN0dWFsVVJMKSB7CisgICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOworCisgICAgICAgIG1fc3Vn
Z2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7CisK
KyAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBv
dXQ7CisgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNl
NjRWYWxpZGF0ZVBhZGRpbmcpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7CisgICAgICAgICAg
ICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxM
XTsKKworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5z
cGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIH07CisKKyAgICBpZiAoIWZvcmNlU2F2ZURp
YWxvZykgeworICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5l
bF07CisgICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0
aENvbXBvbmVudDsKKworICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5
IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCisgICAgLy8gY2FuIHByb3ZpZGUgYSBnb29k
IGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKKyAgICAvLyBk
ZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUg
ZGlhbG9nLgorICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCisgICAgICAgIHBhbmVsLmRp
cmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRd
OworCisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgewor
ICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7Cisg
ICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOworICAgIH07CisKKyAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cgPyBtX2luc3BlY3RvcldpbmRvdy5nZXQoKSA6IFtOU0Fw
cCBrZXlXaW5kb3ddOworICAgIGlmICh3aW5kb3cpCisgICAgICAgIFtwYW5lbCBiZWdpblNoZWV0
TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
XTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0p
OworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIEFTU0VSVCgh
c3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7CisgICAgCisgICAgUmV0YWluUHRyPE5TVVJMPiBhY3R1
YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpOworICAg
IC8vIERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNvbmZpcm1lZCB0
aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4KKyAgICBpZiAoIWFjdHVhbFVSTCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5k
bGVGb3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9yOk5VTExdOworICAgIFtoYW5k
bGUgc2Vla1RvRW5kT2ZGaWxlXTsKKyAgICBbaGFuZGxlIHdyaXRlRGF0YTpbY29udGVudCBkYXRh
VXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgIFtoYW5kbGUgY2xvc2VG
aWxlXTsKKworICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
d2luZG93RnJhbWVEaWRDaGFuZ2UoKQoreworICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKKyAg
ICBBU1NFUlQobV9pc1Zpc2libGUpOworICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7CisK
KyAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JXaW5k
b3cpCisgICAgICAgIHJldHVybjsKKworICAgIE5TU3RyaW5nICpmcmFtZVN0cmluZyA9IE5TU3Ry
aW5nRnJvbVJlY3QoW21faW5zcGVjdG9yV2luZG93IGZyYW1lXSk7CisgICAgaW5zcGVjdGVkUGFn
ZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNldEluc3BlY3RvcldpbmRvd0ZyYW1lKGZy
YW1lU3RyaW5nKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93RnVsbFNjcmVl
bkRpZENoYW5nZSgpCit7CisgICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOworICAgIEFTU0VSVCht
X2lzVmlzaWJsZSk7CisgICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKKworICAgIGlmICht
X2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0
dGFjaChjYW5BdHRhY2goKSkpOyAgICAKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgY3VycmVudERpbWVuc2lvbikKK3sKKyAg
ICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faXNBdHRh
Y2hlZCkgeworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXR0YWNoIGF2YWlsYWJpbGl0eSBjaGFu
Z2VkLiBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBpbiBjYXNlCisgICAgICAgIC8vIHRoZSBhdHRh
Y2htZW50IHZpZXcgaXMgbm90IHRoZSBXS1ZpZXcuCisgICAgICAgIGF0dGFjaEF2YWlsYWJpbGl0
eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghaW5zcGVjdGVkUGFnZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0
dGFjaG1lbnRWaWV3KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107CisKKyAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0Zy
YW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKKyAgICBOU1JlY3Qgb2xkSW5zcGVjdG9yVmlld0Zy
YW1lID0gaW5zcGVjdG9yVmlldy5mcmFtZTsKKyAgICBOU1JlY3QgbmV3SW5zcGVjdG9yVmlld0Zy
YW1lID0gTlNaZXJvUmVjdDsKKyAgICBOU1JlY3QgcGFyZW50Qm91bmRzID0gaW5zcGVjdGVkVmll
dy5zdXBlcnZpZXcuYm91bmRzOworICAgIENHRmxvYXQgaW5zcGVjdGVkVmlld1RvcCA9IE5TTWF4
WShpbnNwZWN0ZWRWaWV3RnJhbWUpOworCisgICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7
CisgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7CisgICAgICAgIGlmICghY3VycmVu
dERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU0hlaWdodChvbGRJ
bnNwZWN0b3JWaWV3RnJhbWUpOworCisgICAgICAgIENHRmxvYXQgcGFyZW50SGVpZ2h0ID0gTlNI
ZWlnaHQocGFyZW50Qm91bmRzKTsKKyAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JIZWlnaHQgPSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVp
Z2h0KGN1cnJlbnREaW1lbnNpb24sIHBhcmVudEhlaWdodCk7CisKKyAgICAgICAgLy8gUHJlc2Vy
dmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBT
YWZhcmkgc3RpbGwgd29yay4KKyAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVj
dCgwLCBpbnNwZWN0b3JIZWlnaHQsIE5TV2lkdGgocGFyZW50Qm91bmRzKSwgaW5zcGVjdGVkVmll
d1RvcCAtIGluc3BlY3RvckhlaWdodCk7CisgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9
IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpLCBpbnNwZWN0b3JI
ZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpSaWdodDogeworICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCisgICAgICAgICAgICBj
dXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOworCisgICAg
ICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7CisgICAgICAg
IENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpj
b25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwgcGFyZW50V2lk
dGgpOworCisgICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3Bl
Y3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBkb24ndCB1c2Ug
dGhhdAorICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3IgdmlldyBzaW5j
ZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVjdGVkIHZpZXcu
CisgICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgcGFyZW50V2lk
dGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1RvcCk7CisgICAgICAgIG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QocGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwg
MCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOworCisgICAgICAgIGlm
IChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsKKyAg
ICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1cGVy
dmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJvbVZp
ZXc6bmlsXTsKKyAgICAgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJzZWN0
aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpM
ZWZ0OiB7CisgICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKKyAgICAgICAgICAgIGN1cnJl
bnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7CisKKyAgICAgICAg
Q0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKKyAgICAgICAgQ0dG
bG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0
cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7
CisKKyAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVk
IHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0
CisgICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRo
ZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KKyAg
ICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdChpbnNwZWN0b3JXaWR0aCwgMCwg
cGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1RvcCk7CisgICAgICAg
IG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgaW5zcGVjdG9yV2lkdGgs
IE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOworCisgICAgICAgIGlmIChOU1dpbmRvdyAqaW5zcGVj
dG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsKKyAgICAgICAgICAgIE5TUmVjdCBj
b250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBjb252ZXJ0UmVjdDpp
bnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJvbVZpZXc6bmlsXTsKKyAgICAgICAg
ICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJzZWN0aW9uUmVjdChuZXdJbnNwZWN0
b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgfQorCisgICAgaWYgKE5TRXF1YWxSZWN0cyhvbGRJbnNwZWN0b3JWaWV3
RnJhbWUsIG5ld0luc3BlY3RvclZpZXdGcmFtZSkgJiYgTlNFcXVhbFJlY3RzKFtpbnNwZWN0ZWRW
aWV3IGZyYW1lXSwgaW5zcGVjdGVkVmlld0ZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyB0byBtYWtlIHN1cmUgdGhlIGxheWVycyBmb3IgYm90
aCB2aWV3cyByZXNpemUgaW4gc3luYy4KKyAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgZGlzYWJs
ZVNjcmVlblVwZGF0ZXNVbnRpbEZsdXNoXTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHNldEZyYW1l
Om5ld0luc3BlY3RvclZpZXdGcmFtZV07CisgICAgW2luc3BlY3RlZFZpZXcgc2V0RnJhbWU6aW5z
cGVjdGVkVmlld0ZyYW1lXTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcg
PSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7CisgICAgTlNSZWN0
IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS5oZWlnaHQpOworfQor
Cit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0
aCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNw
ZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtp
bnNwZWN0ZWRWaWV3IGZyYW1lXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
c3BlY3RlZFZpZXdSZWN0LnNpemUud2lkdGgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVj
dGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOworICAgIFdLV2ViVmlldyAqaW5z
cGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOworCisgICAg
aWYgKG1faW5zcGVjdG9yV2luZG93KSB7CisgICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRE
ZWxlZ2F0ZTpuaWxdOworICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOworICAgICAg
ICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKKyAgICB9CisKKyAgICBbaW5zcGVjdG9yVmlldyBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIENHRmxvYXQgY3VycmVudERpbWVuc2lvbjsKKyAg
ICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpC
b3R0b206CisgICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3
V2lkdGhTaXphYmxlIHwgTlNWaWV3TWF4WU1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNp
b24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKKyAgICAg
ICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxl
IHwgTlNWaWV3TWluWE1hcmdpbl07CisgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0
b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6CisgICAgICAgIFtpbnNwZWN0b3JW
aWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01heFhN
YXJnaW5dOworICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoY3VycmVudERpbWVuc2lvbik7CisKKyAg
ICBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JWaWV3IHBvc2l0
aW9uZWQ6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOmluc3BlY3RlZFZpZXddOworICAgIFtpbnNw
ZWN0b3JWaWV3LndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6aW5zcGVjdG9yVmlld107Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKK3sKKyAgICBOU1ZpZXcg
Kmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7CisgICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgd2ViVmlld107CisKKyAgICBbaW5zcGVjdG9yVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKworICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhT
aXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB3
ZSBzaXplIHRoZSBpbnNwZWN0ZWQgdmlldydzIGZyYW1lIGFmdGVyIGRldGFjaGluZyBzbyB0aGF0
IGl0IHRha2VzIHVwIHRoZSBzcGFjZSB0aGF0IHRoZQorICAgIC8vIGF0dGFjaGVkIGluc3BlY3Rv
ciB1c2VkIHRvLiBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmll
dyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgorCisgICAgaW5zcGVjdGVkVmlldy5m
cmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5i
b3VuZHMpLCBOU01heFkoaW5zcGVjdGVkVmlldy5mcmFtZSkpOworCisgICAgLy8gUmV0dXJuIGVh
cmx5IGlmIHdlIGFyZSBub3QgdmlzaWJsZS4gVGhpcyBtZWFucyB0aGUgaW5zcGVjdG9yIHdhcyBj
bG9zZWQgd2hpbGUgYXR0YWNoZWQKKyAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW5k
IHNob3cgdGhlIGluc3BlY3RvciB3aW5kb3cuCisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgb3BlbigpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBp
ZiAoIW1faXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdGVkVmlld0Zy
YW1lRGlkQ2hhbmdlKGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBpZiAoIW1f
aXNBdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlk
Q2hhbmdlKHdpZHRoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc2hlZXRSZWN0ID0gcmVj
dDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWco
KQoreworICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS0+c3Rh
cnRXaW5kb3dEcmFnKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9y
UGFnZVVSTCgpCit7CisgICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRo
SWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOworICAgIGlmICghYnVuZGxl
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiTWFpbiIgb2ZUeXBlOkAiaHRtbCJdOworICAgIEFTU0VSVChw
YXRoICYmIHBhdGgubGVuZ3RoKTsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rv
cnk6Tk9dLmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvclRlc3RQYWdlVVJMKCkKK3sKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxl
IGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAg
aWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFdlIG1pZ2h0
IG5vdCBoYXZlIGEgVGVzdC5odG1sIGluIFByb2R1Y3Rpb24gYnVpbGRzLgorICAgIE5TU3RyaW5n
ICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJUZXN0IiBvZlR5cGU6QCJodG1sIl07
CisgICAgaWYgKCFwYXRoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4g
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmlu
ZzsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKK3sK
KyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAi
Y29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07CisgICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5nICpwYXRoID0gYnVuZGxlLnJlc291cmNlUGF0
aDsKKyAgICBBU1NFUlQocGF0aCAmJiBwYXRoLmxlbmd0aCk7CisKKyAgICByZXR1cm4gW05TVVJM
IGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5OllFU10uYWJzb2x1dGVTdHJpbmc7Cit9
CisKK3N0YXRpYyBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNpb25QbGlzdCgpCit7CisgICAgTlNT
dHJpbmcgKnN5c3RlbUxpYnJhcnlQYXRoID0gW05TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5E
b21haW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpIG9iamVj
dEF0SW5kZXg6MF07CisgICAgTlNTdHJpbmcgKnN5c3RlbVZlcnNpb25QbGlzdFBhdGggPSBbc3lz
dGVtTGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ29yZVNlcnZp
Y2VzL1N5c3RlbVZlcnNpb24ucGxpc3QiXTsKKyAgICBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNp
b25JbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aENvbnRlbnRzT2ZGaWxlOnN5c3Rl
bVZlcnNpb25QbGlzdFBhdGhdOworICAgIHJldHVybiBzeXN0ZW1WZXJzaW9uSW5mbzsKK30KKwor
RGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dh
YmxlKCkKK3sKKyAgICBOU0RpY3Rpb25hcnkgKnBsaXN0ID0gc3lzdGVtVmVyc2lvblBsaXN0KCk7
CisKKyAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgcmVzdWx0OworICAgIHJlc3VsdC5kZWJ1Z2dhYmxl
VHlwZSA9IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7CisgICAgcmVzdWx0LnRh
cmdldFBsYXRmb3JtTmFtZSA9ICJtYWNPUyJfczsKKyAgICByZXN1bHQudGFyZ2V0QnVpbGRWZXJz
aW9uID0gcGxpc3RbQCJQcm9kdWN0QnVpbGRWZXJzaW9uIl07CisgICAgcmVzdWx0LnRhcmdldFBy
b2R1Y3RWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0VXNlclZpc2libGVWZXJzaW9uIl07CisgICAg
cmVzdWx0LnRhcmdldElzU2ltdWxhdG9yID0gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmVlNWNkZmYzOGIz
Yzc3OWEyNjI3MzhjNDE5NTE1YjQ0NThiOWRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3Bw
CkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKworI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQVBJRGVidWdnYWJsZUluZm8uaCIKKyNpbmNsdWRlICJS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBSZW1vdGVJbnNwZWN0b3JQcm94eSBmaW5hbCA6IHB1YmxpYyBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eUNsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQoKTsKK3B1YmxpYzoKKyAg
ICBSZW1vdGVJbnNwZWN0b3JQcm94eShSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGluc3BlY3RvckNs
aWVudCwgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIEluc3Bl
Y3Rvcjo6RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCisgICAgICAgIDogbV9wcm94eShS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9pbnNwZWN0b3JD
bGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICAsIG1fY29ubmVjdGlvbklEKGNvbm5lY3Rp
b25JRCkKKyAgICAgICAgLCBtX3RhcmdldElEKHRhcmdldElEKQorICAgICAgICAsIG1fZGVidWdn
YWJsZVR5cGUoZGVidWdnYWJsZVR5cGUpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZXRDbGll
bnQodGhpcyk7CisgICAgfQorCisgICAgflJlbW90ZUluc3BlY3RvclByb3h5KCkKKyAgICB7Cisg
ICAgICAgIG1fcHJveHktPnNldENsaWVudChudWxscHRyKTsKKyAgICAgICAgbV9wcm94eS0+aW52
YWxpZGF0ZSgpOworICAgIH0KKworICAgIHZvaWQgbG9hZCgpCisgICAgeworICAgICAgICAvLyBG
SVhNRSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjA1NTM3PjogdGhpcyBzaG91bGQgaW5mZXIgbW9y
ZSB1c2VmdWwgZGF0YSBhYm91dCB0aGUgZGVidWcgdGFyZ2V0LgorICAgICAgICBSZWY8QVBJOjpE
ZWJ1Z2dhYmxlSW5mbz4gZGVidWdnYWJsZUluZm8gPSBBUEk6OkRlYnVnZ2FibGVJbmZvOjpjcmVh
dGUoRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKTsKKyAgICAgICAgZGVidWdnYWJsZUluZm8t
PnNldERlYnVnZ2FibGVUeXBlKG1fZGVidWdnYWJsZVR5cGUpOworICAgICAgICBtX3Byb3h5LT5s
b2FkKFdURk1vdmUoZGVidWdnYWJsZUluZm8pLCBtX2luc3BlY3RvckNsaWVudC5iYWNrZW5kQ29t
bWFuZHNVUkwoKSk7CisgICAgfQorCisgICAgdm9pZCBzaG93KCkKKyAgICB7CisgICAgICAgIG1f
cHJveHktPnNob3coKTsKKyAgICB9CisKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBtX3Byb3h5LT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQobWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFj
a2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2lu
c3BlY3RvckNsaWVudC5zZW5kTWVzc2FnZVRvQmFja2VuZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJn
ZXRJRCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZyb21Gcm9udGVuZCgpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBtX2luc3BlY3RvckNsaWVudC5jbG9zZUZyb21Gcm9udGVu
ZChtX2Nvbm5lY3Rpb25JRCwgbV90YXJnZXRJRCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJl
ZjxSZW1vdGVXZWJJbnNwZWN0b3JQcm94eT4gbV9wcm94eTsKKyAgICBSZW1vdGVJbnNwZWN0b3JD
bGllbnQmIG1faW5zcGVjdG9yQ2xpZW50OworICAgIENvbm5lY3Rpb25JRCBtX2Nvbm5lY3Rpb25J
RDsKKyAgICBUYXJnZXRJRCBtX3RhcmdldElEOworICAgIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5
cGUgbV9kZWJ1Z2dhYmxlVHlwZTsKK307CisKK1JlbW90ZUluc3BlY3RvckNsaWVudDo6UmVtb3Rl
SW5zcGVjdG9yQ2xpZW50KFVSTCB1cmwsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBvYnNlcnZl
cikKKyAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCit7CisgICAgaWYgKCF1cmwuaG9zdCgpIHx8
ICF1cmwucG9ydCgpKSB7CisgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBpbnNwZWN0b3IgdXJs
OiAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fY29ubmVjdGlvbklEID0gY29ubmVjdEluZXQodXJsLmhvc3QoKS51dGY4KCku
ZGF0YSgpLCB1cmwucG9ydCgpLnZhbHVlKCkpOworICAgIGlmICghbV9jb25uZWN0aW9uSUQpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJJbnNwZWN0b3IgY2xpZW50IGNvdWxkIG5vdCBjb25uZWN0IHRv
ICVzIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpOworfQorCitSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQoreworfQorCit2b2lkIFJlbW90ZUlu
c3BlY3RvckNsaWVudDo6c2VuZFdlYkluc3BlY3RvckV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9jb25uZWN0aW9u
SUQuaGFzVmFsdWUoKSk7CisgICAgYXV0byBtZXNzYWdlID0gZXZlbnQudXRmOCgpOworICAgIHNl
bmQobV9jb25uZWN0aW9uSUQudmFsdWUoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsKK30KKworSGFzaE1hcDxTdHJp
bmcsIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6Q2FsbEhhbmRs
ZXI+JiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpc3BhdGNoTWFwKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPj4gZGlzcGF0Y2hNYXAg
PSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+KHsKKyAgICAgICAgeyAiQmFja2VuZENvbW1h
bmRzIl9zLCBzdGF0aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6
c2V0QmFja2VuZENvbW1hbmRzKSB9LAorICAgICAgICB7ICJTZXRUYXJnZXRMaXN0Il9zLCBzdGF0
aWNfY2FzdDxDYWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlz
dCkgfSwKKyAgICAgICAgeyAiU2VuZE1lc3NhZ2VUb0Zyb250ZW5kIl9zLCBzdGF0aWNfY2FzdDxD
YWxsSGFuZGxlcj4oJlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KSB9LAorICAgIH0pOworCisgICAgcmV0dXJuIGRpc3BhdGNoTWFwOworfQorCit2b2lkIFJlbW90
ZUluc3BlY3RvckNsaWVudDo6c3RhcnRJbml0aWFsQ29tbXVuaWNhdGlvbigpCit7CisgICAgYXV0
byBldmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXZlbnQtPnNldFN0cmluZygi
ZXZlbnQiX3MsICJTZXR1cEluc3BlY3RvckNsaWVudCJfcyk7CisgICAgc2VuZFdlYkluc3BlY3Rv
ckV2ZW50KGV2ZW50LT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50Ojpjb25uZWN0aW9uQ2xvc2VkKCkKK3sKKyAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAg
ICBtX2luc3BlY3RvclByb3h5TWFwLmNsZWFyKCk7CisgICAgbV9vYnNlcnZlci5jb25uZWN0aW9u
Q2xvc2VkKCp0aGlzKTsKKyAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsK
K30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmRpZENsb3NlKENvbm5lY3Rpb25JRCkK
K3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgIGNvbm5lY3Rpb25DbG9z
ZWQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Qo
Q29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRCwgVGFyZ2V0SUQgdGFyZ2V0SUQsIEluc3BlY3Rvcjo6
RGVidWdnYWJsZVR5cGUgZGVidWdnYWJsZVR5cGUpCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBt
X2luc3BlY3RvclByb3h5TWFwLmVuc3VyZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRh
cmdldElEKSwgW3RoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVUeXBlXSB7
CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvclByb3h5PigqdGhpcywg
Y29ubmVjdGlvbklELCB0YXJnZXRJRCwgZGVidWdnYWJsZVR5cGUpOworICAgIH0pOworCisgICAg
aWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5zaG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNldHVw
RXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHNldHVwRXZlbnQtPnNldFN0cmlu
ZygiZXZlbnQiX3MsICJTZXR1cCJfcyk7CisgICAgc2V0dXBFdmVudC0+c2V0SW50ZWdlcigiY29u
bmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpOworICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIo
InRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgc2VuZFdlYkluc3BlY3RvckV2ZW50KHNldHVw
RXZlbnQtPnRvSlNPTlN0cmluZygpKTsKKworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUt
PmxvYWQoKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9C
YWNrZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgYXV0byBiYWNrZW5kRXZlbnQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJldmVudCJfcywgIlNl
bmRNZXNzYWdlVG9CYWNrZW5kIl9zKTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldEludGVnZXIoImNv
bm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklEKTsKKyAgICBiYWNrZW5kRXZlbnQtPnNldEludGVn
ZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7CisgICAgYmFja2VuZEV2ZW50LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIG1lc3NhZ2UpOworICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChiYWNrZW5k
RXZlbnQtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6
OmNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQsIFRhcmdldElEIHRh
cmdldElEKQoreworICAgIGF1dG8gY2xvc2VkRXZlbnQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGNsb3NlZEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiRnJvbnRlbmREaWRDbG9z
ZSJfcyk7CisgICAgY2xvc2VkRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29u
bmVjdGlvbklEKTsKKyAgICBjbG9zZWRFdmVudC0+c2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRh
cmdldElEKTsKKyAgICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoY2xvc2VkRXZlbnQtPnRvSlNPTlN0
cmluZygpKTsKKworICAgIG1faW5zcGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWly
KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JDbGll
bnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKCFl
dmVudC5tZXNzYWdlIHx8IGV2ZW50Lm1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBtYWtlU3RyaW5nKCJkYXRhOnRleHQvamF2
YXNjcmlwdDtiYXNlNjQsIiwgYmFzZTY0RW5jb2RlKGV2ZW50Lm1lc3NhZ2UtPnV0ZjgoKSkpOwor
fQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdChjb25zdCBFdmVu
dCYgZXZlbnQpCit7CisgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50Lm1lc3Nh
Z2UpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZh
bHVlOworICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdlLnZhbHVl
KCksIG1lc3NhZ2VWYWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gbWVzc2FnZUFycmF5OworICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc0FycmF5KG1lc3Nh
Z2VBcnJheSkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxUYXJnZXQ+IHRhcmdldExp
c3Q7CisgICAgZm9yIChhdXRvJiBpdGVtVmFsdWUgOiAqbWVzc2FnZUFycmF5KSB7CisgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmplY3Q7CisgICAgICAgIGlmICghaXRlbVZhbHVl
LT5hc09iamVjdChpdGVtT2JqZWN0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IFRhcmdldCB0YXJnZXQ7CisgICAgICAgIGlmICghaXRlbU9iamVjdC0+Z2V0SW50ZWdlcigidGFy
Z2V0SUQiX3MsIHRhcmdldC5pZCkKKyAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJp
bmcoIm5hbWUiX3MsIHRhcmdldC5uYW1lKQorICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdl
dFN0cmluZygidXJsIl9zLCB0YXJnZXQudXJsKQorICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3Qt
PmdldFN0cmluZygidHlwZSJfcywgdGFyZ2V0LnR5cGUpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgdGFyZ2V0TGlzdC5hcHBlbmQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9CisK
KyAgICBhdXRvIGNvbm5lY3Rpb25JRCA9IGV2ZW50LmNvbm5lY3Rpb25JRC52YWx1ZSgpOworCisg
ICAgLy8gRmluZCBjbG9zZWQgdGFyZ2V0cyB0byByZW1vdmUgdGhlbS4KKyAgICBWZWN0b3I8VGFy
Z2V0SUQsIDQ+IHRhcmdldHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2luc3Bl
Y3RvclByb3h5TWFwLmtleXMoKSkgeworICAgICAgICBpZiAocGFpci5maXJzdCAhPSBjb25uZWN0
aW9uSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogdGFyZ2V0TGlzdCkgeworICAgICAgICAg
ICAgaWYgKHRhcmdldC5pZCA9PSBwYWlyLnNlY29uZCkgeworICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICB0YXJnZXRzVG9SZW1vdmUuYXBw
ZW5kKHBhaXIuc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB0YXJnZXRJRCA6IHRhcmdl
dHNUb1JlbW92ZSkKKyAgICAgICAgbV9pbnNwZWN0b3JQcm94eU1hcC5yZW1vdmUoc3RkOjptYWtl
X3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOworCisgICAgbV90YXJnZXRzLnNldChjb25u
ZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOworICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlz
dENoYW5nZWQoKnRoaXMpOworfQorCit2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAoIWV2ZW50LmNv
bm5lY3Rpb25JRCB8fCAhZXZlbnQudGFyZ2V0SUQgfHwgIWV2ZW50Lm1lc3NhZ2UpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gcHJveHkgPSBtX2luc3BlY3RvclByb3h5TWFwLmdldChzdGQ6
Om1ha2VfcGFpcihldmVudC5jb25uZWN0aW9uSUQudmFsdWUoKSwgZXZlbnQudGFyZ2V0SUQudmFs
dWUoKSkpOworICAgIGlmICghcHJveHkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjUxZDYzZGVhMDZkOTUwOWQ2MjFhNGE4MzU0MGRhYTMz
ODY5ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaApAQCAtMCwwICsxLDk5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVDb250cm9sbGFibGVUYXJnZXQuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JEZWJ1Z2dhYmxlVHlwZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudDsKK2NsYXNzIFJlbW90ZUluc3Bl
Y3RvclByb3h5OworCitjbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNsaWVudCYpID0gMDsK
K307CisKK3VzaW5nIENvbm5lY3Rpb25JRCA9IEluc3BlY3Rvcjo6Q29ubmVjdGlvbklEOwordXNp
bmcgVGFyZ2V0SUQgPSBJbnNwZWN0b3I6OlRhcmdldElEOworCitjbGFzcyBSZW1vdGVJbnNwZWN0
b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOworcHVibGljOgorICAg
IFJlbW90ZUluc3BlY3RvckNsaWVudChVUkwsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJik7Cisg
ICAgflJlbW90ZUluc3BlY3RvckNsaWVudCgpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1
cGRhdGUgdGhlIG1lc3NhZ2luZyBwcm90b2NvbCB0byB1c2UgRGVidWdnYWJsZVR5cGUgaW5zdGVh
ZCBvZiBTdHJpbmcgZm9yIHRoZSB0YXJnZXQgdHlwZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MDQ3CisgICAgc3RydWN0IFRhcmdldCB7CisgICAg
ICAgIFRhcmdldElEIGlkOworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIG5h
bWU7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgfTsKKworICAgIGNvbnN0IEhhc2hNYXA8Q29u
bmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0Pj4mIHRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldHM7IH0KKyAgICBjb25zdCBTdHJpbmcmIGJhY2tlbmRDb21tYW5kc1VSTCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZENvbW1hbmRzVVJMOyB9CisKKyAgICB2b2lkIGluc3BlY3QoQ29ubmVj
dGlvbklELCBUYXJnZXRJRCwgSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSk7CisgICAgdm9pZCBz
ZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIGNsb3NlRnJvbUZyb250ZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQpOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxSZW1vdGVJbnNwZWN0
b3JDbGllbnQ+OworCisgICAgdm9pZCBzdGFydEluaXRpYWxDb21tdW5pY2F0aW9uKCk7CisgICAg
dm9pZCBjb25uZWN0aW9uQ2xvc2VkKCk7CisKKyAgICB2b2lkIHNldFRhcmdldExpc3QoY29uc3Qg
RXZlbnQmKTsKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVudCYpOwor
ICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IEV2ZW50Jik7CisKKyAgICB2b2lkIGRp
ZENsb3NlKENvbm5lY3Rpb25JRCkgZmluYWw7CisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5k
bGVyPiYgZGlzcGF0Y2hNYXAoKSBmaW5hbDsKKworICAgIHZvaWQgc2VuZFdlYkluc3BlY3RvckV2
ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIG1fYmFja2VuZENvbW1hbmRzVVJMOwor
ICAgIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBtX29ic2VydmVyOworICAgIE9wdGlvbmFsPENv
bm5lY3Rpb25JRD4gbV9jb25uZWN0aW9uSUQ7CisgICAgSGFzaE1hcDxDb25uZWN0aW9uSUQsIFZl
Y3RvcjxUYXJnZXQ+PiBtX3RhcmdldHM7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8Q29ubmVjdGlv
bklELCBUYXJnZXRJRD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNwZWN0b3JQcm94eT4+IG1f
aW5zcGVjdG9yUHJveHlNYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiYzQ1NWQzZTYyM2RhNzQzMjk1
M2RmMWIwZjU4NDU2OTRiNjE2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5j
cHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oIgorCisjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCisKKyNpbmNsdWRlICJBUElMb2FkZXJDbGllbnQuaCIKKyNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uLmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRXb3JsZC5o
IgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgIldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xh
c3MgU2NyaXB0TWVzc2FnZUNsaWVudCBmaW5hbCA6IHB1YmxpYyBXZWJTY3JpcHRNZXNzYWdlSGFu
ZGxlcjo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBTY3JpcHRNZXNzYWdlQ2xpZW50KFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciYgaW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyKQorICAgICAgICA6IG1faW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyKGluc3BlY3RvclByb3RvY29sSGFuZGxlcikgeyB9CisKKyAgICB+U2NyaXB0TWVzc2FnZUNs
aWVudCgpIHsgfQorCisgICAgdm9pZCBkaWRQb3N0TWVzc2FnZShXZWJQYWdlUHJveHkmIHBhZ2Us
IEZyYW1lSW5mb0RhdGEmJiwgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzZXJpYWxp
emVkU2NyaXB0VmFsdWUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHRva2VucyA9IHNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS50b1N0cmluZygpLnNwbGl0KCI6Iik7CisgICAgICAgIGlmICh0
b2tlbnMuc2l6ZSgpICE9IDMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVVJMIHJl
cXVlc3RVUkwgeyB7IH0sIHBhZ2UucGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07CisgICAgICAgIG1f
aW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmluc3BlY3QocmVxdWVzdFVSTC5ob3N0QW5kUG9ydCgp
LCB0b2tlbnNbMF0udG9VSW50U3RyaWN0KCksIHRva2Vuc1sxXS50b1VJbnRTdHJpY3QoKSwgdG9r
ZW5zWzJdKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xI
YW5kbGVyJiBtX2luc3BlY3RvclByb3RvY29sSGFuZGxlcjsKK307CisKK2NsYXNzIExvYWRlckNs
aWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6OkxvYWRlckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTG9hZGVyQ2xpZW50KEZ1bmN0aW9uPHZvaWQoKT4m
JiBsb2FkZWRDYWxsYmFjaykKKyAgICAgICAgOiBtX2xvYWRlZENhbGxiYWNrIHsgV1RGTW92ZShs
b2FkZWRDYWxsYmFjaykgfSB7IH0KKworICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdl
YktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiwgQVBJOjpOYXZpZ2F0
aW9uKiwgQVBJOjpPYmplY3QqKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9sb2FkZWRDYWxsYmFj
aygpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fbG9hZGVkQ2Fs
bGJhY2s7Cit9OworCitzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZT4g
cGFyc2VEZWJ1Z2dhYmxlVHlwZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBkZWJ1Z2dhYmxlVHlw
ZVN0cmluZykKK3sKKyAgICBpZiAoZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gImphdmFzY3JpcHQi
X3MpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpKYXZhU2NyaXB0
OworICAgIGlmIChkZWJ1Z2dhYmxlVHlwZVN0cmluZyA9PSAicGFnZSJfcykKKyAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OlBhZ2U7CisgICAgaWYgKGRlYnVnZ2FibGVU
eXBlU3RyaW5nID09ICJzZXJ2aWNlLXdvcmtlciJfcykKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6RGVidWdnYWJsZVR5cGU6OlNlcnZpY2VXb3JrZXI7CisgICAgaWYgKGRlYnVnZ2FibGVUeXBl
U3RyaW5nID09ICJ3ZWItcGFnZSJfcykKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdn
YWJsZVR5cGU6OldlYlBhZ2U7CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit2b2lk
IFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6aW5zcGVjdChjb25zdCBTdHJpbmcmIGhv
c3RBbmRQb3J0LCBDb25uZWN0aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwg
Y29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8gZGVidWdnYWJsZVR5cGUgPSBwYXJzZURl
YnVnZ2FibGVUeXBlRnJvbVN0cmluZyh0eXBlKTsKKyAgICBpZiAoIWRlYnVnZ2FibGVUeXBlKSB7
CisgICAgICAgIExPR19FUlJPUigiVW5rbm93biBkZWJ1Z2dhYmxlIHR5cGU6IFwiJXNcIiIsIHR5
cGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9p
bnNwZWN0b3JDbGllbnQpCisgICAgICAgIG1faW5zcGVjdG9yQ2xpZW50LT5pbnNwZWN0KGNvbm5l
Y3Rpb25JRCwgdGFyZ2V0SUQsIGRlYnVnZ2FibGVUeXBlLnZhbHVlKCkpOworfQorCit2b2lkIFJl
bW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6cnVuU2NyaXB0KGNvbnN0IFN0cmluZyYgc2Ny
aXB0KQoreworICAgIG1fcGFnZS5ydW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoeyBzY3JpcHQsIGZh
bHNlLCBXVEY6Om51bGxvcHQsIGZhbHNlIH0sIAorICAgICAgICBbXShBUEk6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSosIE9wdGlvbmFsPFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHM+IGV4Y2VwdGlv
bkRldGFpbHMsIENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgICAgIGlmIChleGNlcHRp
b25EZXRhaWxzKQorICAgICAgICAgICAgICAgIExPR19FUlJPUigiRXhjZXB0aW9uIHJ1bm5pbmcg
c2NyaXB0IFwiJXNcIiIsIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjp0YXJn
ZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmIGNsaWVudCkKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGh0bWw7CisgICAgaWYgKGNsaWVudC50YXJnZXRzKCkuaXNFbXB0eSgpKQorICAg
ICAgICBodG1sLmFwcGVuZCgiPHA+Tm8gdGFyZ2V0cyBmb3VuZDwvcD4iX3MpOworICAgIGVsc2Ug
eworICAgICAgICBodG1sLmFwcGVuZCgiPHRhYmxlPiIpOworICAgICAgICBmb3IgKGF1dG8mIGNv
bm5lY3Rpb25JRCA6IGNsaWVudC50YXJnZXRzKCkua2V5cygpKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIHRhcmdldCA6IGNsaWVudC50YXJnZXRzKCkuZ2V0KGNvbm5lY3Rpb25JRCkpIHsKKyAg
ICAgICAgICAgICAgICBodG1sLmFwcGVuZChtYWtlU3RyaW5nKAorICAgICAgICAgICAgICAgICAg
ICAiPHRib2R5Pjx0cj4iCisgICAgICAgICAgICAgICAgICAgICI8dGQgY2xhc3M9XCJkYXRhXCI+
PGRpdiBjbGFzcz1cInRhcmdldG5hbWVcIj4iLCB0YXJnZXQubmFtZSwgIjwvZGl2PjxkaXYgY2xh
c3M9XCJ0YXJnZXR1cmxcIj4iLCB0YXJnZXQudXJsLCAiPC9kaXY+PC90ZD4iCisgICAgICAgICAg
ICAgICAgICAgICI8dGQgY2xhc3M9XCJpbnB1dFwiPjxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFs
dWU9XCJJbnNwZWN0XCIgb25jbGljaz1cIndpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLmlu
c3BlY3Rvci5wb3N0TWVzc2FnZShcXCciLCBjb25uZWN0aW9uSUQsICI6IiwgdGFyZ2V0LmlkLCAi
OiIsIHRhcmdldC50eXBlLCAiXFwnKTtcIj48L3RkPiIKKyAgICAgICAgICAgICAgICAgICAgIjwv
dHI+PC90Ym9keT4iCisgICAgICAgICAgICAgICAgKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaHRtbC5hcHBlbmQoIjwvdGFibGU+Iik7CisgICAgfQorICAgIG1fdGFyZ2V0
TGlzdHNIdG1sID0gaHRtbC50b1N0cmluZygpOworICAgIGlmIChtX3BhZ2VMb2FkZWQpCisgICAg
ICAgIHVwZGF0ZVRhcmdldExpc3QoKTsKK30KKwordm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXI6OnVwZGF0ZVRhcmdldExpc3QoKQoreworICAgIGlmICghbV90YXJnZXRMaXN0c0h0
bWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJ1blNjcmlwdChtYWtlU3RyaW5nKCJ1cGRhdGVUYXJn
ZXRzKGAiLCBtX3RhcmdldExpc3RzSHRtbCwgImApOyIpKTsKKyAgICAgICAgbV90YXJnZXRMaXN0
c0h0bWwgPSB7IH07CisgICAgfQorfQorCit2b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFu
ZGxlcjo6cGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiBwYWdlUHJveHksIFdlYlVSTFNj
aGVtZVRhc2smIHRhc2spCit7CisgICAgYXV0byYgcmVxdWVzdFVSTCA9IHRhc2sucmVxdWVzdCgp
LnVybCgpOworCisgICAgLy8gRGVzdHJveSB0aGUgY2xpZW50IGJlZm9yZSBjcmVhdGluZyBhIG5l
dyBjb25uZWN0aW9uIHNvIGl0IGNhbiBjb25uZWN0IHRvIHRoZSBzYW1lIHBvcnQKKyAgICBtX2lu
c3BlY3RvckNsaWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNwZWN0b3JDbGllbnQgPSBtYWtlVW5p
cXVlPFJlbW90ZUluc3BlY3RvckNsaWVudD4ocmVxdWVzdFVSTCwgKnRoaXMpOworCisgICAgLy8g
U2V0dXAgdGFyZ2V0IHBvc3RNZXNzYWdlIGxpc3RlbmVyCisgICAgYXV0byBoYW5kbGVyID0gV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXI6OmNyZWF0ZShtYWtlVW5pcXVlPFNjcmlwdE1lc3NhZ2VDbGll
bnQ+KCp0aGlzKSwgImluc3BlY3RvciIsIEFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9ybWFsV29y
bGQoKSk7CisgICAgcGFnZVByb3h5LnBhZ2VHcm91cCgpLnVzZXJDb250ZW50Q29udHJvbGxlcigp
LmFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihoYW5kbGVyLmdldCgpKTsKKworICAgIC8vIFNl
dHVwIGxvYWRlciBjbGllbnQgdG8gZ2V0IG5vdGlmaWVkIG9mIHBhZ2UgbG9hZAorICAgIG1fcGFn
ZS5zZXRMb2FkZXJDbGllbnQobWFrZVVuaXF1ZTxMb2FkZXJDbGllbnQ+KFt0aGlzXSB7CisgICAg
ICAgIG1fcGFnZUxvYWRlZCA9IHRydWU7CisgICAgICAgIHVwZGF0ZVRhcmdldExpc3QoKTsKKyAg
ICB9KSk7CisgICAgbV9wYWdlTG9hZGVkID0gZmFsc2U7CisKKyAgICBTdHJpbmdCdWlsZGVyIGh0
bWxCdWlsZGVyOworICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgIjxodG1sPjxoZWFk
Pjx0aXRsZT5SZW1vdGUgSW5zcGVjdG9yPC90aXRsZT4iCisgICAgICAgICI8bWV0YSBodHRwLWVx
dWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwi
IC8+IgorICAgICAgICAiPHN0eWxlPiIKKyAgICAgICAgIiAgaDEgeyBjb2xvcjogI2JhYmRiNjsg
dGV4dC1zaGFkb3c6IDAgMXB4IDAgd2hpdGU7IG1hcmdpbi1ib3R0b206IDA7IH0iCisgICAgICAg
ICIgIGh0bWwgeyBmb250LWZhbWlseTogLXdlYmtpdC1zeXN0ZW0tZm9udDsgZm9udC1zaXplOiAx
MXB0OyBjb2xvcjogIzJlMzQzNjsgcGFkZGluZzogMjBweCAyMHB4IDAgMjBweDsgYmFja2dyb3Vu
ZC1jb2xvcjogI2Y2ZjZmNDsgIgorICAgICAgICAiICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTog
LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3Rv
cCgwLCAjZWVlZWVjKSwgY29sb3Itc3RvcCgxLCAjZjZmNmY0KSk7IgorICAgICAgICAiICAgICAg
ICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDVlbTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVh
dDsgfSIKKyAgICAgICAgIiAgdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBj
b2xsYXBzZTsgdGFibGUtbGF5b3V0OiBmaXhlZDsgfSIKKyAgICAgICAgIiAgdGFibGUsIHRkIHsg
Ym9yZGVyOiAxcHggc29saWQgI2QzZDdjZjsgYm9yZGVyLWxlZnQ6IG5vbmU7IGJvcmRlci1yaWdo
dDogbm9uZTsgfSIKKyAgICAgICAgIiAgcCB7IG1hcmdpbi1ib3R0b206IDMwcHg7IH0iCisgICAg
ICAgICIgIHRkIHsgcGFkZGluZzogMTVweDsgfSIKKyAgICAgICAgIiAgdGQuZGF0YSB7IHdpZHRo
OiAyMDBweDsgfSIKKyAgICAgICAgIiAgLnRhcmdldG5hbWUgeyBmb250LXdlaWdodDogYm9sZDsg
b3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxp
cHNpczsgfSIKKyAgICAgICAgIiAgLnRhcmdldHVybCB7IGNvbG9yOiAjYmFiZGI2OyBiYWNrZ3Jv
dW5kOiAjZWVlOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IG92ZXJmbG93LXdyYXA6IGJyZWFrLXdv
cmQ7IH0iCisgICAgICAgICIgIHRkLmlucHV0IHsgd2lkdGg6IDY0cHg7IH0iCisgICAgICAgICIg
IGlucHV0IHsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IDhweDsgfSIKKyAgICAgICAgIjwvc3R5bGU+
IgorICAgICAgICAiPC9oZWFkPjxib2R5PjxoMT5JbnNwZWN0YWJsZSB0YXJnZXRzPC9oMT4iCisg
ICAgICAgICI8ZGl2IGlkPVwidGFyZ2V0bGlzdFwiPjxwPk5vIHRhcmdldHMgZm91bmQ8L3A+PC9k
aXY+PC9ib2R5PiIKKyAgICAgICAgIjxzY3JpcHQ+IgorICAgICAgICAiZnVuY3Rpb24gdXBkYXRl
VGFyZ2V0cyhzdHIpIHsiCisgICAgICAgICAgICAibGV0IHRhcmdldERpdiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd0YXJnZXRsaXN0Jyk7IgorICAgICAgICAgICAgInRhcmdldERpdi5pbm5l
ckhUTUwgPSBzdHI7IgorICAgICAgICAifSIKKyAgICAgICAgIjwvc2NyaXB0PiIpOworICAgIGh0
bWxCdWlsZGVyLmFwcGVuZCgiPC9odG1sPiIpOworCisgICAgYXV0byBodG1sID0gaHRtbEJ1aWxk
ZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgYXV0byBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoaHRtbC5kYXRhKCksIGh0bWwubGVuZ3RoKCkpOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2UocmVxdWVzdFVSTCwgInRleHQvaHRtbCJfcywgaHRtbC5sZW5ndGgoKSwgIlVURi04Il9z
KTsKKyAgICB0YXNrLmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgdGFzay5kaWRS
ZWNlaXZlRGF0YShXVEZNb3ZlKGRhdGEpKTsKKyAgICB0YXNrLmRpZENvbXBsZXRlKFJlc291cmNl
RXJyb3IoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2Nv
bEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjYwMGVmZGVkNDg3NmJlZjcwNGZjYjI5NzQyNGQ4NWEy
MTg4ZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXIuaApAQCAtMCwwICsxLDcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJSZW1vdGVJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJVUkxTY2hlbWVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVVJMOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMU2NoZW1lVGFzazsKKworY2xh
c3MgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyIGZpbmFsIDogcHVibGljIFJlbW90ZUlu
c3BlY3Rvck9ic2VydmVyLCBwdWJsaWMgV2ViVVJMU2NoZW1lSGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI+IGNyZWF0ZShXZWJQ
YWdlUHJveHkmIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlSW5zcGVjdG9yUHJv
dG9jb2xIYW5kbGVyKHBhZ2UpKTsgfQorCisgICAgdm9pZCBpbnNwZWN0KGNvbnN0IFN0cmluZyYg
aG9zdEFuZFBvcnQsIENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYgdHlwZSk7
CisKK3ByaXZhdGU6CisgICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKFdlYlBhZ2VQ
cm94eSYgcGFnZSkKKyAgICAgICAgOiBtX3BhZ2UocGFnZSkgeyB9CisKKyAgICAvLyBSZW1vdGVJ
bnNwZWN0b3JPYnNlcnZlcgorICAgIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVj
dG9yQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3Bl
Y3RvckNsaWVudCYpIGZpbmFsIHsgfQorCisgICAgLy8gV2ViVVJMU2NoZW1lSGFuZGxlcgorICAg
IHZvaWQgcGxhdGZvcm1TdGFydFRhc2soV2ViUGFnZVByb3h5JiwgV2ViVVJMU2NoZW1lVGFzayYp
IGZpbmFsOworICAgIHZvaWQgcGxhdGZvcm1TdG9wVGFzayhXZWJQYWdlUHJveHkmLCBXZWJVUkxT
Y2hlbWVUYXNrJikgZmluYWwgeyB9CisgICAgdm9pZCBwbGF0Zm9ybVRhc2tDb21wbGV0ZWQoV2Vi
VVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQorCisgICAgdm9pZCB1cGRhdGVUYXJnZXRMaXN0KCk7
CisKKyAgICB2b2lkIHJ1blNjcmlwdChjb25zdCBTdHJpbmcmKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVJbnNwZWN0b3JDbGllbnQ+IG1faW5zcGVjdG9yQ2xpZW50OworICAgIFdlYlBh
Z2VQcm94eSYgbV9wYWdlOworICAgIGJvb2wgbV9wYWdlTG9hZGVkIHsgZmFsc2UgfTsKKyAgICBT
dHJpbmcgbV90YXJnZXRMaXN0c0h0bWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivd2luL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTBjMmI5NGYyZmY1NGE0ZjBkYTllYWVlNDAx
MDhjOTllYWEwYmJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAKQEAgLTAsMCArMSwx
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bW90ZVdlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
KworI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVj
dG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgTFBDVFNUUiBSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gVEVYVCgiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlQb2lu
dGVyIik7Citjb25zdCBMUENXU1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lID0g
TCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsYXNzIjsKKworTFJFU1VMVCBDQUxMQkFDSyBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5KiBj
bGllbnQgPSByZWludGVycHJldF9jYXN0PFJlbW90ZVdlYkluc3BlY3RvclByb3h5Kj4oOjpHZXRQ
cm9wKGh3bmQsIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRlclByb3ApKTsKKworICAgIHN3
aXRjaCAobXNnKSB7CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAgICByZXR1cm4gY2xpZW50LT5z
aXplQ2hhbmdlKCk7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+
b25DbG9zZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKK3N0
YXRpYyBBVE9NIHJlZ2lzdGVyV2luZG93Q2xhc3MoKQoreworICAgIHN0YXRpYyBib29sIGhhdmVS
ZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5k
b3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBXTkRDTEFTU0VYIHdjZXg7Cisg
ICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5zdHlsZSAgICAg
ICAgICA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpXbmRQcm9jOworICAgIHdjZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JX
bmRFeHRyYSAgICAgPSAwOworICAgIHdjZXguaEluc3RhbmNlICAgICAgPSAwOworICAgIHdjZXgu
aEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vyc29y
KDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IDA7CisgICAgd2NleC5s
cHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IFJlbW90ZVdlYklu
c3BlY3RvclByb3h5Q2xhc3NOYW1lOworICAgIHdjZXguaEljb25TbSAgICAgICAgPSAwOworCisg
ICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisgICAgcmV0dXJuIDo6UmVnaXN0
ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
c2l6ZUNoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAm
cmVjdCk7CisgICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3LT53aW5kb3coKSwgMCwgcmVjdC5s
ZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICByZXR1cm4gMDsKK30KKworTFJFU1VMVCBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6b25DbG9zZSgpCit7CisgICAgOjpTaG93V2luZG93KG1fZnJvbnRl
bmRIYW5kbGUsIFNXX0hJREUpOworICAgIGZyb250ZW5kRGlkQ2xvc2UoKTsKKyAgICByZXR1cm4g
MDsKK30KKworV2ViUGFnZVByb3h5KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
cmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQoreworICAgIFJlZlB0cjxXZWJQcmVmZXJlbmNl
cz4gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKFN0cmluZygpLCAiV2ViS2l0
Mi4iLCAiV2ViS2l0Mi4iKTsKKyAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJv
bUZpbGVVUkxzKHRydWUpOworCisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIHByZWZl
cmVuY2VzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOworICAgIHByZWZlcmVuY2Vz
LT5zZXRMb2dzUGFnZU1lc3NhZ2VzVG9TeXN0ZW1Db25zb2xlRW5hYmxlZCh0cnVlKTsKKyNlbmRp
ZgorCisgICAgUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwID0gV2ViUGFnZUdyb3VwOjpj
cmVhdGUoaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBhZ2UobnVsbHB0cikpOworCisg
ICAgYXV0byBwYWdlQ29uZmlndXJhdGlvbiA9IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OmNyZWF0
ZSgpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcm9jZXNzUG9vbCgmaW5zcGVjdG9yUHJv
Y2Vzc1Bvb2woaW5zcGVjdG9yTGV2ZWxGb3JQYWdlKG51bGxwdHIpKSk7CisgICAgcGFnZUNvbmZp
Z3VyYXRpb24tPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdldCgpKTsKKyAgICBwYWdlQ29u
ZmlndXJhdGlvbi0+c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5nZXQoKSk7CisKKyAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJlY3QoNjAsIDIwMCwgMTUwMCwgMTAwMCk7CisgICAgcmVnaXN0ZXJXaW5kb3dD
bGFzcygpOworICAgIG1fZnJvbnRlbmRIYW5kbGUgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAg
ICAgICByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwgMCwg
MCwgMCwgMCk7CisKKyAgICA6OlNldFByb3AobV9mcm9udGVuZEhhbmRsZSwgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHlQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsK
KyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRIYW5kbGUsIFNXX1NIT1cpOworCisgICAgUkVDVCBy
OworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kSGFuZGxlLCAmcik7CisgICAgbV93ZWJW
aWV3ID0gV2ViVmlldzo6Y3JlYXRlKHIsIHBhZ2VDb25maWd1cmF0aW9uLCBtX2Zyb250ZW5kSGFu
ZGxlKTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7Cit9CisKK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpIHsgfQordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKSB7IH0KK3ZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBib29sLCBib29sKSB7IH0KK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2lu
ZG93RHJhZygpIHsgfQordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVu
SW5OZXdUYWIoY29uc3QgU3RyaW5nJikgeyB9Cit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8m
KSB7IH0KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCit7CisgICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRlbmRIYW5k
bGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3Ivd2luL1dlYkluc3BlY3RvclByb3h5V2luLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGVh
Yzk3MzE3OTZmMjU1YTEwYmNlODQ3ZDZiMGJmNmE3OTc5MDdiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JQcm94eVdp
bi5jcHAKQEAgLTAsMCArMSw0NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgorCisjaW5jbHVkZSAiQVBJTmF2aWdh
dGlvbi5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIKKyNpbmNsdWRlICJBUElQ
YWdlQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3Vw
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMu
aCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVXaW4uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvV2lu
ZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZS5oPgorCisj
aWYgVVNFKENGKQorI2luY2x1ZGUgPHd0Zi9jZi9DRlVSTEV4dHJhcy5oPgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgTFBDV1NUUiBXZWJJbnNwZWN0b3JQcm94
eVBvaW50ZXJQcm9wID0gTCJXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIiOworc3RhdGljIGNvbnN0
IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUgPSBMIldlYkluc3BlY3RvclByb3h5
Q2xhc3MiOworCitzdHJ1Y3QgSW5zcGVjdGVkV2luZG93SW5mbyB7CisgICAgaW50IGxlZnQ7Cisg
ICAgaW50IHRvcDsKKyAgICBpbnQgdmlld1dpZHRoOworICAgIGludCB2aWV3SGVpZ2h0OworICAg
IGludCBwYXJlbnRXaWR0aDsKKyAgICBpbnQgcGFyZW50SGVpZ2h0OworfTsKKworc3RhdGljIElu
c3BlY3RlZFdpbmRvd0luZm8gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhIV05EIGluc3BlY3RlZFdp
bmRvdywgSFdORCBwYXJlbnRXaW5kb3cpCit7CisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xp
ZW50UmVjdChpbnNwZWN0ZWRXaW5kb3csICZyZWN0KTsKKyAgICA6Ok1hcFdpbmRvd1BvaW50cyhp
bnNwZWN0ZWRXaW5kb3csIHBhcmVudFdpbmRvdywgKExQUE9JTlQpJnJlY3QsIDIpOworCisgICAg
UkVDVCBwYXJlbnRSZWN0OworICAgIDo6R2V0Q2xpZW50UmVjdChwYXJlbnRXaW5kb3csICZwYXJl
bnRSZWN0KTsKKyAgICByZXR1cm4geyByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBwYXJlbnRSZWN0LnJpZ2h0IC0gcGFy
ZW50UmVjdC5sZWZ0LCBwYXJlbnRSZWN0LmJvdHRvbSAtIHBhcmVudFJlY3QudG9wIH07Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05EIGh3bmQs
IFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgc3dpdGNoIChtc2cpIHsK
KyAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOiB7CisgICAgICAgIGlmICghbV9pc0F0dGFj
aGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gd2luZG93UG9zID0gcmVp
bnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFyYW0pOworCisgICAgICAgIGlmICh3aW5kb3dQ
b3MtPmZsYWdzICYgU1dQX05PU0laRSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBI
V05EIHBhcmVudCA9IEdldFBhcmVudChod25kKTsKKyAgICAgICAgUkVDVCBwYXJlbnRSZWN0Owor
ICAgICAgICBHZXRDbGllbnRSZWN0KHBhcmVudCwgJnBhcmVudFJlY3QpOworCisgICAgICAgIFJF
Q1QgaW5zcGVjdG9yUmVjdDsKKyAgICAgICAgR2V0Q2xpZW50UmVjdChtX2luc3BlY3RvclZpZXdX
aW5kb3csICZpbnNwZWN0b3JSZWN0KTsKKworICAgICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNp
ZGUpIHsKKyAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnNwZWN0b3JIZWlnaHQgPSBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGluc3BlY3RvclJlY3Qu
Ym90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3AsIHdpbmRvd1Bvcy0+Y3kpOworICAgICAgICAgICAg
d2luZG93UG9zLT5jeSAtPSBpbnNwZWN0b3JIZWlnaHQ7CisgICAgICAgICAgICA6OlNldFdpbmRv
d1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55
ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9a
T1JERVIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6TGVmdDoKKyAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6IHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvcldpZHRoID0gV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd1dpZHRoKGluc3Bl
Y3RvclJlY3QucmlnaHQgLSBpbnNwZWN0b3JSZWN0LmxlZnQsIHdpbmRvd1Bvcy0+Y3gpOworICAg
ICAgICAgICAgd2luZG93UG9zLT5jeCAtPSBpbnNwZWN0b3JXaWR0aDsKKyAgICAgICAgICAgIDo6
U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2luZG93UG9zLT54ICsgd2lu
ZG93UG9zLT5jeCwgd2luZG93UG9zLT55LCBpbnNwZWN0b3JXaWR0aCwgd2luZG93UG9zLT5jeSwg
U1dQX05PWk9SREVSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitMUkVTVUxUIENB
TExCQUNLIFdlYkluc3BlY3RvclByb3h5Ojp3bmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIGNs
aWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPig6OkdldFByb3AoaHdu
ZCwgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOworICAgIHN3aXRjaCAobXNnKSB7Cisg
ICAgY2FzZSBXTV9TSVpFOgorICAgICAgICA6OlNldFdpbmRvd1BvcyhjbGllbnQtPm1faW5zcGVj
dG9yVmlld1dpbmRvdywgMCwgMCwgMCwgTE9XT1JEKGxQYXJhbSksIEhJV09SRChsUGFyYW0pLCBT
V1BfTk9aT1JERVIpOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFdNX0NMT1NFOgorICAg
ICAgICBjbGllbnQtPmNsb3NlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1z
Zywgd1BhcmFtLCBsUGFyYW0pOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpyZWdpc3Rl
cldpbmRvd0NsYXNzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0Ns
YXNzID0gZmFsc2U7CisKKyAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisK
KyAgICBXTkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NF
WCk7CisgICAgd2NleC5zdHlsZSA9IDA7CisgICAgd2NleC5scGZuV25kUHJvYyA9IHduZFByb2M7
CisgICAgd2NleC5jYkNsc0V4dHJhID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgPSAwOworICAg
IHdjZXguaEluc3RhbmNlID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKTsKKyAgICB3Y2V4LmhJ
Y29uID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgPSBMb2FkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Cisg
ICAgd2NleC5oYnJCYWNrZ3JvdW5kID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSA9IDA7Cisg
ICAgd2NleC5scHN6Q2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWU7CisgICAg
d2NleC5oSWNvblNtID0gMDsKKyAgICByZXR1cm4gOjpSZWdpc3RlckNsYXNzRXgoJndjZXgpOwor
fQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJl
ZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvblJlZiwgV0tG
cmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgLy8gQWxsb3cgbm9uLW1haW4gZnJhbWVzIHRvIG5hdmlnYXRl
IGFueXdoZXJlLgorICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFtZSA9IHRvSW1wbChuYXZp
Z2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKKyAgICBpZiAoc291cmNlRnJhbWUgJiYg
IXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAgIHRvSW1wbChsaXN0ZW5lclJl
ZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgV2ViSW5z
cGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViSW5z
cGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yUHJveHkp
OworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSB0b0ltcGwobmF2aWdh
dGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKKworICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhl
IG1haW4gaW5zcGVjdG9yIGZpbGUuCisgICAgaWYgKFdlYkluc3BlY3RvclByb3h5Ojppc01haW5P
clRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7CisgICAgICAgIHRvSW1wbChsaXN0
ZW5lclJlZiktPnVzZSh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUHJl
dmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBpbnNwZWN0b3IncyBwYWdl
LgorICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOworCisgICAgLy8gQW5kIGluc3Rl
YWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgd2ViSW5zcGVjdG9yUHJveHkt
Pmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3Rh
dGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSk7CisgICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKKyAgICB3ZWJJbnNwZWN0b3JQcm94
eS0+Y2xvc2VGb3JDcmFzaCgpOworfQorCitXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCit7CisgICAgQVNTRVJUKGluc3BlY3RlZFBh
Z2UoKSk7CisKKyAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShT
dHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7CisjaWYgRU5BQkxFKERFVkVMT1BFUl9N
T0RFKQorICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3Rv
ciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KKyAgICBwcmVmZXJl
bmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKKyAgICBwcmVmZXJlbmNlcy0+
c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7CisjZW5kaWYK
KyAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKHRydWUpOwor
ICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHsgfSk7CisgICAgYXV0
byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQYWdlR3JvdXBJZGVu
dGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKKyAgICBhdXRvIHBhZ2VDb25maWd1cmF0
aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgcGFnZUNvbmZpZ3Vy
YXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0aW9uTGV2
ZWwoKSkpOworICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNl
cy5wdHIoKSk7CisgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdlR3JvdXAu
cHRyKCkpOworCisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5hdmlnYXRpb25DbGllbnQg
PSB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorICAgICAgICBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uLAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
UmVzcG9uc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZAor
ICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbgorICAgICAg
ICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbgor
ICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCisgICAgICAgIG51bGxwdHIs
IC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbE5hdmln
YXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJh
bWUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRMb2FkCisgICAgICAgIG51
bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KKyAgICAgICAgbnVsbHB0ciwgLy8g
cmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQorICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgd2ViUHJvY2Vzc0RpZENyYXNoLAor
ICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5CisKKyAgICAgICAgbnVs
bHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQorICAgICAgICBudWxscHRyLCAvLyB3
aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRW5kTmF2aWdh
dGlvbkdlc3R1cmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1
cmVTbmFwc2hvdAorICAgIH07CisKKyAgICBSRUNUIHIgPSB7IDAsIDAsIHN0YXRpY19jYXN0PExP
Tkc+KGluaXRpYWxXaW5kb3dXaWR0aCksIHN0YXRpY19jYXN0PExPTkc+KGluaXRpYWxXaW5kb3dI
ZWlnaHQpIH07CisgICAgYXV0byBwYWdlID0gaW5zcGVjdGVkUGFnZSgpOworICAgIG1faW5zcGVj
dGVkVmlld1dpbmRvdyA9IHBhZ2UtPnZpZXdXaWRnZXQoKTsKKyAgICBtX2luc3BlY3RlZFZpZXdQ
YXJlbnRXaW5kb3cgPSA6OkdldFBhcmVudChtX2luc3BlY3RlZFZpZXdXaW5kb3cpOworICAgIGF1
dG8gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJhdGlvbiwgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICBtX2luc3BlY3RvclZpZXcgPSAmdmlldy5sZWFrUmVm
KCk7CisgICAgYXV0byBpbnNwZWN0b3JQYWdlID0gbV9pbnNwZWN0b3JWaWV3LT5wYWdlKCk7Cisg
ICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gaW5zcGVjdG9yUGFnZS0+dmlld1dpZGdldCgpOwor
ICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAm
bmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKKworICAgIHJldHVybiBpbnNwZWN0b3JQYWdlOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCkKK3sKKyAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxp
c3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7CisgICAgbV9pbnNwZWN0b3JWaWV3
ID0gbnVsbHB0cjsKKyAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOworICAgIGlmIChtX2lu
c3BlY3RvclZpZXdXaW5kb3cpIHsKKyAgICAgICAgOjpEZXN0cm95V2luZG93KG1faW5zcGVjdG9y
Vmlld1dpbmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yVmlld1dpbmRvdyA9IG51bGxwdHI7Cisg
ICAgfQorICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdykgeworICAgICAgICA6OlJlbW92
ZVByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3RvclByb3h5UG9pbnRlclBy
b3ApOworICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpOwor
ICAgICAgICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IG51bGxwdHI7CisgICAgfQorICAgIG1f
aW5zcGVjdGVkVmlld1dpbmRvdyA9IG51bGxwdHI7CisgICAgbV9pbnNwZWN0ZWRWaWV3UGFyZW50
V2luZG93ID0gbnVsbHB0cjsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JQYWdlVVJMKCkKK3sKKyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1s
VVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRC
dW5kbGUoKSwgQ0ZTVFIoIk1haW4iKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoIldlYkluc3BlY3Rv
clVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7Cisj
ZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCit7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0
cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwo
V2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJUZXN0IiksIENGU1RSKCJodG1sIiksIENG
U1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGh0bWxV
UkxSZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK1N0cmlu
ZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCit7CisjaWYgVVNFKENGKQor
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYmFzZVVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5
UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJXZWJJbnNwZWN0b3JV
SSIpLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKGJhc2VV
UkxSZWYuZ2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK0RlYnVn
Z2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0ZvckxvY2FsRGVidWdnYWJsZSgp
Cit7CisgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwNTUzNz46IHRoaXMgc2hv
dWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEuCisgICAgcmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0
YTo6ZW1wdHkoKTsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5z
cGVjdGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICBSRUNUIHJlY3Q7CisgICAgOjpHZXRDbGllbnRS
ZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOworICAgIHJldHVybiByZWN0LmJvdHRv
bSAtIHJlY3QudG9wOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dXaWR0aCgpCit7CisgICAgUkVDVCByZWN0OworICAgIDo6R2V0Q2xpZW50
UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKKyAgICByZXR1cm4gcmVjdC5yaWdo
dCAtIHJlY3QubGVmdDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2goKQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRTaXplID0g
MzAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0YWNoZWRXaWR0aCA9IDc1
MDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUw
OworCisgICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93ICYmIDo6R2V0UGFyZW50KG1faW5z
cGVjdG9yVmlld1dpbmRvdykgPT0gbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cpIHsKKyAgICAgICAg
OjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3BlY3RlZFZpZXdQYXJlbnRX
aW5kb3cpOworICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFNX
X0hJREUpOworICAgIH0KKworICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6
YWRkTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKKworICAgIGlmIChtX2F0
dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsKKyAgICAgICAgdW5zaWdu
ZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dIZWlnaHQo
KSAqIDMgLyA0OworICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHN0ZDo6
bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwg
bWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVk
IG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpICog
MyAvIDQ7CisgICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aChzdGQ6Om1heCht
aW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11
bUF0dGFjaGVkV2lkdGgpKSk7CisgICAgfQorICAgIDo6U2hvd1dpbmRvdyhtX2luc3BlY3RvclZp
ZXdXaW5kb3csIFNXX1NIT1cpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bURldGFjaCgpCit7CisgICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhhc1J1bm5pbmdQcm9jZXNz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9pbnNwZWN0b3JEZXRhY2hXaW5kb3cp
IHsKKyAgICAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICAgICAgICBtX2luc3BlY3RvckRl
dGFjaFdpbmRvdyA9IDo6Q3JlYXRlV2luZG93RXgoMCwgV2ViSW5zcGVjdG9yUHJveHlDbGFzc05h
bWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgICAgICAgICBDV19VU0VERUZBVUxULCBD
V19VU0VERUZBVUxULCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxXaW5kb3dIZWlnaHQsCisg
ICAgICAgICAgICAwLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKKyAgICAgICAg
OjpTZXRQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNwZWN0b3JQcm94eVBvaW50
ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOworICAgIH0KKworICAgIFdl
YkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0
ZWRWaWV3V2luZG93LCB0aGlzKTsKKworICAgIFJFQ1QgcmVjdDsKKyAgICA6OkdldENsaWVudFJl
Y3QobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csICZyZWN0KTsKKyAgICBhdXRvIHdpbmRvd0luZm8g
PSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICA6OlNldFBhcmVudChtX2luc3BlY3RvclZpZXdXaW5k
b3csIG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3Bl
Y3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90
dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9pbnNw
ZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8udG9wLCB3aW5k
b3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnBhcmVudEhl
aWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOworCisgICAgaWYgKG1faXNWaXNp
YmxlKQorICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFNXX1NI
T1cpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBhdXRvIHdpbmRvd0luZm8gPSBnZXRJ
bnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0ZWRWaWV3
UGFyZW50V2luZG93KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3cs
IDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSBoZWlnaHQsIHdp
bmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIGhlaWdodCwgU1dQX05PWk9S
REVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdXaW5kb3csIDAsIHdpbmRv
d0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5k
b3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2luZG93SW5mby50b3AsIFNX
UF9OT1pPUkRFUik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0
YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBhdXRvIHdpbmRvd0luZm8g
PSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywgbV9pbnNwZWN0
ZWRWaWV3UGFyZW50V2luZG93KTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdX
aW5kb3csIDAsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aWR0aCwgd2luZG93SW5mby50b3As
IHdpZHRoLCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9a
T1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmlld1dpbmRvdywgMCwgd2lu
ZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5wYXJlbnRXaWR0aCAtIHdp
bmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3aW5kb3dJbmZvLnRvcCwg
U1dQX05PWk9SREVSKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1C
cmluZ1RvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1J
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgLyogdXJsICovKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5n
ZWQoYm9vbCAvKiBhdmFpbGFibGUgKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVuZFdpbmRvdygpCit7
CisgICAgcGxhdGZvcm1EZXRhY2goKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRX
aW5kb3dEcmFnKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDY5MjhjYTJmYmZiNjkzOTA2MmUzY2QxNGJiN2JhNmYyZmRjODdm
NWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJv
eHkuaCIKLQotI2luY2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
RnJhbWVQcm94eS5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNs
dWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94
eT4gSW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQot
ewotICAgIHJldHVybiBtYWtlVW5pcXVlPEluc3BlY3RvclRhcmdldFByb3h5PihwYWdlLCB0YXJn
ZXRJZCwgdHlwZSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4g
SW5zcGVjdG9yVGFyZ2V0UHJveHk6OmNyZWF0ZShQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlz
aW9uYWxQYWdlLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRh
cmdldFR5cGUgdHlwZSkKLXsKLSAgICBhdXRvIHRhcmdldCA9IEluc3BlY3RvclRhcmdldFByb3h5
OjpjcmVhdGUocHJvdmlzaW9uYWxQYWdlLnBhZ2UoKSwgdGFyZ2V0SWQsIHR5cGUpOwotICAgIHRh
cmdldC0+bV9wcm92aXNpb25hbFBhZ2UgPSBtYWtlV2Vha1B0cihwcm92aXNpb25hbFBhZ2UpOwot
ICAgIHJldHVybiB0YXJnZXQ7Ci19Ci0KLUluc3BlY3RvclRhcmdldFByb3h5OjpJbnNwZWN0b3JU
YXJnZXRQcm94eShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSB0eXBlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0g
ICAgLCBtX2lkZW50aWZpZXIodGFyZ2V0SWQpCi0gICAgLCBtX3R5cGUodHlwZSkKLXsKLX0KLQot
dm9pZCBJbnNwZWN0b3JUYXJnZXRQcm94eTo6Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hh
bm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpCi17Ci0gICAgaWYgKG1fcHJvdmlz
aW9uYWxQYWdlKSB7Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpDb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSwgY29ubmVjdGlvblR5cGUpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nl
c3MoKSkKLSAgICAgICAgbV9wYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbm5lY3RJbnNw
ZWN0b3IoaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSkpOwotfQotCi12b2lkIEluc3BlY3Rv
clRhcmdldFByb3h5OjpkaXNjb25uZWN0KCkKLXsKLSAgICBpZiAoaXNQYXVzZWQoKSkKLSAgICAg
ICAgcmVzdW1lKCk7Ci0KLSAgICBpZiAobV9wcm92aXNpb25hbFBhZ2UpIHsKLSAgICAgICAgbV9w
cm92aXNpb25hbFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpc2Nvbm5lY3RJbnNwZWN0
b3IoaWRlbnRpZmllcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9w
YWdlLmhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaXNjb25uZWN0SW5zcGVjdG9yKGlkZW50aWZpZXIoKSkpOwotfQotCi12b2lkIElu
c3BlY3RvclRhcmdldFByb3h5OjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7Ci0gICAgICAgIG1f
cHJvdmlzaW9uYWxQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZW5kTWVzc2FnZVRvVGFy
Z2V0QmFja2VuZChpZGVudGlmaWVyKCksIG1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX3BhZ2UuaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wYWdl
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGlkZW50
aWZpZXIoKSwgbWVzc2FnZSkpOwotfQotCi12b2lkIEluc3BlY3RvclRhcmdldFByb3h5OjpkaWRD
b21taXRQcm92aXNpb25hbFRhcmdldCgpCi17Ci0gICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxs
cHRyOwotfQotCi1ib29sIEluc3BlY3RvclRhcmdldFByb3h5Ojppc1Byb3Zpc2lvbmFsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gISFtX3Byb3Zpc2lvbmFsUGFnZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JU
YXJnZXRQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yVGFyZ2V0UHJv
eHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIyMzljZWM4ZTE4ODUwZjM1Zjdm
ODhhOWM0ZWJhZGM2MmJmNDAyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3JUYXJnZXRQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0j
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBy
b3Zpc2lvbmFsUGFnZVByb3h5OwotY2xhc3MgV2ViUGFnZVByb3h5OwotCi0vLyBOT1RFOiBUaGlz
IFVJUHJvY2VzcyBzaWRlIEluc3BlY3RvclRhcmdldCBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGZy
b250ZW5kIGNoYW5uZWwsIHNpbmNlCi0vLyBhbnkgdGFyZ2V0IC0+IGZyb250ZW5kIG1lc3NhZ2Vz
IHdpbGwgYmUgcm91dGVkIHRvIHRoZSBXZWJQYWdlUHJveHkgd2l0aCBhIHRhcmdldElkLgotCi1j
bGFzcyBJbnNwZWN0b3JUYXJnZXRQcm94eSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvclRhcmdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0UHJveHkpOwotcHVibGljOgotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0ZShXZWJQYWdlUHJveHkm
LCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUp
OwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJveHk+IGNyZWF0
ZShQcm92aXNpb25hbFBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSk7Ci0gICAgSW5zcGVjdG9yVGFyZ2V0UHJveHkoV2ViUGFn
ZVByb3h5JiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJn
ZXRUeXBlKTsKLSAgICB+SW5zcGVjdG9yVGFyZ2V0UHJveHkoKSA9IGRlZmF1bHQ7Ci0KLSAgICBJ
bnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9Ci0KLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0KCk7
Ci0gICAgYm9vbCBpc1Byb3Zpc2lvbmFsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNv
bm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdl
VG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAg
IFdlYlBhZ2VQcm94eSYgbV9wYWdlOwotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgSW5z
cGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIG1fdHlwZTsKLSAgICBXZWFrUHRyPFByb3Zpc2lv
bmFsUGFnZVByb3h5PiBtX3Byb3Zpc2lvbmFsUGFnZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTkyYzI5ZjQxODFlMDBh
MTUxMDZlYTFiMjkwOTQwNTg3MmVjNDQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5Lmgi
Ci0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxlSW5mby5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRp
b24uaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpSZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eSgpCi0gICAgOiBtX2RlYnVnZ2FibGVJbmZvKEFQSTo6RGVidWdnYWJsZUlu
Zm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpKQotewotfQotCi1SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6flJlbW90ZVdlYkluc3BlY3RvclByb3h5KCkKLXsKLSAgICBBU1NF
UlQoIW1faW5zcGVjdG9yUGFnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OmludmFsaWRhdGUoKQotewotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0K
LXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlKGJvb2wgYXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQot
ICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclVJOjpTZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUpLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGF2YWls
YWJsZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6bG9hZChS
ZWY8QVBJOjpEZWJ1Z2dhYmxlSW5mbz4mJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5nJiBi
YWNrZW5kQ29tbWFuZHNVUkwpCi17Ci0gICAgY3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7
Ci0KLSAgICBtX2RlYnVnZ2FibGVJbmZvID0gV1RGTW92ZShkZWJ1Z2dhYmxlSW5mbyk7Ci0gICAg
bV9iYWNrZW5kQ29tbWFuZHNVUkwgPSBiYWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJbml0aWFsaXpl
KG1fZGVidWdnYWJsZUluZm8tPmRlYnVnZ2FibGVJbmZvRGF0YSgpLCBiYWNrZW5kQ29tbWFuZHNV
UkwpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOwotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpjbG9zZUZyb21CYWNrZW5kKCkKLXsKLSAgICBjbG9zZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjbG9zZUZy
b21DcmFzaCgpCi17Ci0gICAgLy8gQmVoYXZlIGFzIGlmIHRoZSBmcm9udGVuZCBqdXN0IGNsb3Nl
ZCwgc28gY2xpZW50cyBhcmUgaW5mb3JtZWQgdGhlIGZyb250ZW5kIGlzIGdvbmUuCi0gICAgZnJv
bnRlbmREaWRDbG9zZSgpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaG93
KCkKLXsKLSAgICBicmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Ojpmcm9udGVuZERpZENsb3NlKCkKLXsKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBt
X2NsaWVudC0+Y2xvc2VGcm9tRnJvbnRlbmQoKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5k
V2luZG93KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnJlb3BlbigpCi17
Ci0gICAgQVNTRVJUKCFtX2JhY2tlbmRDb21tYW5kc1VSTC5pc0VtcHR5KCkpOwotCi0gICAgY2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICBsb2FkKG1fZGVidWdnYWJsZUluZm8uY29w
eVJlZigpLCBtX2JhY2tlbmRDb21tYW5kc1VSTCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OnJlc2V0U3RhdGUoKQotewotICAgIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotfQot
Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpicmluZ1RvRnJvbnQoKQotewotICAgIHBs
YXRmb3JtQnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnNhdmUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Ym9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZURpYWxvZykKLXsKLSAgICBwbGF0Zm9y
bVNhdmUoc3VnZ2VzdGVkVVJMLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVEaWFs
b2cpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjphcHBlbmQoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBwbGF0Zm9y
bUFwcGVuZChzdWdnZXN0ZWRVUkwsIGNvbnRlbnQpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpzZXRTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHBs
YXRmb3JtU2V0U2hlZXRSZWN0KHJlY3QpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpzdGFydFdpbmRvd0RyYWcoKQotewotICAgIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Jbk5ld1RhYihjb25zdCBT
dHJpbmcmIHVybCkKLXsKLSAgICBwbGF0Zm9ybU9wZW5Jbk5ld1RhYih1cmwpOwotfQotCi12b2lk
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNh
dGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUo
Y2VydGlmaWNhdGVJbmZvKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwot
fQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2VBbmRX
aW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faW5zcGVjdG9yUGFnZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCk7Ci0KLSAgICB0cmFja0luc3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlLCBudWxscHRyKTsK
LQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwoKm1faW5zcGVjdG9yUGFnZSwgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNwZWN0b3JQYWdl
LT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBh
Z2VJRCgpKTsKLQotICAgIHVudHJhY2tJbnNwZWN0b3JQYWdlKG1faW5zcGVjdG9yUGFnZSk7Ci0K
LSAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRyOwotCi0gICAgcGxhdGZvcm1DbG9zZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi0jaWYgIUVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKSB8
fCAoIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikpCi1X
ZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250
ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNl
dFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5n
VG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsgfQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNo
ZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKSB7IH0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1D
bG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpIHsgfQotI2VuZGlmIC8vICFFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikgfHwgKCFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFU
Rk9STShXSU4pKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmYWI1OGY4Y2UwNmVhMjFmYmVlOTEzODk0MzI0NmNhZThmNTRmM2E1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQVBJT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNf
Q0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXI7Ci1P
QkpDX0NMQVNTIFdLUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcjsKLU9CSkNfQ0xB
U1MgV0tXZWJWaWV3OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENlcnRp
ZmljYXRlSW5mbzsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBEZWJ1Z2dhYmxlSW5mbzsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFdl
YlZpZXc7Ci0KLWNsYXNzIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Q2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCgpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSA9IDA7Ci19OwotCi1jbGFz
cyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYklu
c3BlY3RvclByb3h5PiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFJlbW90ZVdlYkluc3BlY3RvclByb3h5PiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkoKSk7Ci0g
ICAgfQotCi0gICAgflJlbW90ZVdlYkluc3BlY3RvclByb3h5KCk7Ci0KLSAgICB2b2lkIHNldENs
aWVudChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0g
Y2xpZW50OyB9Ci0KLSAgICBib29sIGlzVW5kZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZvaWQgc2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCk7Ci0KLSAg
ICB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZvaWQgbG9hZChSZWY8QVBJOjpEZWJ1Z2dhYmxl
SW5mbz4mJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpOwotICAgIHZvaWQgY2xv
c2VGcm9tQmFja2VuZCgpOwotICAgIHZvaWQgc2hvdygpOwotCi0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBOU1dpbmRvdyAqd2luZG93KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3cuZ2V0KCk7IH0K
LSAgICBXS1dlYlZpZXcgKndlYlZpZXcoKSBjb25zdDsKLQotICAgIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc2hlZXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldFJlY3Q7IH0KLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoY29uc3Qg
Q1N0cmluZyYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAgTFJFU1VM
VCBzaXplQ2hhbmdlKCk7Ci0gICAgTFJFU1VMVCBvbkNsb3NlKCk7Ci0KLSAgICBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSNlbmRp
ZgotCi0gICAgdm9pZCBjbG9zZUZyb21DcmFzaCgpOwotCi1wcml2YXRlOgotICAgIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5KCk7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7Ci0KLSAgICAvLyBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBtZXNzYWdlcy4KLSAgICB2
b2lkIGZyb250ZW5kRGlkQ2xvc2UoKTsKLSAgICB2b2lkIHJlb3BlbigpOwotICAgIHZvaWQgcmVz
ZXRTdGF0ZSgpOwotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBzYXZlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNv
ZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwotICAgIHZvaWQgc2V0U2hlZXRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgc3RhcnRXaW5kb3dEcmFnKCk7Ci0g
ICAgdm9pZCBvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAgIHZvaWQgc2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotICAgIHZvaWQgY3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgdm9pZCBjbG9zZUZyb250ZW5kUGFnZUFu
ZFdpbmRvdygpOwotCi0gICAgLy8gUGxhdGZvcm0gaW1wbGVtZW50YXRpb25zLgotICAgIFdlYlBh
Z2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lk
IHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLSAgICB2b2lkIHBsYXRmb3Jt
UmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsKLSAgICB2b2lk
IHBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcyk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQp
OwotICAgIHZvaWQgcGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpOwotICAgIHZvaWQgcGxhdGZv
cm1PcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgcGxhdGZvcm1TaG93
Q2VydGlmaWNhdGUoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJik7Ci0KLSAgICBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eUNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07Ci0gICAgV2Vi
UGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07Ci0KLSAgICBSZWY8QVBJOjpE
ZWJ1Z2dhYmxlSW5mbz4gbV9kZWJ1Z2dhYmxlSW5mbzsKLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29t
bWFuZHNVUkw7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPFdLSW5zcGVjdG9y
Vmlld0NvbnRyb2xsZXI+IG1faW5zcGVjdG9yVmlldzsKLSAgICBSZXRhaW5QdHI8TlNXaW5kb3c+
IG1fd2luZG93OwotICAgIFJldGFpblB0cjxXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0Fk
YXB0ZXI+IG1fb2JqQ0FkYXB0ZXI7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJldGFpblB0cjxOU1VS
TD4+IG1fc3VnZ2VzdGVkVG9BY3R1YWxVUkxNYXA7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1f
c2hlZXRSZWN0OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIEd0a1dpZGdldCogbV93
ZWJWaWV3IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV93aW5kb3cgeyBudWxscHRyIH07
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAgSFdORCBtX2Zyb250ZW5kSGFu
ZGxlOwotICAgIFJlZlB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7Ci0jZW5kaWYKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmUwOTFiNzhmYjZhOGQ1ZGY3YjIzZTA1MGZmZmYxZDkyYTRiZDRiMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9u
dWxsCkBAIC0xLDQwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgewotICAgIEZyb250ZW5k
RGlkQ2xvc2UoKQotICAgIFJlb3BlbigpCi0gICAgUmVzZXRTdGF0ZSgpCi0gICAgQnJpbmdUb0Zy
b250KCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQotICAgIEFwcGVuZChTdHJpbmcgZmlsZW5h
bWUsIFN0cmluZyBjb250ZW50KQotCi0gICAgU2V0U2hlZXRSZWN0KFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQotCi0gICAgU3RhcnRXaW5kb3dEcmFnKCkKLQotICAgIE9wZW5Jbk5ld1RhYihTdHJp
bmcgdXJsKQotICAgIFNob3dDZXJ0aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2Vy
dGlmaWNhdGVJbmZvKQotCi0gICAgU2VuZE1lc3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2Up
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTgzOTFjNDIwYzU0NTU4Yzhl
YWU3NmYzYmMxNjZlZTFjYTRjZTEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1zdHJ1Y3QgSGlnaGxpZ2h0OwotfQotCi1AaW50ZXJmYWNlIFdLSW5zcGVj
dG9ySGlnaGxpZ2h0VmlldyA6IFVJVmlldyB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKl9sYXllcnM7
IC8vIENBU2hhcGVMYXllcnMuCi19Ci0tICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SGln
aGxpZ2h0JiloaWdobGlnaHQ7Ci1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwNjVmMGMwM2UzMzUyNzVlNmJjMTYyMjIzMzM2NDk1YzJiMWUzOTUyLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDI4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dlb21l
dHJ5VXRpbGl0aWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KLQot
QGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldwotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX2xheWVy
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLSAgICBb
X2xheWVycyByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX3Jl
bW92ZUFsbExheWVycwotewotICAgIGZvciAoQ0FTaGFwZUxheWVyICpsYXllciBpbiBfbGF5ZXJz
KQotICAgICAgICBbbGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFtfbGF5ZXJzIHJl
bW92ZUFsbE9iamVjdHNdOwotfQotCi0tICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIp
bnVtTGF5ZXJzCi17Ci0gICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBudW1MYXllcnMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwotCi0gICAgZm9yIChO
U1VJbnRlZ2VyIGkgPSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKLSAgICAgICAgQ0FTaGFwZUxh
eWVyICpsYXllciA9IFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XTsKLSAgICAgICAgW19sYXll
cnMgYWRkT2JqZWN0OmxheWVyXTsKLSAgICAgICAgW3NlbGYubGF5ZXIgYWRkU3VibGF5ZXI6bGF5
ZXJdOwotICAgICAgICBbbGF5ZXIgcmVsZWFzZV07Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBm
aW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwMSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcDIsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIGQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBkMiwgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgaW50ZXJzZWN0aW9uKSAKLXsKLSAgICAvLyBEbyB0aGUgbGluZXMgaW50ZXJzZWN0
PwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQ7Ci0g
ICAgaWYgKCFmaW5kSW50ZXJzZWN0aW9uKHAxLCBwMiwgZDEsIGQyLCB0ZW1wb3JhcnlJbnRlcnNl
Y3Rpb25Qb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElzIHRoZSBpbnRl
cnNlY3Rpb24gYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvbiB0aGUgbGluZT8KLSAgICBpZiAocDEu
eCgpID49IHAyLngoKSkgewotICAgICAgICBpZiAodGVtcG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQu
eCgpID4gcDEueCgpIHx8IHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LngoKSA8IHAyLngoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAodGVt
cG9yYXJ5SW50ZXJzZWN0aW9uUG9pbnQueCgpID4gcDIueCgpIHx8IHRlbXBvcmFyeUludGVyc2Vj
dGlvblBvaW50LngoKSA8IHAxLngoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgaWYgKHAxLnkoKSA+PSBwMi55KCkpIHsKLSAgICAgICAgaWYgKHRlbXBvcmFyeUludGVy
c2VjdGlvblBvaW50LnkoKSA+IHAxLnkoKSB8fCB0ZW1wb3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55
KCkgPCBwMi55KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKHRlbXBvcmFyeUludGVyc2VjdGlvblBvaW50LnkoKSA+IHAyLnkoKSB8fCB0ZW1w
b3JhcnlJbnRlcnNlY3Rpb25Qb2ludC55KCkgPCBwMS55KCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaW50ZXJzZWN0aW9uID0gdGVtcG9yYXJ5SW50ZXJzZWN0aW9u
UG9pbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoaXMgcXVhZCBpbnRlcnNlY3Rpb24g
d29ya3MgYmVjYXVzZSB0aGUgdHdvIHF1YWRzIGFyZSBrbm93biB0byBiZSBhdCB0aGUgc2FtZQot
Ly8gcm90YXRpb24gYW5kIGNsb2Nrd2lzZS1uZXNzLgotc3RhdGljIFdlYkNvcmU6OkZsb2F0UXVh
ZCBxdWFkSW50ZXJzZWN0aW9uKFdlYkNvcmU6OkZsb2F0UXVhZCBib3VuZHMsIFdlYkNvcmU6OkZs
b2F0UXVhZCB0b0NsYW1wKQotewotICAgIC8vIFJlc3VsdGluZyBwb2ludHMuCi0gICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBwMSwgcDIsIHAzLCBwNDsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQxID0g
ZmFsc2U7Ci0gICAgYm9vbCBjb250YWluc1BvaW50MiA9IGZhbHNlOwotICAgIGJvb2wgY29udGFp
bnNQb2ludDMgPSBmYWxzZTsKLSAgICBib29sIGNvbnRhaW5zUG9pbnQ0ID0gZmFsc2U7Ci0gICAg
Ym9vbCBpbnRlcnNlY3RGb3JQb2ludDEgPSBmYWxzZTsKLSAgICBib29sIGludGVyc2VjdEZvclBv
aW50MiA9IGZhbHNlOwotICAgIGJvb2wgaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmFsc2U7Ci0gICAg
Ym9vbCBpbnRlcnNlY3RGb3JQb2ludDQgPSBmYWxzZTsKLQotICAgIC8vIFRvcCAvIGJvdHRvbSB2
ZXJ0aWNhbCBjbGFtcGluZy4KLSAgICBpZiAoYm91bmRzLmNvbnRhaW5zUG9pbnQodG9DbGFtcC5w
MSgpKSkgewotICAgICAgICBjb250YWluc1BvaW50MSA9IHRydWU7Ci0gICAgICAgIHAxID0gdG9D
bGFtcC5wMSgpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RGb3JQb2ludDEgPSBmaW5kSW50
ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDEoKSwgYm91bmRzLnAyKCksIHRv
Q2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwMSkpKQotICAgICAgICBwMSA9IHRvQ2xhbXAucDEo
KTsKLQotICAgIGlmIChib3VuZHMuY29udGFpbnNQb2ludCh0b0NsYW1wLnAyKCkpKSB7Ci0gICAg
ICAgIGNvbnRhaW5zUG9pbnQyID0gdHJ1ZTsKLSAgICAgICAgcDIgPSB0b0NsYW1wLnAyKCk7Ci0g
ICAgfSBlbHNlIGlmICghKGludGVyc2VjdEZvclBvaW50MiA9IGZpbmRJbnRlcnNlY3Rpb25Pbkxp
bmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBib3VuZHMucDIoKSwgdG9DbGFtcC5wMigpLCB0
b0NsYW1wLnAzKCksIHAyKSkpCi0gICAgICAgIHAyID0gdG9DbGFtcC5wMigpOwotCi0gICAgaWYg
KGJvdW5kcy5jb250YWluc1BvaW50KHRvQ2xhbXAucDMoKSkpIHsKLSAgICAgICAgY29udGFpbnNQ
b2ludDMgPSB0cnVlOwotICAgICAgICBwMyA9IHRvQ2xhbXAucDMoKTsKLSAgICB9IGVsc2UgaWYg
KCEoaW50ZXJzZWN0Rm9yUG9pbnQzID0gZmluZEludGVyc2VjdGlvbk9uTGluZUJldHdlZW5Qb2lu
dHMoYm91bmRzLnA0KCksIGJvdW5kcy5wMygpLCB0b0NsYW1wLnAyKCksIHRvQ2xhbXAucDMoKSwg
cDMpKSkKLSAgICAgICAgcDMgPSB0b0NsYW1wLnAzKCk7Ci0KLSAgICBpZiAoYm91bmRzLmNvbnRh
aW5zUG9pbnQodG9DbGFtcC5wNCgpKSkgewotICAgICAgICBjb250YWluc1BvaW50NCA9IHRydWU7
Ci0gICAgICAgIHA0ID0gdG9DbGFtcC5wNCgpOwotICAgIH0gZWxzZSBpZiAoIShpbnRlcnNlY3RG
b3JQb2ludDQgPSBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBvaW50cyhib3VuZHMucDQo
KSwgYm91bmRzLnAzKCksIHRvQ2xhbXAucDEoKSwgdG9DbGFtcC5wNCgpLCBwNCkpKQotICAgICAg
ICBwNCA9IHRvQ2xhbXAucDQoKTsKLQotICAgIC8vIElmIG9ubHkgb25lIG9mIHRoZSBwb2ludHMg
aW50ZXJzZWN0ZWQgb24gZWl0aGVyIHRoZSB0b3Agb3IgYm90dG9tIGxpbmUgdGhlbiB3ZQotICAg
IC8vIGNhbiBjbGFtcCB0aGUgb3RoZXIgcG9pbnQgb24gdGhhdCBsaW5lIHRvIHRoZSBjb3JuZXIg
b2YgdGhlIGJvdW5kcy4KLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmIGludGVyc2VjdEZvclBv
aW50MiAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQxKSB7Ci0gICAgICAgIGNvbnRhaW5zUG9pbnQxID0g
dHJ1ZTsKLSAgICAgICAgcDEgPSBib3VuZHMucDEoKTsKLSAgICB9IGVsc2UgaWYgKCFjb250YWlu
c1BvaW50MiAmJiBpbnRlcnNlY3RGb3JQb2ludDEgJiYgIWludGVyc2VjdEZvclBvaW50Mikgewot
ICAgICAgICBjb250YWluc1BvaW50MiA9IHRydWU7Ci0gICAgICAgIHAyID0gYm91bmRzLnAyKCk7
Ci0gICAgfQotICAgIGlmICghY29udGFpbnNQb2ludDQgJiYgaW50ZXJzZWN0Rm9yUG9pbnQzICYm
ICFpbnRlcnNlY3RGb3JQb2ludDQpIHsKLSAgICAgICAgY29udGFpbnNQb2ludDQgPSB0cnVlOwot
ICAgICAgICBwNCA9IGJvdW5kcy5wNCgpOwotICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zUG9pbnQz
ICYmIGludGVyc2VjdEZvclBvaW50NCAmJiAhaW50ZXJzZWN0Rm9yUG9pbnQzKSB7Ci0gICAgICAg
IGNvbnRhaW5zUG9pbnQzID0gdHJ1ZTsKLSAgICAgICAgcDMgPSBib3VuZHMucDMoKTsKLSAgICB9
Ci0KLSAgICAvLyBOb3cgd2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gaG9yaXpvbnRhbCBjbGFtcGlu
ZyBmb3IgdW5hZGp1c3RlZCBwb2ludHMuCi0gICAgaWYgKCFjb250YWluc1BvaW50MiAmJiAhaW50
ZXJzZWN0Rm9yUG9pbnQyKQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBv
aW50cyhib3VuZHMucDIoKSwgYm91bmRzLnAzKCksIHAxLCBwMiwgcDIpOwotICAgIGlmICghY29u
dGFpbnNQb2ludDMgJiYgIWludGVyc2VjdEZvclBvaW50MykKLSAgICAgICAgZmluZEludGVyc2Vj
dGlvbk9uTGluZUJldHdlZW5Qb2ludHMoYm91bmRzLnAyKCksIGJvdW5kcy5wMygpLCBwNCwgcDMs
IHAzKTsKLSAgICBpZiAoIWNvbnRhaW5zUG9pbnQxICYmICFpbnRlcnNlY3RGb3JQb2ludDEpCi0g
ICAgICAgIGZpbmRJbnRlcnNlY3Rpb25PbkxpbmVCZXR3ZWVuUG9pbnRzKGJvdW5kcy5wMSgpLCBi
b3VuZHMucDQoKSwgcDEsIHAyLCBwMSk7Ci0gICAgaWYgKCFjb250YWluc1BvaW50NCAmJiAhaW50
ZXJzZWN0Rm9yUG9pbnQ0KQotICAgICAgICBmaW5kSW50ZXJzZWN0aW9uT25MaW5lQmV0d2VlblBv
aW50cyhib3VuZHMucDEoKSwgYm91bmRzLnA0KCksIHA0LCBwMywgcDQpOwotCi0gICAgcmV0dXJu
IFdlYkNvcmU6OkZsb2F0UXVhZChwMSwgcDIsIHAzLCBwNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxh
eWVyUGF0aFdpdGhIb2xlKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UXVhZCYgb3V0ZXJRdWFkLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIGhvbGVRdWFkKQotewot
ICAgIC8vIE5vdGhpbmcgdG8gc2hvdy4KLSAgICBpZiAob3V0ZXJRdWFkID09IGhvbGVRdWFkIHx8
IGhvbGVRdWFkLmNvbnRhaW5zUXVhZChvdXRlclF1YWQpKSB7Ci0gICAgICAgIGxheWVyLnBhdGgg
PSBOVUxMOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgaXMgYSBu
ZWdhdGl2ZSBtYXJnaW4gLyBwYWRkaW5nIHRoZW4gdGhlIG91dGVyIGJveCBtaWdodCBub3QKLSAg
ICAvLyBmdWxseSBjb250YWluIHRoZSBob2xlIGJveC4gSW4gc3VjaCBjYXNlcyB3ZSByZWNhbGN1
bGF0ZSB0aGUgaG9sZSB0bwotICAgIC8vIGJlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBx
dWFkcy4KLSAgICBXZWJDb3JlOjpGbG9hdFF1YWQgaW5uZXJIb2xlOwotICAgIGlmIChvdXRlclF1
YWQuY29udGFpbnNRdWFkKGhvbGVRdWFkKSkKLSAgICAgICAgaW5uZXJIb2xlID0gaG9sZVF1YWQ7
Ci0gICAgZWxzZQotICAgICAgICBpbm5lckhvbGUgPSBxdWFkSW50ZXJzZWN0aW9uKG91dGVyUXVh
ZCwgaG9sZVF1YWQpOwotCi0gICAgLy8gQ2xvY2t3aXNlIGluc2lkZSByZWN0IChob2xlKSwgQ291
bnRlci1DbG9ja3dpc2Ugb3V0c2lkZSByZWN0IChmaWxsKS4KLSAgICBDR011dGFibGVQYXRoUmVm
IHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7Ci0gICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0
aCwgMCwgaW5uZXJIb2xlLnAxKCkueCgpLCBpbm5lckhvbGUucDEoKS55KCkpOwotICAgIENHUGF0
aEFkZExpbmVUb1BvaW50KHBhdGgsIDAsIGlubmVySG9sZS5wMigpLngoKSwgaW5uZXJIb2xlLnAy
KCkueSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBpbm5lckhvbGUucDMo
KS54KCksIGlubmVySG9sZS5wMygpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0
aCwgMCwgaW5uZXJIb2xlLnA0KCkueCgpLCBpbm5lckhvbGUucDQoKS55KCkpOwotICAgIENHUGF0
aE1vdmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCku
eSgpKTsKLSAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54
KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwg
MCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkpOwotICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KHBhdGgsIDAsIG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCku
eSgpKTsKLSAgICBsYXllci5wYXRoID0gcGF0aDsKLSAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOwot
fQotCi1zdGF0aWMgdm9pZCBsYXllclBhdGgoQ0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQpCi17Ci0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRo
ID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAs
IG91dGVyUXVhZC5wMSgpLngoKSwgb3V0ZXJRdWFkLnAxKCkueSgpKTsKLSAgICBDR1BhdGhBZGRM
aW5lVG9Qb2ludChwYXRoLCAwLCBvdXRlclF1YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnko
KSk7Ci0gICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgb3V0ZXJRdWFkLnAzKCkueCgp
LCBvdXRlclF1YWQucDMoKS55KCkpOwotICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgsIDAs
IG91dGVyUXVhZC5wMigpLngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKLSAgICBsYXllci5wYXRo
ID0gcGF0aDsKLSAgICBDR1BhdGhSZWxlYXNlKHBhdGgpOwotfQotCi0tICh2b2lkKV9sYXlvdXRG
b3JOb2RlSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hsaWdodCBvZmZz
ZXQ6KHVuc2lnbmVkKW9mZnNldAotewotICAgIEFTU0VSVChbX2xheWVycyBjb3VudF0gPj0gb2Zm
c2V0ICsgNCk7Ci0gICAgQVNTRVJUKGhpZ2hsaWdodC5xdWFkcy5zaXplKCkgPj0gb2Zmc2V0ICsg
NCk7Ci0gICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA8IG9mZnNldCArIDQgfHwgaGlnaGxpZ2h0LnF1
YWRzLnNpemUoKSA8IG9mZnNldCArIDQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENBU2hhcGVM
YXllciAqbWFyZ2luTGF5ZXIgPSBbX2xheWVycyBvYmplY3RBdEluZGV4Om9mZnNldF07Ci0gICAg
Q0FTaGFwZUxheWVyICpib3JkZXJMYXllciA9IFtfbGF5ZXJzIG9iamVjdEF0SW5kZXg6b2Zmc2V0
ICsgMV07Ci0gICAgQ0FTaGFwZUxheWVyICpwYWRkaW5nTGF5ZXIgPSBbX2xheWVycyBvYmplY3RB
dEluZGV4Om9mZnNldCArIDJdOwotICAgIENBU2hhcGVMYXllciAqY29udGVudExheWVyID0gW19s
YXllcnMgb2JqZWN0QXRJbmRleDpvZmZzZXQgKyAzXTsKLQotICAgIFdlYkNvcmU6OkZsb2F0UXVh
ZCBtYXJnaW5RdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldF07Ci0gICAgV2ViQ29yZTo6Rmxv
YXRRdWFkIGJvcmRlclF1YWQgPSBoaWdobGlnaHQucXVhZHNbb2Zmc2V0ICsgMV07Ci0gICAgV2Vi
Q29yZTo6RmxvYXRRdWFkIHBhZGRpbmdRdWFkID0gaGlnaGxpZ2h0LnF1YWRzW29mZnNldCArIDJd
OwotICAgIFdlYkNvcmU6OkZsb2F0UXVhZCBjb250ZW50UXVhZCA9IGhpZ2hsaWdodC5xdWFkc1tv
ZmZzZXQgKyAzXTsKLQotICAgIG1hcmdpbkxheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3Io
aGlnaGxpZ2h0Lm1hcmdpbkNvbG9yKTsKLSAgICBib3JkZXJMYXllci5maWxsQ29sb3IgPSBjYWNo
ZWRDR0NvbG9yKGhpZ2hsaWdodC5ib3JkZXJDb2xvcik7Ci0gICAgcGFkZGluZ0xheWVyLmZpbGxD
b2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LnBhZGRpbmdDb2xvcik7Ci0gICAgY29udGVu
dExheWVyLmZpbGxDb2xvciA9IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0LmNvbnRlbnRDb2xvcik7
Ci0KLSAgICBsYXllclBhdGhXaXRoSG9sZShtYXJnaW5MYXllciwgbWFyZ2luUXVhZCwgYm9yZGVy
UXVhZCk7Ci0gICAgbGF5ZXJQYXRoV2l0aEhvbGUoYm9yZGVyTGF5ZXIsIGJvcmRlclF1YWQsIHBh
ZGRpbmdRdWFkKTsKLSAgICBsYXllclBhdGhXaXRoSG9sZShwYWRkaW5nTGF5ZXIsIHBhZGRpbmdR
dWFkLCBjb250ZW50UXVhZCk7Ci0gICAgbGF5ZXJQYXRoKGNvbnRlbnRMYXllciwgY29udGVudFF1
YWQpOwotfQotCi0tICh2b2lkKV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDooY29uc3QgV2Vi
Q29yZTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKLXsKLSAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5z
aXplKCkpIHsKLSAgICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBub2RlQ291bnQgPSBoaWdobGlnaHQucXVhZHMuc2l6
ZSgpIC8gNDsKLSAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3VudCAqIDRdOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKQotICAgICAgICBbc2VsZiBf
bGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDpoaWdobGlnaHQgb2Zmc2V0OmkgKiA0XTsKLX0KLQotLSAo
dm9pZClfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYp
aGlnaGxpZ2h0Ci17Ci0gICAgTlNVSW50ZWdlciBudW1MYXllcnMgPSBoaWdobGlnaHQucXVhZHMu
c2l6ZSgpOwotICAgIGlmICghbnVtTGF5ZXJzKSB7Ci0gICAgICAgIFtzZWxmIF9yZW1vdmVBbGxM
YXllcnNdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3NlbGYgX2NyZWF0ZUxheWVy
czpudW1MYXllcnNdOwotCi0gICAgQ0dDb2xvclJlZiBjb250ZW50Q29sb3IgPSBjYWNoZWRDR0Nv
bG9yKGhpZ2hsaWdodC5jb250ZW50Q29sb3IpOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IG51bUxheWVyczsgKytpKSB7Ci0gICAgICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbX2xh
eWVycyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBsYXllci5maWxsQ29sb3IgPSBjb250ZW50
Q29sb3I7Ci0gICAgICAgIGxheWVyUGF0aChsYXllciwgaGlnaGxpZ2h0LnF1YWRzW2ldKTsKLSAg
ICB9Ci19Ci0KLS0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpIaWdobGlnaHQmKWhpZ2hs
aWdodAotewotICAgIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBl
OjpOb2RlIHx8IGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6OkhpZ2hsaWdodFR5cGU6Ok5vZGVM
aXN0KQotICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6aGlnaGxpZ2h0
XTsKLSAgICBlbHNlIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpIaWdobGlnaHRUeXBl
OjpSZWN0cykKLSAgICAgICAgW3NlbGYgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0OmhpZ2hsaWdo
dF07Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJ
bnNwZWN0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZDcwNWU4
M2U3MDZlYTgzNzRhYmJlODRlODE1ZGQ3YjYzYmJhNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzg2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5jbHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2lu
Y2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIkFQSVVJQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiV2ViQXV0b21hdGlvblNlc3Npb24uaCIKLSNpbmNsdWRlICJXZWJG
cmFtZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1l
c3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJX
ZWJJbnNwZWN0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNz
YWdlcy5oIgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
V2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Nb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHRF
bmNvZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgotCi0jaWYgUExBVEZPUk0o
R1RLKQotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Q2xpZW50LmgiCi0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY29uc3QgdW5zaWdu
ZWQgV2ViSW5zcGVjdG9yUHJveHk6Om1pbmltdW1XaW5kb3dXaWR0aCA9IDUwMDsKLWNvbnN0IHVu
c2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjptaW5pbXVtV2luZG93SGVpZ2h0ID0gNDAwOwotCi1j
b25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd1dpZHRoID0gMTAw
MDsKLWNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0
ID0gNjUwOwotCi1XZWJJbnNwZWN0b3JQcm94eTo6V2ViSW5zcGVjdG9yUHJveHkoV2ViUGFnZVBy
b3h5KiBpbnNwZWN0ZWRQYWdlKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICA6IG1fY2xvc2VGcm9u
dGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYkluc3Bl
Y3RvclByb3h5OjpjbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXJGaXJlZCkKLSNlbmRp
ZgotewotICAgIGlmIChpbnNwZWN0ZWRQYWdlICYmIGluc3BlY3RlZFBhZ2UtPmhhc1J1bm5pbmdQ
cm9jZXNzKCkpIHsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlID0gaW5zcGVjdGVkUGFnZTsKLSAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3Rl
ZFBhZ2UtPndlYlBhZ2VJRCgpLCAqdGhpcyk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3JQcm94
eTo6fldlYkluc3BlY3RvclByb3h5KCkKLXsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3Rpb25MZXZlbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGluc3BlY3RvckxldmVs
Rm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpOwotfQotCi1XZWJQcmVmZXJlbmNlcyYgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yUGFnZS0+cGFnZUdyb3Vw
KCkucHJlZmVyZW5jZXMoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0
ZSgpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgp
KTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7Ci0gICAgcGxhdGZvcm1JbnZh
bGlkYXRlKCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZW5kTWVz
c2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwotfQotCi0vLyBQdWJsaWMgQVBJcwotYm9vbCBXZWJJ
bnNwZWN0b3JQcm94eTo6aXNGcm9udCgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwbGF0Zm9ybUlzRnJvbnQoKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCgpCi17Ci0gICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nob3dNZXNzYWdlU2VudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG93TWVzc2FnZVNlbnQgPSB0cnVlOwotICAgIG1f
aWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSB0cnVlOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdl
KCk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXI6Ok5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCksIDApOwotICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93KCkpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVk
UGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzQ29ubmVjdGVkKCkpIHsKLSAgICAg
ICAgYnJpbmdUb0Zyb250KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25uZWN0
KCk7Ci0KLSAgICAvLyBEb24ndCBpZ25vcmUgdGhlIGZpcnN0IGJyaW5nVG9Gcm9udCBzbyBpdCBv
cGVucyB0aGUgSW5zcGVjdG9yLgotICAgIG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQgPSBmYWxz
ZTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aGlkZSgpCi17Ci0gICAgaWYgKCFtX2lu
c3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNWaXNpYmxlID0gZmFsc2U7
Ci0KLSAgICBwbGF0Zm9ybUhpZGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xv
c2UoKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6Q2xvc2UoKSk7
Ci0KLSAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpjbG9zZUZvckNyYXNoKCkKLXsKLSAgICBjbG9zZSgpOwotCi0gICAgcGxhdGZv
cm1EaWRDbG9zZUZvckNyYXNoKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlb3Bl
bigpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNsb3NlKCk7Ci0gICAgc2hvdygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNl
dFN0YXRlKCkKLXsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5kZWxldGVJbnNwZWN0
b3JBdHRhY2hlZEhlaWdodCgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLmRlbGV0
ZUluc3BlY3RvckF0dGFjaGVkV2lkdGgoKTsKLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMo
KS5kZWxldGVJbnNwZWN0b3JBdHRhY2htZW50U2lkZSgpOwotICAgIGluc3BlY3RvclBhZ2VQcmVm
ZXJlbmNlcygpLmRlbGV0ZUluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7Ci0gICAgaW5zcGVjdG9y
UGFnZVByZWZlcmVuY2VzKCkuZGVsZXRlSW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLQotICAgIHBs
YXRmb3JtUmVzZXRTdGF0ZSgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpyZXNldCgp
Ci17Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSkgewotICAgICAgICBtX2luc3BlY3RlZFBhZ2Ut
PnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkp
OwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UgPSBudWxscHRyOwotICAgIH0KLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nlc3MoV2ViUGFnZVByb3h5KiBp
bnNwZWN0ZWRQYWdlKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NF
UlQoaW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdl
OwotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0
ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yUGFnZSkK
LSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
VXBkYXRlQ29ubmVjdGlvbigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0RnJv
bnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSWRlbnRpZmllcikKLXsK
LSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnNw
ZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVj
dGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpzaG93Q29uc29sZSgpCi17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0gICAgbV9pbnNwZWN0ZWRQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzaG93UmVzb3VyY2VzKCkKLXsKLSAgICBpZiAoIW1faW5zcGVj
dGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0K
LSAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jl
c291cmNlcygpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJj
ZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lKQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQ
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLQotICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJl
c291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjphdHRhY2hCb3R0b20oKQotewotICAgIGF0dGFjaChBdHRhY2htZW50U2lkZTo6Qm90
dG9tKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoUmlnaHQoKQotewotICAg
IGF0dGFjaChBdHRhY2htZW50U2lkZTo6UmlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjphdHRhY2hMZWZ0KCkKLXsKLSAgICBhdHRhY2goQXR0YWNobWVudFNpZGU6OkxlZnQpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2goQXR0YWNobWVudFNpZGUgc2lkZSkK
LXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSB8fCAhY2FuQXR0YWNoKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faXNBdHRhY2hlZCA9IHRydWU7Ci0gICAgbV9hdHRhY2htZW50U2lkZSA9
IHNpZGU7Ci0KLSAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JBdHRh
Y2htZW50U2lkZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2lkZSkpOwotCi0gICAgaWYgKG1faXNW
aXNpYmxlKQotICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JT
dGFydHNBdHRhY2hlZCh0cnVlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7Ci0KLSAgICBzd2l0Y2ggKG1fYXR0
YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAg
IG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVk
Qm90dG9tKCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJp
Z2h0OgotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpBdHRhY2hlZFJpZ2h0KCkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcGxhdGZvcm1BdHRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0
YWNoKCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9pc0F0dGFjaGVkID0gZmFsc2U7Ci0KLSAgICBpZiAobV9pc1Zpc2libGUpCi0gICAgICAg
IGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZh
bHNlKTsKLQotICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTZXRBdHRhY2hlZChmYWxzZSkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCkpOwotCi0gICAgcGxhdGZvcm1EZXRhY2goKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0KGhlaWdodCk7Ci0gICAgcGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRv
d0hlaWdodChoZWlnaHQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQotewotICAgIGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLnNldEluc3BlY3RvckF0dGFjaGVkV2lkdGgod2lkdGgpOwotICAgIHBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcGxhdGZvcm1TZXRT
aGVldFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnN0YXJ0V2luZG93
RHJhZygpCi17Ci0gICAgcGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFtX2luc3Bl
Y3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzUHJvZmlsaW5nUGFnZSkK
LSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0
b3BQYWdlUHJvZmlsaW5nKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0UGFnZVByb2ZpbGluZygpKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAg
aWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2VsZW1l
bnRTZWxlY3Rpb25BY3RpdmUpIHsKLSAgICAgICAgbV9pZ25vcmVFbGVtZW50U2VsZWN0aW9uQ2hh
bmdlID0gdHJ1ZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvbm5lY3QoKTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2Vi
SW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBhZ2UoY29uc3QgVVJMJiB1cmwp
Ci17Ci0gICAgLy8gVXNlIFVSTCBzbyB3ZSBjYW4gY29tcGFyZSB0aGUgcGF0aHMgYW5kIHByb3Rv
Y29scy4KLSAgICBVUkwgbWFpblBhZ2VVUkwoVVJMKCksIFdlYkluc3BlY3RvclByb3h5OjppbnNw
ZWN0b3JQYWdlVVJMKCkpOwotICAgIGlmICh1cmwucHJvdG9jb2woKSA9PSBtYWluUGFnZVVSTC5w
cm90b2NvbCgpICYmIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwucGF0aCgpKSA9PSBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXMobWFpblBhZ2VVUkwucGF0aCgpKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBhIFRlc3QgVVJMIGluIFByb2R1Y3Rp
b24gYnVpbGRzLgotICAgIFN0cmluZyB0ZXN0UGFnZVVSTFN0cmluZyA9IFdlYkluc3BlY3RvclBy
b3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpOwotICAgIGlmICh0ZXN0UGFnZVVSTFN0cmluZy5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVVJMIHRlc3RQYWdlVVJMKFVS
TCgpLCB0ZXN0UGFnZVVSTFN0cmluZyk7Ci0gICAgcmV0dXJuIHVybC5wcm90b2NvbCgpID09IHRl
c3RQYWdlVVJMLnByb3RvY29sKCkgJiYgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5wYXRo
KCkpID09IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh0ZXN0UGFnZVVSTC5wYXRoKCkpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpjcmVhdGVGcm9udGVuZFBhZ2UoKQotewotICAgIGlm
IChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFn
ZSA9IHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9y
UGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHRyYWNrSW5zcGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UsIG1faW5zcGVjdGVkUGFnZSk7Ci0K
LSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVk
UGFnZS0+aWRlbnRpZmllcigpLCAqdGhpcyk7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNz
KCkuYXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqbV9pbnNwZWN0b3JQYWdlLCBXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJU
ZXN0KQotewotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbnNwZWN0ZWRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuaGFzTG9jYWxGcm9u
dGVuZCgpKSB7Ci0gICAgICAgIHNob3coKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fdW5kZXJUZXN0ID0gdW5kZXJUZXN0OwotICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwotCi0g
ICAgQVNTRVJUKG1faW5zcGVjdG9yUGFnZSk7Ci0gICAgaWYgKCFtX2luc3BlY3RvclBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkVzdGFibGlzaENvbm5lY3Rpb24obV9pbnNwZWN0ZWRQYWdlLT5pZGVudGlm
aWVyKCksIGluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25M
ZXZlbCgpKSk7Ci0KLSAgICBBU1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7Ci0gICAgbV9pc0Fj
dGl2ZUZyb250ZW5kID0gdHJ1ZTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKnRoaXMpOwotCi0gICAgaWYgKCFtX3VuZGVyVGVzdCkg
ewotICAgICAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGNhbkF0dGFjaCk7Ci0g
ICAgICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwotICAgICAgICBtX2F0
dGFjaG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3BlY3RvclBhZ2VQ
cmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwotCi0gICAgICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZChtX2lz
QXR0YWNoZWQpKTsKLQotICAgICAgICBpZiAobV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNp
ZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRvbSgpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAg
ICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
QXR0YWNoZWRSaWdodCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
Y2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0
YWNoZWQoKSk7Ci0KLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwotICAgIH0K
LQotICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNwZWN0b3IgYXR0
YWNoZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8gdGhlIF9XS0lu
c3BlY3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KLSAgICBtX2luc3BlY3RlZFBhZ2UtPnVpQ2xp
ZW50KCkuZGlkQXR0YWNoSW5zcGVjdG9yKCptX2luc3BlY3RlZFBhZ2UsICp0aGlzKTsKLQotICAg
IC8vIEJhaWwgb3V0IGlmIHRoZSBjbGllbnQgY2xvc2VkIHRoZSBpbnNwZWN0b3IgZnJvbSB0aGUg
ZGVsZWdhdGUgbWV0aG9kLgotICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgbV91bmRl
clRlc3QgPyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKSA6IFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6b3BlbigpCi17Ci0gICAgaWYgKG1fdW5kZXJUZXN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2V0
Rm9yU2NvcGU8Ym9vbD4gaXNPcGVuaW5nKG1faXNPcGVuaW5nLCB0cnVlKTsKLSAgICBtX2lzVmlz
aWJsZSA9IHRydWU7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6U2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKSk7Ci0KLSAgICBpZiAobV9pc0F0dGFj
aGVkKQotICAgICAgICBwbGF0Zm9ybUF0dGFjaCgpOwotICAgIGVsc2UKLSAgICAgICAgcGxhdGZv
cm1DcmVhdGVGcm9udGVuZFdpbmRvdygpOwotCi0gICAgcGxhdGZvcm1CcmluZ1RvRnJvbnQoKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGlkQ2xvc2UoKQotewotICAgIGNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3Nl
RnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLSAgICBtX2lzUHJvZmls
aW5nUGFnZSA9IGZhbHNlOwotICAgIG1fc2hvd01lc3NhZ2VTZW50ID0gZmFsc2U7Ci0gICAgbV9p
Z25vcmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotCi0gICAgdW50cmFja0luc3BlY3RvclBh
Z2UobV9pbnNwZWN0b3JQYWdlKTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOwotICAgIG1faW5z
cGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT5p
ZGVudGlmaWVyKCkpOwotCi0gICAgaWYgKG1faXNBY3RpdmVGcm9udGVuZCkgewotICAgICAgICBt
X2lzQWN0aXZlRnJvbnRlbmQgPSBmYWxzZTsKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKCp0aGlzKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9pc0F0dGFjaGVkKQotICAgICAgICBwbGF0Zm9ybURldGFjaCgpOwotCi0gICAgLy8g
TnVsbCBvdXQgbV9pbnNwZWN0b3JQYWdlIGFmdGVyIHBsYXRmb3JtRGV0YWNoKCksIHNvIHRoZSB2
aWV3cyBjYW4gYmUgY2xlYW5lZCB1cCBjb3JyZWN0bHkuCi0gICAgbV9pbnNwZWN0b3JQYWdlID0g
bnVsbHB0cjsKLQotICAgIG1faXNBdHRhY2hlZCA9IGZhbHNlOwotICAgIG1fY2FuQXR0YWNoID0g
ZmFsc2U7Ci0gICAgbV91bmRlclRlc3QgPSBmYWxzZTsKLQotICAgIHBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1l
c3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghbV9pbnNw
ZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3RlZFBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVzc2FnZSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kTG9hZGVkKCkKLXsKLSAgICBpZiAo
IW1faW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIGF1dG9t
YXRpb25TZXNzaW9uID0gbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5h
dXRvbWF0aW9uU2Vzc2lvbigpKQotICAgICAgICBhdXRvbWF0aW9uU2Vzc2lvbi0+aW5zcGVjdG9y
RnJvbnRlbmRMb2FkZWQoKm1faW5zcGVjdGVkUGFnZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbCB0ZWxscyB1cyB0byBkbyB0aGlzIG9uIGxvYWQuIFdlIHdhbnQgdG8KLSAg
ICAvLyBpZ25vcmUgaXQgb25jZSBpZiB3ZSBvbmx5IHdhbnRlZCB0byBjb25uZWN0LiBUaGlzIGFs
bG93cyB0aGUgSW5zcGVjdG9yIHRvIGxhdGVyCi0gICAgLy8gcmVxdWVzdCB0byBiZSBicm91Z2h0
IHRvIHRoZSBmcm9udCB3aGVuIGEgYnJlYWtwb2ludCBpcyBoaXQgb3Igc29tZSBvdGhlciBhY3Rp
b24uCi0gICAgaWYgKG1faWdub3JlRmlyc3RCcmluZ1RvRnJvbnQpIHsKLSAgICAgICAgbV9pZ25v
cmVGaXJzdEJyaW5nVG9Gcm9udCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICBwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpOwotICAg
IGVsc2UKLSAgICAgICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpicmlu
Z0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLXsKLSAgICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFn
ZVRvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoQXZhaWxhYmls
aXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkKLXsKLSAgICBib29sIHByZXZpb3VzQ2FuQXR0YWNo
ID0gbV9jYW5BdHRhY2g7Ci0KLSAgICBtX2NhbkF0dGFjaCA9IHBsYXRmb3JtQ2FuQXR0YWNoKGF2
YWlsYWJsZSk7Ci0KLSAgICBpZiAocHJldmlvdXNDYW5BdHRhY2ggPT0gbV9jYW5BdHRhY2gpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2luc3BlY3RvclBhZ2UgJiYgIW1fdW5kZXJUZXN0
KQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7Ci0KLSAgICBwbGF0Zm9ybUF0
dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQot
ewotICAgIHBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZv
JiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgcGxhdGZvcm1TaG93Q2VydGlmaWNhdGUoY2VydGlm
aWNhdGVJbmZvKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZWxlbWVudFNlbGVjdGlv
bkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgbV9lbGVtZW50U2VsZWN0aW9uQWN0aXZlID0g
YWN0aXZlOwotCi0gICAgaWYgKG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSkgewotICAg
ICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgaWYg
KCFtX2lzVmlzaWJsZSkKLSAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoYWN0aXZlKQotICAgICAgICBwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFn
ZVRvRnJvbnQoKTsKLSAgICBlbHNlIGlmIChpc0Nvbm5lY3RlZCgpKQotICAgICAgICBicmluZ1Rv
RnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dGltZWxpbmVSZWNvcmRpbmdD
aGFuZ2VkKGJvb2wgYWN0aXZlKQotewotICAgIG1faXNQcm9maWxpbmdQYWdlID0gYWN0aXZlOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
T3ZlcnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLXsKLSNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQotICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2luc3BlY3RlZFBhZ2UtPnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFi
bGVkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wg
YXZhaWxhYmxlKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotICAgIG1faW5z
cGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRE
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUpLCBtX2luc3BlY3RvclBhZ2UtPndl
YlBhZ2VJRCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGF2YWlsYWJsZSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2F2ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNh
dmVBcykKLXsKLSAgICBwbGF0Zm9ybVNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVuY29k
ZWQsIGZvcmNlU2F2ZUFzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXBwZW5kKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCkKLXsKLSAgICBwbGF0
Zm9ybUFwcGVuZChmaWxlbmFtZSwgY29udGVudCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yUHJv
eHk6OnNob3VsZE9wZW5BdHRhY2hlZCgpCi17Ci0gICAgcmV0dXJuIGluc3BlY3RvclBhZ2VQcmVm
ZXJlbmNlcygpLmluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkgJiYgY2FuQXR0YWNoKCk7Ci19Ci0K
LS8vIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGNhbiB1c2UgdGhlIHN0dWJzIHByb3ZpZGVk
IGhlcmUuCi0KLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZP
Uk0oV0lOKQotCi1XZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9udGVu
ZFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRD
bG9zZUZvckNyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1IaWRlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUlzRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShj
b25zdCBDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9y
Y2VTYXZlRGlhbG9nKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdW5z
aWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yVGVzdFBhZ2VVUkwoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3RvckJhc2VVUkwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1EZWJ1Z2dhYmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6
OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExB
VEZPUk0oV0lOKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
YjFmZGZjYTFkZmI4ZTVjNTVmY2NkODAxNmY0MjFmNzE0MTYzY2NiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
Ykluc3BlY3RvclByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiQXR0YWNobWVudC5oIgotI2luY2x1ZGUg
IkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgotI2lu
Y2x1ZGUgIldlYkluc3BlY3RvclV0aWxpdGllcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5j
bHVkZSAiV0tHZW9tZXRyeS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+Ci0KLU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNTIE5TVmlldzsK
LU9CSkNfQ0xBU1MgTlNXaW5kb3c7Ci1PQkpDX0NMQVNTIFdLV2ViSW5zcGVjdG9yUHJveHlPYmpD
QWRhcHRlcjsKLU9CSkNfQ0xBU1MgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLSNlbGlmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViRnJhbWVQcm94eTsKLWNsYXNzIFdlYkluc3BlY3RvclByb3h5Q2xpZW50Owot
Y2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgV2ViUHJlZmVyZW5jZXM7Ci0KLWVudW0gY2xhc3Mg
QXR0YWNobWVudFNpZGUgewotICAgIEJvdHRvbSwKLSAgICBSaWdodCwKLSAgICBMZWZ0LAotfTsK
LQotY2xhc3MgV2ViSW5zcGVjdG9yUHJveHkKLSAgICA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8
QVBJOjpPYmplY3Q6OlR5cGU6Okluc3BlY3Rvcj4KLSAgICAsIHB1YmxpYyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgotICAgICwgcHVibGljIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsCi0jaWYgUExB
VEZPUk0oV0lOKQotICAgICwgcHVibGljIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgot
I2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJJbnNwZWN0b3JQcm94eT4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvclByb3h5KGluc3BlY3RlZFBhZ2UpKTsKLSAgICB9Ci0K
LSAgICB+V2ViSW5zcGVjdG9yUHJveHkoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0g
ICAgLy8gUHVibGljIEFQSXMKLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RlZFBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3Rv
clBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclBhZ2U7IH0KLQotICAgIGJvb2wgaXND
b25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAhIW1faW5zcGVjdG9yUGFnZTsgfQotICAgIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7IH0KLSAgICBib29sIGlzRnJv
bnQoKTsKLQotICAgIHZvaWQgY29ubmVjdCgpOwotCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9p
ZCBoaWRlKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgY2xvc2VGb3JDcmFzaCgpOwot
ICAgIHZvaWQgcmVvcGVuKCk7Ci0gICAgdm9pZCByZXNldFN0YXRlKCk7Ci0KLSAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgdm9pZCB1cGRhdGVGb3JOZXdQYWdlUHJvY2VzcyhXZWJQYWdlUHJveHkqKTsK
LQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBlbnVtIGNsYXNzIEluc3BlY3Rpb25UYXJnZXRUeXBl
IHsgTG9jYWwsIFJlbW90ZSB9OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNXaW5kb3c+IGNyZWF0
ZUZyb250ZW5kV2luZG93KE5TUmVjdCBzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0
VHlwZSk7Ci0KLSAgICB2b2lkIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCA9IDApOwotICAgIHZv
aWQgd2luZG93RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB2b2lkIHdpbmRvd0Z1bGxTY3JlZW5EaWRD
aGFuZ2UoKTsKLSAgICBOU1dpbmRvdyogaW5zcGVjdG9yV2luZG93KCkgY29uc3QgeyByZXR1cm4g
bV9pbnNwZWN0b3JXaW5kb3cuZ2V0KCk7IH0KLQotICAgIHZvaWQgY2xvc2VGcm9udGVuZFBhZ2Uo
KTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRBZnRlckluYWN0aXZpdHlUaW1lckZpcmVkKCk7Ci0K
LSAgICB2b2lkIGF0dGFjaG1lbnRWaWV3RGlkQ2hhbmdlKE5TVmlldyAqb2xkVmlldywgTlNWaWV3
ICpuZXdWaWV3KTsKLSAgICB2b2lkIGF0dGFjaG1lbnRXaWxsTW92ZUZyb21XaW5kb3coTlNXaW5k
b3cgKm9sZFdpbmRvdyk7Ci0gICAgdm9pZCBhdHRhY2htZW50RGlkTW92ZVRvV2luZG93KE5TV2lu
ZG93ICpuZXdXaW5kb3cpOwotCi0gICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzaGVldFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0UmVjdDsgfQotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShHVEspCi0gICAgR3RrV2lkZ2V0KiBpbnNwZWN0b3JWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9p
bnNwZWN0b3JWaWV3OyB9OwotICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudD4mJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2hvd0NvbnNvbGUo
KTsKLSAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VG
b3JGcmFtZShXZWJGcmFtZVByb3h5Kik7Ci0KLSAgICBBdHRhY2htZW50U2lkZSBhdHRhY2htZW50
U2lkZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0YWNobWVudFNpZGU7IH0KLSAgICBib29sIGlzQXR0
YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXR0YWNoZWQ7IH0KLSAgICB2b2lkIGF0dGFjaFJp
Z2h0KCk7Ci0gICAgdm9pZCBhdHRhY2hMZWZ0KCk7Ci0gICAgdm9pZCBhdHRhY2hCb3R0b20oKTsK
LSAgICB2b2lkIGF0dGFjaChBdHRhY2htZW50U2lkZSA9IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20p
OwotICAgIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkKTsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpOwot
Ci0gICAgdm9pZCBzZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLSAg
ICB2b2lkIHN0YXJ0V2luZG93RHJhZygpOwotCi0gICAgYm9vbCBpc1Byb2ZpbGluZ1BhZ2UoKSBj
b25zdCB7IHJldHVybiBtX2lzUHJvZmlsaW5nUGFnZTsgfQotICAgIHZvaWQgdG9nZ2xlUGFnZVBy
b2ZpbGluZygpOwotCi0gICAgYm9vbCBpc0VsZW1lbnRTZWxlY3Rpb25BY3RpdmUoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnRTZWxlY3Rpb25BY3RpdmU7IH0KLSAgICB2b2lkIHRvZ2dsZUVsZW1l
bnRTZWxlY3Rpb24oKTsKLQotICAgIGJvb2wgaXNVbmRlclRlc3QoKSBjb25zdCB7IHJldHVybiBt
X3VuZGVyVGVzdDsgfQotCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShi
b29sKTsKLQotICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYkluc3BlY3RvclByb3h5IGlt
cGxlbWVudGF0aW9ucy4KLSAgICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclBhZ2VVUkwoKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGluc3BlY3RvclRlc3RQYWdlVVJMKCk7Ci0gICAgc3RhdGljIFN0cmlu
ZyBpbnNwZWN0b3JCYXNlVVJMKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5zcGVj
dG9yUGFnZShjb25zdCBVUkwmKTsKLSAgICBzdGF0aWMgRGVidWdnYWJsZUluZm9EYXRhIGluZm9G
b3JMb2NhbERlYnVnZ2FibGUoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVt
V2luZG93V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1XaW5kb3dIZWln
aHQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5pdGlhbFdpbmRvd1dpZHRoOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbml0aWFsV2luZG93SGVpZ2h0OwotCi1wcml2YXRlOgot
ICAgIGV4cGxpY2l0IFdlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSopOwotCi0gICAgdm9p
ZCBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKLSAgICB2b2lkIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2lu
ZG93KCk7Ci0KLSAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgotICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAg
ICAvLyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAgQ29ubmVjdGlvblR5
cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb25uZWN0aW9uVHlw
ZTo6TG9jYWw7IH0KLQotICAgIFdlYlBhZ2VQcm94eSogcGxhdGZvcm1DcmVhdGVGcm9udGVuZFBh
Z2UoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlRnJvbnRlbmRXaW5kb3coKTsKLSAgICB2b2lk
IHBsYXRmb3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKTsKLQotICAgIHZvaWQgcGxhdGZv
cm1EaWRDbG9zZUZvckNyYXNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKLSAg
ICB2b2lkIHBsYXRmb3JtUmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgcGxhdGZvcm1CcmluZ1RvRnJv
bnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9Gcm9udCgpOwotICAg
IHZvaWQgcGxhdGZvcm1IaWRlKCk7Ci0gICAgYm9vbCBwbGF0Zm9ybUlzRnJvbnQoKTsKLSAgICB2
b2lkIHBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sKTsKLSAgICB2b2lkIHBs
YXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHBsYXRm
b3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpOwotICAg
IHVuc2lnbmVkIHBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQg
cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpOwotICAgIHZvaWQgcGxhdGZvcm1BdHRhY2go
KTsKLSAgICB2b2lkIHBsYXRmb3JtRGV0YWNoKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKLSAgICB2b2lkIHBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCh1bnNpZ25lZCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHBsYXRmb3JtU3RhcnRXaW5kb3dEcmFn
KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybVNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50KTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBib29sIHBsYXRmb3JtQ2Fu
QXR0YWNoKGJvb2wgd2ViUHJvY2Vzc0NhbkF0dGFjaCk7Ci0jZWxzZQotICAgIGJvb2wgcGxhdGZv
cm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKSB7IHJldHVybiB3ZWJQcm9jZXNz
Q2FuQXR0YWNoOyB9Ci0jZW5kaWYKLQotICAgIC8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3JQcm94
eSBtZXNzYWdlcwotICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5B
dHRhY2gsIGJvb2wgdW5kZXJUZXN0KTsKLSAgICB2b2lkIHNldEZyb250ZW5kQ29ubmVjdGlvbihJ
UEM6OkF0dGFjaG1lbnQpOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7Ci0gICAgdm9pZCBkaWRDbG9zZSgp
OwotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0gICAgdm9pZCBicmluZ0luc3BlY3RlZFBhZ2VU
b0Zyb250KCk7Ci0gICAgdm9pZCBhdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAg
IHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHNob3dD
ZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKTsKLSAgICB2b2lkIGVs
ZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdD
aGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJy
aWRlKE9wdGlvbmFsPGJvb2w+KTsKLQotICAgIHZvaWQgc2F2ZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3Jj
ZVNhdmVBcyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KTsKLQotICAgIGJvb2wgY2FuQXR0YWNoKCkgY29uc3QgeyByZXR1cm4g
bV9jYW5BdHRhY2g7IH0KLSAgICBib29sIHNob3VsZE9wZW5BdHRhY2hlZCgpOwotCi0gICAgdm9p
ZCBvcGVuKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwoKSBjb25zdDsKLQotICAg
IFdlYlByZWZlcmVuY2VzJiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKSBjb25zdDsKLQotI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQotICAgIHZvaWQgdXBkYXRlSW5zcGVjdG9y
V2luZG93VGl0bGUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIHN0
YXRpYyBMUkVTVUxUIENBTExCQUNLIHduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwotICAgIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwotICAgIHZvaWQgd2luZG93UmVjZWl2
ZWRNZXNzYWdlKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKSBvdmVycmlkZTsKLSNlbmRpZgot
Ci0gICAgV2ViUGFnZVByb3h5KiBtX2luc3BlY3RlZFBhZ2UgeyBudWxscHRyIH07Ci0gICAgV2Vi
UGFnZVByb3h5KiBtX2luc3BlY3RvclBhZ2UgeyBudWxscHRyIH07Ci0KLSAgICBib29sIG1fdW5k
ZXJUZXN0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNWaXNpYmxlIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faXNBdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2NhbkF0dGFjaCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2lzUHJvZmlsaW5nUGFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3No
b3dNZXNzYWdlU2VudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lnbm9yZUZpcnN0QnJpbmdUb0Zy
b250IHsgZmFsc2UgfTsKLSAgICBib29sIG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9pc09wZW5pbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0FjdGl2ZUZyb250
ZW5kIHsgZmFsc2UgfTsKLQotICAgIEF0dGFjaG1lbnRTaWRlIG1fYXR0YWNobWVudFNpZGUge0F0
dGFjaG1lbnRTaWRlOjpCb3R0b219OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0
cjxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyPiBtX2luc3BlY3RvclZpZXdDb250cm9sbGVyOwot
ICAgIFJldGFpblB0cjxOU1dpbmRvdz4gbV9pbnNwZWN0b3JXaW5kb3c7Ci0gICAgUmV0YWluUHRy
PFdLV2ViSW5zcGVjdG9yUHJveHlPYmpDQWRhcHRlcj4gbV9vYmpDQWRhcHRlcjsKLSAgICBIYXNo
TWFwPFN0cmluZywgUmV0YWluUHRyPE5TVVJMPj4gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcDsK
LSAgICBSdW5Mb29wOjpUaW1lcjxXZWJJbnNwZWN0b3JQcm94eT4gbV9jbG9zZUZyb250ZW5kQWZ0
ZXJJbmFjdGl2aXR5VGltZXI7Ci0gICAgU3RyaW5nIG1fdXJsU3RyaW5nOwotICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBtX3NoZWV0UmVjdDsKLSAgICBib29sIG1faXNPYnNlcnZpbmdDb250ZW50TGF5
b3V0UmVjdCB7IGZhbHNlIH07Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkluc3BlY3RvclByb3h5Q2xpZW50PiBtX2NsaWVudDsKLSAgICBHdGtXaWRnZXQqIG1f
aW5zcGVjdG9yVmlldyB7IG51bGxwdHIgfTsKLSAgICBHdGtXaWRnZXQqIG1faW5zcGVjdG9yV2lu
ZG93IHsgbnVsbHB0ciB9OwotICAgIEd0a1dpZGdldCogbV9oZWFkZXJCYXIgeyBudWxscHRyIH07
Ci0gICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIEhXTkQgbV9pbnNwZWN0ZWRWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9p
bnNwZWN0ZWRWaWV3UGFyZW50V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0
b3JWaWV3V2luZG93IHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cgeyBudWxscHRyIH07Ci0gICAgUmVmUHRyPFdlYlZpZXc+IG1faW5zcGVjdG9yVmlldzsKLSNl
bmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlYmI3NzU1M2M2YjExMDk3MjYyZDQ3ZDQxZjI2YjI0YzIxNjIwZjA3
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFy
ZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
LSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJJbnNwZWN0b3JQcm94eSB7Ci0gICAgT3BlbkxvY2Fs
SW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5kZXJUZXN0KQotICAgIFNl
dEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIp
Ci0KLSAgICBTZW5kTWVzc2FnZVRvQmFja2VuZChTdHJpbmcgbWVzc2FnZSkKLQotICAgIEZyb250
ZW5kTG9hZGVkKCkKLSAgICBEaWRDbG9zZSgpCi0gICAgQnJpbmdUb0Zyb250KCkKLSAgICBCcmlu
Z0luc3BlY3RlZFBhZ2VUb0Zyb250KCkKLSAgICBSZW9wZW4oKQotICAgIFJlc2V0U3RhdGUoKQot
Ci0gICAgSW5zcGVjdGVkVVJMQ2hhbmdlZChTdHJpbmcgdXJsU3RyaW5nKQotICAgIFNob3dDZXJ0
aWZpY2F0ZShXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvKQotICAgIEVs
ZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wgYWN0aXZlKQotICAgIFRpbWVsaW5lUmVjb3JkaW5n
Q2hhbmdlZChib29sIGFjdGl2ZSkKLSAgICBTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkT3Zl
cnJpZGUoT3B0aW9uYWw8Ym9vbD4gZW5hYmxlZCkKLQotICAgIFNhdmUoU3RyaW5nIGZpbGVuYW1l
LCBTdHJpbmcgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQot
ICAgIEFwcGVuZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50KQotCi0gICAgQXR0YWNo
Qm90dG9tKCkKLSAgICBBdHRhY2hSaWdodCgpCi0gICAgQXR0YWNoTGVmdCgpCi0gICAgRGV0YWNo
KCkKLQotICAgIEF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCi0KLSAg
ICBTZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi0gICAgU2V0QXR0YWNo
ZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLQotICAgIFNldFNoZWV0UmVjdChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKLQotICAgIFN0YXJ0V2luZG93RHJhZygpCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlYTE1ZWU2NTdkM2U1YjI2NGJlYzhjYWY3ZGI3YjdmNjUz
NTRkNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JVdGlsaXRpZXMuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiV2ViSW5zcGVjdG9yVXRpbGl0aWVzLmgiCi0KLSNpbmNsdWRlICJBUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGVOdW1iZXJzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi10eXBlZGVmIEhhc2hNYXA8V2Vi
UGFnZVByb3h5KiwgdW5zaWduZWQ+IFBhZ2VMZXZlbE1hcDsKLQotc3RhdGljIFBhZ2VMZXZlbE1h
cCYgcGFnZUxldmVsTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUxldmVs
TWFwPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdW5zaWduZWQgaW5zcGVjdG9yTGV2ZWxG
b3JQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICBpZiAocGFnZSkgewotICAgICAgICBh
dXRvIGZpbmRSZXN1bHQgPSBwYWdlTGV2ZWxNYXAoKS5maW5kKHBhZ2UpOwotICAgICAgICBpZiAo
ZmluZFJlc3VsdCAhPSBwYWdlTGV2ZWxNYXAoKS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
aW5kUmVzdWx0LT52YWx1ZSArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLVN0cmlu
ZyBpbnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShXZWJQYWdlUHJveHkqIHBhZ2Up
Ci17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIl9fV2ViSW5zcGVjdG9yUGFnZUdyb3VwTGV2ZWwi
LCBpbnNwZWN0b3JMZXZlbEZvclBhZ2UocGFnZSksICJfXyIpOwotfQotCi12b2lkIHRyYWNrSW5z
cGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSogaW5z
cGVjdGVkUGFnZSkKLXsKLSAgICBwYWdlTGV2ZWxNYXAoKS5zZXQoaW5zcGVjdG9yUGFnZSwgaW5z
cGVjdG9yTGV2ZWxGb3JQYWdlKGluc3BlY3RlZFBhZ2UpKTsKLX0KLQotdm9pZCB1bnRyYWNrSW5z
cGVjdG9yUGFnZShXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UpCi17Ci0gICAgcGFnZUxldmVs
TWFwKCkucmVtb3ZlKGluc3BlY3RvclBhZ2UpOwotfQotCi1zdGF0aWMgV2ViUHJvY2Vzc1Bvb2wq
IHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sOwotc3RhdGljIFdlYlByb2Nlc3NQb29sKiBzX25l
c3RlZEluc3BlY3RvclByb2Nlc3NQb29sOwotCi1XZWJQcm9jZXNzUG9vbCYgaW5zcGVjdG9yUHJv
Y2Vzc1Bvb2wodW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQotewotICAgIC8vIEhhdmluZyBvdXIg
b3duIHByb2Nlc3MgcG9vbCByZW1vdmVzIHVzIGZyb20gdGhlIG1haW4gcHJvY2VzcyBwb29sIGFu
ZAotICAgIC8vIGd1YXJhbnRlZXMgbm8gcHJvY2VzcyBzaGFyaW5nIGZvciBvdXIgdXNlciBpbnRl
cmZhY2UuCi0gICAgV2ViUHJvY2Vzc1Bvb2wqJiBwb29sID0gKGluc3BlY3Rpb25MZXZlbCA9PSAx
KSA/IHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sIDogc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNz
UG9vbDsKLSAgICBpZiAoIXBvb2wpIHsKLSAgICAgICAgYXV0byBjb25maWd1cmF0aW9uID0gQVBJ
OjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICBwb29sID0gJldl
YlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbi5nZXQoKSkubGVha1JlZigpOwotICAg
ICAgICAvLyBEbyBub3QgZGVsYXkgcHJvY2VzcyBsYXVuY2ggZm9yIGluc3BlY3RvciBwYWdlcyBh
cyBpbnNwZWN0b3IgcGFnZXMgZG8gbm90IGtub3cgaG93IHRvIHRyYW5zaXRpb24gZnJvbSBhIHRl
cm1pbmF0ZWQgcHJvY2Vzcy4KLSAgICAgICAgcG9vbC0+ZGlzYWJsZURlbGF5ZWRXZWJQcm9jZXNz
TGF1bmNoKCk7Ci0gICAgfQotICAgIHJldHVybiAqcG9vbDsKLX0KLQotYm9vbCBpc0luc3BlY3Rv
clByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKLXsKLSAgICByZXR1cm4g
KHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29sICYmIHNfbWFpbkluc3BlY3RvclByb2Nlc3NQb29s
ID09ICZwcm9jZXNzUG9vbCkKLSAgICAgICAgfHwgKHNfbmVzdGVkSW5zcGVjdG9yUHJvY2Vzc1Bv
b2wgJiYgc19uZXN0ZWRJbnNwZWN0b3JQcm9jZXNzUG9vbCA9PSAmcHJvY2Vzc1Bvb2wpOwotfQot
Ci1ib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCi17Ci0gICAgcmV0
dXJuIHBhZ2VMZXZlbE1hcCgpLmNvbnRhaW5zKCZ3ZWJQYWdlKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJbnNwZWN0
b3JVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxp
dGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTllYTc1ODhjYzE5NDEyYmZi
YWQ4YTM5ZjQyOTA1YzBlODc4MDhlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclV0aWxpdGll
cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJQcm9jZXNzUG9vbDsKLQotLy8g
VGhlIGluc3BlY3RvciBwYWdlIGdyb3VwcyBhcmUgdXNlZCB0byBnaXZlIGRpZmZlcmVudCBwcmVm
ZXJlbmNlcyB0byBlYWNoCi0vLyBpbnNwZWN0b3IgbGV2ZWwgYnkgc2V0dGluZyBhIHBlci1sZXZl
bCBwYWdlIGdyb3VwIGlkZW50aWZpZXIuCi11bnNpZ25lZCBpbnNwZWN0b3JMZXZlbEZvclBhZ2Uo
V2ViUGFnZVByb3h5Kik7Ci1TdHJpbmcgaW5zcGVjdG9yUGFnZUdyb3VwSWRlbnRpZmllckZvclBh
Z2UoV2ViUGFnZVByb3h5Kik7Ci12b2lkIHRyYWNrSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkq
IGluc3BlY3RvclBhZ2UsIFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSk7Ci12b2lkIHVudHJh
Y2tJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSogaW5zcGVjdG9yUGFnZSk7Ci0KLVdlYlByb2Nl
c3NQb29sJiBpbnNwZWN0b3JQcm9jZXNzUG9vbCh1bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpOwot
Ym9vbCBpc0luc3BlY3RvclByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sJik7Ci1ib29sIGlzSW5z
cGVjdG9yUGFnZShXZWJQYWdlUHJveHkmKTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZURlYnVnZ2FibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
ZWJiZGY4N2FjZTE3MmQyMzBhODVjNjFkMDViNjkxMGNkNzI0YjI1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VEZWJ1Z2dhYmxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYlBhZ2VEZWJ1Z2dhYmxlLmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotV2ViUGFn
ZURlYnVnZ2FibGU6OldlYlBhZ2VEZWJ1Z2dhYmxlKFdlYlBhZ2VQcm94eSYgcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotewotfQotCi1TdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6Om5hbWUoKSBj
b25zdAotewotICAgIGlmICghbV9uYW1lT3ZlcnJpZGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBtX25hbWVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlLm1haW5GcmFtZSgpKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV9wYWdlLm1haW5GcmFtZSgpLT50aXRs
ZSgpOwotfQotCi1TdHJpbmcgV2ViUGFnZURlYnVnZ2FibGU6OnVybCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3BhZ2UubWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybiBXVEY6OmJsYW5rVVJMKCku
c3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgdXJsID0gbV9wYWdlLm1haW5GcmFtZSgpLT51cmwoKS5z
dHJpbmcoKTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6Ymxh
bmtVUkwoKS5zdHJpbmcoKTsKLQotICAgIHJldHVybiB1cmw7Ci19Ci0KLWJvb2wgV2ViUGFnZURl
YnVnZ2FibGU6Omhhc0xvY2FsRGVidWdnZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2Uu
aW5zcGVjdG9yQ29udHJvbGxlcigpLmhhc0xvY2FsRnJvbnRlbmQoKTsKLX0KLQotdm9pZCBXZWJQ
YWdlRGVidWdnYWJsZTo6Y29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwsIGJvb2wgaXNB
dXRvbWF0aWNDb25uZWN0aW9uLCBib29sIGltbWVkaWF0ZWx5UGF1c2UpCi17Ci0gICAgbV9wYWdl
Lmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoY2hhbm5lbCwgaXNBdXRvbWF0
aWNDb25uZWN0aW9uLCBpbW1lZGlhdGVseVBhdXNlKTsKLX0KLQotdm9pZCBXZWJQYWdlRGVidWdn
YWJsZTo6ZGlzY29ubmVjdChGcm9udGVuZENoYW5uZWwmIGNoYW5uZWwpCi17Ci0gICAgbV9wYWdl
Lmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoY2hhbm5lbCk7Ci19Ci0K
LXZvaWQgV2ViUGFnZURlYnVnZ2FibGU6OmRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fcGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlz
cGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYlBhZ2VEZWJ1
Z2dhYmxlOjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZykKLXsKLSAgICBtX3BhZ2UuaW5z
cGVjdG9yQ29udHJvbGxlcigpLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Ci19Ci0KLXZvaWQg
V2ViUGFnZURlYnVnZ2FibGU6OnNldE5hbWVPdmVycmlkZShjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgbV9uYW1lT3ZlcnJpZGUgPSBuYW1lOwotICAgIHVwZGF0ZSgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VEZWJ1Z2dhYmxlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhmODQ4ZGUxMTZhNjE0NThkMTgzM2VhODA5ZmMwNmVmZDVlZTdhM2Qu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZURlYnVnZ2FibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdGlvblRhcmdldC5oPgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5
OwotCi1jbGFzcyBXZWJQYWdlRGVidWdnYWJsZSBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rpb25UYXJnZXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VEZWJ1Z2dhYmxlKTsKLXB1YmxpYzoKLSAgICBX
ZWJQYWdlRGVidWdnYWJsZShXZWJQYWdlUHJveHkmKTsKLSAgICB+V2ViUGFnZURlYnVnZ2FibGUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBJbnNwZWN0b3I6OlJlbW90ZUNvbnRyb2xsYWJsZVRhcmdldDo6
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpSZW1vdGVDb250cm9s
bGFibGVUYXJnZXQ6OlR5cGU6OldlYlBhZ2U7IH0KLQotICAgIFN0cmluZyBuYW1lKCkgY29uc3Qg
ZmluYWw7Ci0gICAgU3RyaW5nIHVybCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaGFzTG9jYWxE
ZWJ1Z2dlcigpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBp
bW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIGZpbmFsOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNw
ZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIGZpbmFsOwotICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdl
RnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOwotICAgIHZvaWQgc2V0SW5k
aWNhdGluZyhib29sKSBmaW5hbDsKLQotICAgIGNvbnN0IFN0cmluZyYgbmFtZU92ZXJyaWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lT3ZlcnJpZGU7IH0KLSAgICB2b2lkIHNldE5hbWVPdmVycmlk
ZShjb25zdCBTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsK
LSAgICBTdHJpbmcgbV9uYW1lT3ZlcnJpZGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DT05UUk9MTEFCTEVfVEFSR0VUKFdlYktpdDo6V2Vi
UGFnZURlYnVnZ2FibGUsIFdlYlBhZ2UpOwotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZTI4YmY3
MTYzNzQzNzE0MzMyMTUxNDhhYTIwYTUxOTI3YThhMzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZUlu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaCIKLQotI2luY2x1
ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgot
I2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudEJhc2UuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotc3RhdGljIFN0cmluZyBnZXRUYXJnZXRJRChjb25zdCBQcm92aXNpb25hbFBhZ2VQ
cm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIHJldHVybiBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Ojp0b1RhcmdldElEKHByb3Zpc2lvbmFsUGFnZS53ZWJQYWdlSUQoKSk7Ci19Ci0KLVdlYlBh
Z2VJbnNwZWN0b3JDb250cm9sbGVyOjpXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcihXZWJQYWdl
UHJveHkmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZnJvbnRlbmRSb3V0ZXIo
RnJvbnRlbmRSb3V0ZXI6OmNyZWF0ZSgpKQotICAgICwgbV9iYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKG1fZnJvbnRlbmRSb3V0ZXIuY29weVJlZigpKSkKLXsKLSAg
ICBhdXRvIHRhcmdldEFnZW50ID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JUYXJnZXRBZ2VudD4obV9m
cm9udGVuZFJvdXRlci5nZXQoKSwgbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKSk7Ci0KLSAgICBt
X3RhcmdldEFnZW50ID0gdGFyZ2V0QWdlbnQuZ2V0KCk7Ci0KLSAgICBtX2FnZW50cy5hcHBlbmQo
V1RGTW92ZSh0YXJnZXRBZ2VudCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9s
bGVyOjppbml0KCkKLXsKLSAgICBTdHJpbmcgcGFnZVRhcmdldElkID0gV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6dG9UYXJnZXRJRChtX3BhZ2Uud2ViUGFnZUlEKCkpOwotICAgIGNyZWF0ZUluc3Bl
Y3RvclRhcmdldChwYWdlVGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6
UGFnZSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OnBhZ2VDbG9zZWQo
KQotewotICAgIGRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKTsKLQotICAgIG1fYWdlbnRzLmRpc2Nh
cmRWYWx1ZXMoKTsKLX0KLQotYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzTG9j
YWxGcm9udGVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJvbnRlbmRSb3V0ZXItPmhhc0xv
Y2FsRnJvbnRlbmQoKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y29u
bmVjdEZyb250ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiBmcm9udGVuZENoYW5uZWws
IGJvb2wsIGJvb2wpCi17Ci0gICAgYm9vbCBjb25uZWN0aW5nRmlyc3RGcm9udGVuZCA9ICFtX2Zy
b250ZW5kUm91dGVyLT5oYXNGcm9udGVuZHMoKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXItPmNv
bm5lY3RGcm9udGVuZChmcm9udGVuZENoYW5uZWwpOwotCi0gICAgaWYgKGNvbm5lY3RpbmdGaXJz
dEZyb250ZW5kKQotICAgICAgICBtX2FnZW50cy5kaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
Jm1fZnJvbnRlbmRSb3V0ZXIuZ2V0KCksICZtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpKTsKLQot
ICAgIG1fcGFnZS5kaWRDaGFuZ2VJbnNwZWN0b3JGcm9udGVuZENvdW50KG1fZnJvbnRlbmRSb3V0
ZXItPmZyb250ZW5kQ291bnQoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAg
ICBpZiAoaGFzTG9jYWxGcm9udGVuZCgpKQotICAgICAgICBtX3BhZ2UucmVtb3RlSW5zcGVjdG9y
SW5mb3JtYXRpb25EaWRDaGFuZ2UoKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0
b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoRnJvbnRlbmRDaGFubmVsJiBmcm9udGVu
ZENoYW5uZWwpCi17Ci0gICAgbV9mcm9udGVuZFJvdXRlci0+ZGlzY29ubmVjdEZyb250ZW5kKGZy
b250ZW5kQ2hhbm5lbCk7Ci0KLSAgICBib29sIGRpc2Nvbm5lY3RpbmdMYXN0RnJvbnRlbmQgPSAh
bV9mcm9udGVuZFJvdXRlci0+aGFzRnJvbnRlbmRzKCk7Ci0gICAgaWYgKGRpc2Nvbm5lY3RpbmdM
YXN0RnJvbnRlbmQpCi0gICAgICAgIG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RvckRlc3Ryb3llZCk7Ci0KLSAgICBtX3BhZ2Uu
ZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRDb3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVu
ZENvdW50KCkpOwotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgaWYgKGRpc2Nv
bm5lY3RpbmdMYXN0RnJvbnRlbmQpCi0gICAgICAgIG1fcGFnZS5yZW1vdGVJbnNwZWN0b3JJbmZv
cm1hdGlvbkRpZENoYW5nZSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RBbGxGcm9udGVuZHMoKQotewotICAgIC8vIEZJWE1FOiBIYW5k
bGUgYSBsb2NhbCBpbnNwZWN0b3IgY2xpZW50LgotCi0gICAgaWYgKCFtX2Zyb250ZW5kUm91dGVy
LT5oYXNGcm9udGVuZHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90aWZ5IGFnZW50
cyBmaXJzdCwgc2luY2UgdGhleSBtYXkgbmVlZCB0byB1c2UgSW5zcGVjdG9yQ2xpZW50LgotICAg
IG1fYWdlbnRzLndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb246
Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7Ci0KLSAgICAvLyBEaXNjb25uZWN0IGFueSByZW1h
aW5pbmcgcmVtb3RlIGZyb250ZW5kcy4KLSAgICBtX2Zyb250ZW5kUm91dGVyLT5kaXNjb25uZWN0
QWxsRnJvbnRlbmRzKCk7Ci0KLSAgICBtX3BhZ2UuZGlkQ2hhbmdlSW5zcGVjdG9yRnJvbnRlbmRD
b3VudChtX2Zyb250ZW5kUm91dGVyLT5mcm9udGVuZENvdW50KCkpOwotCi0jaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCi0gICAgbV9wYWdlLnJlbW90ZUluc3BlY3RvckluZm9ybWF0aW9uRGlk
Q2hhbmdlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5kaXNwYXRjaChtZXNzYWdlKTsKLX0KLQotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCi17Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgbV9wYWdlLnNldEluZGljYXRpbmcoaW5kaWNhdGluZyk7Ci0jZWxzZQotICAgIGlmIChp
bmRpY2F0aW5nKQotICAgICAgICBtX3BhZ2Uuc2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fcGFnZS5oaWRlSW5zcGVjdG9ySW5kaWNhdGlvbigpOwotI2VuZGlm
Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6Y3JlYXRlSW5z
cGVjdG9yVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSB0eXBlKQotewotICAgIGFkZFRhcmdldChJbnNwZWN0b3JUYXJnZXRQcm94eTo6
Y3JlYXRlKG1fcGFnZSwgdGFyZ2V0SWQsIHR5cGUpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGVzdHJveUluc3BlY3RvclRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dElkKQotewotICAgIGF1dG8gaXQgPSBtX3RhcmdldHMuZmluZCh0YXJnZXRJZCk7Ci0gICAgaWYg
KGl0ID09IG1fdGFyZ2V0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGFyZ2V0QWdl
bnQtPnRhcmdldERlc3Ryb3llZCgqaXQtPnZhbHVlKTsKLSAgICBtX3RhcmdldHMucmVtb3ZlKGl0
KTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlcjo6c2VuZE1lc3NhZ2VUb0lu
c3BlY3RvckZyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBtX3RhcmdldEFnZW50LT5zZW5kTWVzc2FnZUZyb21UYXJnZXRUb0Zyb250
ZW5kKHRhcmdldElkLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJQYWdlSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFsUGFnZVByb3h5JiBwcm92
aXNpb25hbFBhZ2UpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Zyb250ZW5kUm91dGVyLT5oYXNGcm9u
dGVuZHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byogdGFyZ2V0ID0gbV90
YXJnZXRzLmdldChnZXRUYXJnZXRJRChwcm92aXNpb25hbFBhZ2UpKTsKLSAgICBBU1NFUlQodGFy
Z2V0KTsKLSAgICByZXR1cm4gdGFyZ2V0LT5pc1BhdXNlZCgpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhjb25zdCBQcm92
aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoKT4m
JiBjYWxsYmFjaykKLXsKLSAgICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KGdldFRhcmdl
dElEKHByb3Zpc2lvbmFsUGFnZSkpOwotICAgIEFTU0VSVCh0YXJnZXQpOwotICAgIHRhcmdldC0+
c2V0UmVzdW1lQ2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVQcm92aXNpb25hbFBhZ2UoUHJvdmlzaW9uYWxQ
YWdlUHJveHkmIHByb3Zpc2lvbmFsUGFnZSkKLXsKLSAgICBhZGRUYXJnZXQoSW5zcGVjdG9yVGFy
Z2V0UHJveHk6OmNyZWF0ZShwcm92aXNpb25hbFBhZ2UsIGdldFRhcmdldElEKHByb3Zpc2lvbmFs
UGFnZSksIEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZTo6UGFnZSkpOwotfQotCi12b2lk
IFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShj
b25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYgcHJvdmlzaW9uYWxQYWdlKQotewotICAgIGRlc3Ry
b3lJbnNwZWN0b3JUYXJnZXQoZ2V0VGFyZ2V0SUQocHJvdmlzaW9uYWxQYWdlKSk7Ci19Ci0KLXZv
aWQgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdFByb3Zpc2lvbmFsUGFnZShX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvbGRXZWJQYWdlSUQsIFdlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyIG5ld1dlYlBhZ2VJRCkKLXsKLSAgICBTdHJpbmcgb2xkSUQgPSBXZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Ojp0b1RhcmdldElEKG9sZFdlYlBhZ2VJRCk7Ci0gICAgU3RyaW5nIG5ld0lEID0gV2Vi
UGFnZUluc3BlY3RvclRhcmdldDo6dG9UYXJnZXRJRChuZXdXZWJQYWdlSUQpOwotICAgIGF1dG8g
bmV3VGFyZ2V0ID0gbV90YXJnZXRzLnRha2UobmV3SUQpOwotICAgIEFTU0VSVChuZXdUYXJnZXQp
OwotICAgIG5ld1RhcmdldC0+ZGlkQ29tbWl0UHJvdmlzaW9uYWxUYXJnZXQoKTsKLSAgICBtX3Rh
cmdldEFnZW50LT5kaWRDb21taXRQcm92aXNpb25hbFRhcmdldChvbGRJRCwgbmV3SUQpOwotCi0g
ICAgLy8gV2UndmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIG9sZCBwYWdlIGFuZCB3aWxsIG5vdCBy
ZWNlaXZlIGFueSBtZXNzYWdlIGZyb20gaXQsIHNvCi0gICAgLy8gd2UgZGVzdHJveSBldmVyeXRo
aW5nIGJ1dCB0aGUgbmV3IHRhcmdldCBoZXJlLgotICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMjAyOTM3PiBkbyBub3QgZGVzdHJveSB0YXJnZXRzIHRoYXQgYmVsb25nIHRvIHRo
ZSBjb21taXR0ZWQgcGFnZS4KLSAgICBmb3IgKGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0cy52YWx1
ZXMoKSkKLSAgICAgICAgbV90YXJnZXRBZ2VudC0+dGFyZ2V0RGVzdHJveWVkKCp0YXJnZXQpOwot
ICAgIG1fdGFyZ2V0cy5jbGVhcigpOwotICAgIG1fdGFyZ2V0cy5zZXQobmV3VGFyZ2V0LT5pZGVu
dGlmaWVyKCksIFdURk1vdmUobmV3VGFyZ2V0KSk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3Rv
ckNvbnRyb2xsZXI6OmFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yVGFyZ2V0UHJv
eHk+JiYgdGFyZ2V0KQotewotICAgIG1fdGFyZ2V0QWdlbnQtPnRhcmdldENyZWF0ZWQoKnRhcmdl
dCk7Ci0gICAgbV90YXJnZXRzLnNldCh0YXJnZXQtPmlkZW50aWZpZXIoKSwgV1RGTW92ZSh0YXJn
ZXQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzhjYWVkZjBjMGNlODM2NzU1Njk1MDJkMTUwZmNjNDRlNWY5ODY4Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGFyZ2V0UHJveHkuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5Lmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci1jbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKLWNsYXNz
IEZyb250ZW5kQ2hhbm5lbDsKLWNsYXNzIEZyb250ZW5kUm91dGVyOwotfQotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvckNvbnRyb2xsZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyKTsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxl
cihXZWJQYWdlUHJveHkmKTsKLQotICAgIHZvaWQgaW5pdCgpOwotICAgIHZvaWQgcGFnZUNsb3Nl
ZCgpOwotCi0gICAgYm9vbCBoYXNMb2NhbEZyb250ZW5kKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGNv
bm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0
aWNJbnNwZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKLSAg
ICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwot
ICAgIHZvaWQgZGlzY29ubmVjdEFsbEZyb250ZW5kcygpOwotCi0gICAgdm9pZCBkaXNwYXRjaE1l
c3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQotICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sKTsKLSNlbmRpZgot
Ci0gICAgdm9pZCBjcmVhdGVJbnNwZWN0b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlKTsKLSAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0
b3JUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRv
SW5zcGVjdG9yRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKLQotICAgIGJvb2wgc2hvdWxkUGF1c2VMb2FkaW5nKGNvbnN0IFByb3Zpc2lvbmFs
UGFnZVByb3h5JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250aW51ZUxvYWRpbmdDYWxsYmFjayhj
b25zdCBQcm92aXNpb25hbFBhZ2VQcm94eSYsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYmKTsKLQot
ICAgIHZvaWQgZGlkQ3JlYXRlUHJvdmlzaW9uYWxQYWdlKFByb3Zpc2lvbmFsUGFnZVByb3h5Jik7
Ci0gICAgdm9pZCB3aWxsRGVzdHJveVByb3Zpc2lvbmFsUGFnZShjb25zdCBQcm92aXNpb25hbFBh
Z2VQcm94eSYpOwotICAgIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxQYWdlKFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyIG9sZFdlYlBhZ2VJRCwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbmV3V2Vi
UGFnZUlEKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFkZFRhcmdldChzdGQ6OnVuaXF1ZV9wdHI8
SW5zcGVjdG9yVGFyZ2V0UHJveHk+JiYpOwotCi0gICAgV2ViUGFnZVByb3h5JiBtX3BhZ2U7Ci0g
ICAgUmVmPEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7Ci0gICAg
UmVmPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci0g
ICAgSW5zcGVjdG9yOjpBZ2VudFJlZ2lzdHJ5IG1fYWdlbnRzOwotICAgIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVGFyZ2V0QWdlbnQqIG1fdGFyZ2V0QWdlbnQ7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUYXJnZXRQcm94eT4+IG1fdGFyZ2V0czsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkOWQ1MGRjMjg2YmQ1M2Q3N2U3OWFiYTk3YzEwOGM4MTM2ZWIyN2MwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUluc3BlY3RvckNsaWVudC5oIgot
Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJBUElEZWJ1Z2dhYmxl
SW5mby5oIgotI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yVXRpbHMuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3h5IGZpbmFsIDogcHVibGljIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Q2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCgpOwotcHVibGlj
OgotICAgIFJlbW90ZUluc3BlY3RvclByb3h5KFJlbW90ZUluc3BlY3RvckNsaWVudCYgaW5zcGVj
dG9yQ2xpZW50LCB1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKQotICAg
ICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSgpKQotICAgICAg
ICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAgICAgICAgLCBtX2Nvbm5l
Y3Rpb25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJRCh0YXJnZXRJRCkKLSAg
ICB7Ci0gICAgICAgIG1fcHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICB9Ci0KLSAgICB+UmVt
b3RlSW5zcGVjdG9yUHJveHkoKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KG51
bGxwdHIpOwotICAgICAgICBtX3Byb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBsb2FkKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MDU1MzY+OiB0aGlzIHNob3VsZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1
ZyB0YXJnZXQuCi0gICAgICAgIFJlZjxBUEk6OkRlYnVnZ2FibGVJbmZvPiBkZWJ1Z2dhYmxlSW5m
byA9IEFQSTo6RGVidWdnYWJsZUluZm86OmNyZWF0ZShEZWJ1Z2dhYmxlSW5mb0RhdGE6OmVtcHR5
KCkpOwotICAgICAgICBkZWJ1Z2dhYmxlSW5mby0+c2V0RGVidWdnYWJsZVR5cGUoSW5zcGVjdG9y
OjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZSk7Ci0gICAgICAgIG1fcHJveHktPmxvYWQoV1RGTW92
ZShkZWJ1Z2dhYmxlSW5mbyksIG1faW5zcGVjdG9yQ2xpZW50LmJhY2tlbmRDb21tYW5kc1VSTCgp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNob3coKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2hv
dygpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VGFyZ2V0TmFtZShjb25zdCBDU3RyaW5nJiBuYW1l
KQotICAgIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIG1fcHJveHktPnVwZGF0ZVdpbmRv
d1RpdGxlKG5hbWUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJv
bnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VUb0JhY2tlbmQobV9jb25uZWN0aW9uSUQs
IG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRl
bmQoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuY2xvc2VGcm9t
RnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+IG1fcHJveHk7Ci0gICAgUmVtb3RlSW5z
cGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLSAgICB1aW50NjRfdCBtX2Nvbm5lY3Rp
b25JRDsKLSAgICB1aW50NjRfdCBtX3RhcmdldElEOwotfTsKLQotY29uc3QgU29ja2V0Q29ubmVj
dGlvbjo6TWVzc2FnZUhhbmRsZXJzJiBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6Om1lc3NhZ2VIYW5k
bGVycygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFNvY2tldENvbm5lY3Rp
b246Ok1lc3NhZ2VIYW5kbGVycz4gbWVzc2FnZUhhbmRsZXJzID0gU29ja2V0Q29ubmVjdGlvbjo6
TWVzc2FnZUhhbmRsZXJzKHsKLSAgICB7ICJEaWRDbG9zZSIsIHN0ZDo6cGFpcjxDU3RyaW5nLCBT
b2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgeyB9LAotICAgICAgICBbXShTb2Nr
ZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAg
ICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19jYXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVz
ZXJEYXRhKTsKLSAgICAgICAgICAgIGNsaWVudC5jb25uZWN0aW9uRGlkQ2xvc2UoKTsKLSAgICAg
ICAgfX0KLSAgICB9LAotICAgIHsgIkRpZFNldHVwSW5zcGVjdG9yQ2xpZW50Iiwgc3RkOjpwYWly
PENTdHJpbmcsIFNvY2tldENvbm5lY3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKGF5KSIsCi0g
ICAgICAgIFtdKFNvY2tldENvbm5lY3Rpb24mLCBHVmFyaWFudCogcGFyYW1ldGVycywgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIGNsaWVudCA9ICpzdGF0aWNfY2FzdDxS
ZW1vdGVJbnNwZWN0b3JDbGllbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgICAgICBHUmVmUHRyPEdW
YXJpYW50PiBiYWNrZW5kQ29tbWFuZHNWYXJpYW50OwotICAgICAgICAgICAgZ192YXJpYW50X2dl
dChwYXJhbWV0ZXJzLCAiKEBheSkiLCAmYmFja2VuZENvbW1hbmRzVmFyaWFudC5vdXRQdHIoKSk7
Ci0gICAgICAgICAgICBjbGllbnQuc2V0QmFja2VuZENvbW1hbmRzKGdfdmFyaWFudF9nZXRfYnl0
ZXN0cmluZyhiYWNrZW5kQ29tbWFuZHNWYXJpYW50LmdldCgpKSk7Ci0gICAgICAgIH19Ci0gICAg
fSwKLSAgICB7ICJTZXRUYXJnZXRMaXN0Iiwgc3RkOjpwYWlyPENTdHJpbmcsIFNvY2tldENvbm5l
Y3Rpb246Ok1lc3NhZ2VDYWxsYmFjaz4geyAiKHRhKHRzc3NiKSkiLAotICAgICAgICBbXShTb2Nr
ZXRDb25uZWN0aW9uJiwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIGdwb2ludGVyIHVzZXJEYXRhKSB7
Ci0gICAgICAgICAgICBhdXRvJiBjbGllbnQgPSAqc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9y
Q2xpZW50Kj4odXNlckRhdGEpOwotICAgICAgICAgICAgZ3VpbnQ2NCBjb25uZWN0aW9uSUQ7Ci0g
ICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdWYXJpYW50SXRlcj4gaXRlcjsKLSAgICAgICAgICAg
IGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywgIih0YSh0c3NzYikpIiwgJmNvbm5lY3Rpb25JRCwg
Jml0ZXIub3V0UHRyKCkpOwotICAgICAgICAgICAgc2l6ZV90IHRhcmdldENvdW50ID0gZ192YXJp
YW50X2l0ZXJfbl9jaGlsZHJlbihpdGVyLmdldCgpKTsKLSAgICAgICAgICAgIFZlY3RvcjxSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OlRhcmdldD4gdGFyZ2V0TGlzdDsKLSAgICAgICAgICAgIHRhcmdl
dExpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0YXJnZXRDb3VudCk7Ci0gICAgICAgICAgICBn
dWludDY0IHRhcmdldElEOwotICAgICAgICAgICAgY29uc3QgY2hhciogdHlwZTsKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB1cmw7Ci0gICAg
ICAgICAgICBnYm9vbGVhbiBoYXNMb2NhbERlYnVnZ2VyOwotICAgICAgICAgICAgd2hpbGUgKGdf
dmFyaWFudF9pdGVyX2xvb3AoaXRlci5nZXQoKSwgIih0JnMmcyZzYikiLCAmdGFyZ2V0SUQsICZ0
eXBlLCAmbmFtZSwgJnVybCwgJmhhc0xvY2FsRGVidWdnZXIpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFnX3N0cmNtcDAodHlwZSwgIldlYiIpIHx8ICFnX3N0cmNtcDAodHlwZSwgIkphdmFTY3Jp
cHQiKSkKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGlzdC51bmNoZWNrZWRBcHBlbmQoeyB0
YXJnZXRJRCwgdHlwZSwgbmFtZSwgdXJsIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y2xpZW50LnNldFRhcmdldExpc3QoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExpc3QpKTsK
LSAgICAgICAgfX0KLSAgICB9LAotICAgIHsgIlNlbmRNZXNzYWdlVG9Gcm9udGVuZCIsIHN0ZDo6
cGFpcjxDU3RyaW5nLCBTb2NrZXRDb25uZWN0aW9uOjpNZXNzYWdlQ2FsbGJhY2s+IHsgIih0dHMp
IiwKLSAgICAgICAgW10oU29ja2V0Q29ubmVjdGlvbiYsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBn
cG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICAgICAgYXV0byYgY2xpZW50ID0gKnN0YXRpY19j
YXN0PFJlbW90ZUluc3BlY3RvckNsaWVudCo+KHVzZXJEYXRhKTsKLSAgICAgICAgICAgIGd1aW50
NjQgY29ubmVjdGlvbklELCB0YXJnZXRJRDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3Nh
Z2U7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMsICIodHQmcykiLCAmY29u
bmVjdGlvbklELCAmdGFyZ2V0SUQsICZtZXNzYWdlKTsKLSAgICAgICAgICAgIGNsaWVudC5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29ubmVjdGlvbklELCB0YXJnZXRJRCwgbWVzc2FnZSk7Ci0gICAg
ICAgIH19Ci0gICAgfQotICAgIH0pOwotICAgIHJldHVybiBtZXNzYWdlSGFuZGxlcnM7Ci19Ci0K
LVJlbW90ZUluc3BlY3RvckNsaWVudDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50KGNvbnN0IGNoYXIq
IGFkZHJlc3MsIHVuc2lnbmVkIHBvcnQsIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyJiBvYnNlcnZl
cikKLSAgICA6IG1faG9zdEFuZFBvcnQoU3RyaW5nOjpmcm9tVVRGOChhZGRyZXNzKSArICc6JyAr
IFN0cmluZzo6bnVtYmVyKHBvcnQpKQotICAgICwgbV9vYnNlcnZlcihvYnNlcnZlcikKLSAgICAs
IG1fY2FuY2VsbGFibGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQotewotICAgIEdS
ZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2Ns
aWVudF9uZXcoKSk7Ci0gICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhz
b2NrZXRDbGllbnQuZ2V0KCksIG1faG9zdEFuZFBvcnQudXRmOCgpLmRhdGEoKSwgMCwgbV9jYW5j
ZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgW10oR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IGNv
bm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5p
c2goR19TT0NLRVRfQ0xJRU5UKG9iamVjdCksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7Ci0g
ICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBH
X0lPX0VSUk9SX0NBTkNFTExFRCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYXV0byogY2xpZW50ID0gc3RhdGljX2Nhc3Q8UmVtb3RlSW5zcGVjdG9yQ2xpZW50Kj4odXNl
ckRhdGEpOwotICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pCi0gICAgICAgICAgICAgICAgY2xp
ZW50LT5zZXR1cENvbm5lY3Rpb24oU29ja2V0Q29ubmVjdGlvbjo6Y3JlYXRlKFdURk1vdmUoY29u
bmVjdGlvbiksIG1lc3NhZ2VIYW5kbGVycygpLCBjbGllbnQpKTsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVtb3RlSW5zcGVjdG9yQ2xpZW50IGZh
aWxlZCB0byBjb25uZWN0IHRvIGluc3BlY3RvciBzZXJ2ZXI6ICVzIiwgZXJyb3ItPm1lc3NhZ2Up
OwotICAgICAgICAgICAgICAgIGNsaWVudC0+bV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCpj
bGllbnQpOwotICAgICAgICAgICAgfQotICAgIH0sIHRoaXMpOwotfQotCi1SZW1vdGVJbnNwZWN0
b3JDbGllbnQ6On5SZW1vdGVJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGdfY2FuY2VsbGFibGVf
Y2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNs
aWVudDo6c2V0dXBDb25uZWN0aW9uKFJlZjxTb2NrZXRDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24p
Ci17Ci0gICAgbV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKTsKLSAgICBt
X3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZXR1cEluc3BlY3RvckNsaWVudCIsIGdf
dmFyaWFudF9uZXcoIihAYXkpIiwgZ192YXJpYW50X25ld19ieXRlc3RyaW5nKEluc3BlY3Rvcjo6
YmFja2VuZENvbW1hbmRzSGFzaCgpLmRhdGEoKSkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcyhjb25zdCBjaGFyKiBiYWNrZW5kQ29tbWFuZHMp
Ci17Ci0gICAgaWYgKCFiYWNrZW5kQ29tbWFuZHMgfHwgIWJhY2tlbmRDb21tYW5kc1swXSkgewot
ICAgICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IFN0cmluZygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGJhY2tlbmRDb21tYW5kcywgc3RybGVuKGJhY2tlbmRDb21tYW5kcyksIGJhc2U2NERhdGEpOwot
ICAgIG1fYmFja2VuZENvbW1hbmRzVVJMID0gImRhdGE6dGV4dC9qYXZhc2NyaXB0O2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OmNvbm5lY3Rp
b25EaWRDbG9zZSgpCi17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9pbnNwZWN0b3JQ
cm94eU1hcC5jbGVhcigpOwotICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAg
bV9vYnNlcnZlci5jb25uZWN0aW9uQ2xvc2VkKCp0aGlzKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3QodWludDY0X3QgY29ubmVjdGlvbklELCB1aW50NjRfdCB0YXJn
ZXRJRCkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW5zcGVjdG9yUHJveHlNYXAuZW5zdXJl
KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpLCBbdGhpcywgY29ubmVjdGlv
bklELCB0YXJnZXRJRF0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW1vdGVJbnNwZWN0
b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpOwotICAgIH0pOwotICAgIGlm
ICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+c2hvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zb2NrZXRDb25u
ZWN0aW9uLT5zZW5kTWVzc2FnZSgiU2V0dXAiLCBnX3ZhcmlhbnRfbmV3KCIodHQpIiwgY29ubmVj
dGlvbklELCB0YXJnZXRJRCkpOwotICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmxvYWQo
KTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9CYWNrZW5k
KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKLXsKLSAgICBtX3NvY2tldENvbm5lY3Rpb24tPnNlbmRNZXNzYWdlKCJTZW5kTWVz
c2FnZVRvQmFja2VuZCIsIGdfdmFyaWFudF9uZXcoIih0dHMpIiwgY29ubmVjdGlvbklELCB0YXJn
ZXRJRCwgbWVzc2FnZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90
IHRhcmdldElEKQotewotICAgIEFTU0VSVChtX2luc3BlY3RvclByb3h5TWFwLmNvbnRhaW5zKHN0
ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQpKSk7Ci0gICAgbV9zb2NrZXRDb25u
ZWN0aW9uLT5zZW5kTWVzc2FnZSgiRnJvbnRlbmREaWRDbG9zZSIsIGdfdmFyaWFudF9uZXcoIih0
dCkiLCBjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5y
ZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwotfQotCi12b2lk
IFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCh1aW50NjRfdCBjb25uZWN0aW9u
SUQsIFZlY3RvcjxUYXJnZXQ+JiYgdGFyZ2V0TGlzdCkKLXsKLSAgICAvLyBGaW5kIGNsb3NlZCB0
YXJnZXRzIHRvIHJlbW92ZSB0aGVtLgotICAgIFZlY3Rvcjx1aW50NjRfdCwgND4gdGFyZ2V0c1Rv
UmVtb3ZlOwotICAgIGZvciAoYXV0byYgY29ubmVjdGlvblRhcmdldFBhaXIgOiBtX2luc3BlY3Rv
clByb3h5TWFwLmtleXMoKSkgewotICAgICAgICBpZiAoY29ubmVjdGlvblRhcmdldFBhaXIuZmly
c3QgIT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0YXJnZXQgOiB0YXJnZXRM
aXN0KSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmlkID09IGNvbm5lY3Rpb25UYXJnZXRQYWly
LnNlY29uZCkgewotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KGNvbm5l
Y3Rpb25UYXJnZXRQYWlyKS0+c2V0VGFyZ2V0TmFtZSh0YXJnZXQubmFtZSk7Ci0gICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICB0YXJnZXRzVG9S
ZW1vdmUuYXBwZW5kKGNvbm5lY3Rpb25UYXJnZXRQYWlyLnNlY29uZCk7Ci0gICAgfQotICAgIGZv
ciAoYXV0byB0YXJnZXRJRCA6IHRhcmdldHNUb1JlbW92ZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQ
cm94eU1hcC5yZW1vdmUoc3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCkpOwot
Ci0gICAgbV90YXJnZXRzLnNldChjb25uZWN0aW9uSUQsIFdURk1vdmUodGFyZ2V0TGlzdCkpOwot
ICAgIG1fb2JzZXJ2ZXIudGFyZ2V0TGlzdENoYW5nZWQoKnRoaXMpOwotfQotCi12b2lkIFJlbW90
ZUluc3BlY3RvckNsaWVudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHVpbnQ2NF90IGNvbm5lY3Rp
b25JRCwgdWludDY0X3QgdGFyZ2V0SUQsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgYXV0
byBwcm94eSA9IG1faW5zcGVjdG9yUHJveHlNYXAuZ2V0KHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rp
b25JRCwgdGFyZ2V0SUQpKTsKLSAgICBBU1NFUlQocHJveHkpOwotICAgIGlmICghcHJveHkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZzo6
ZnJvbVVURjgobWVzc2FnZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2dsaWIvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFkZWUwMmNlNWQ2ZjE4OWM5MjM0ZjA3OTg3MWM3M2QwZDU4OTExNDkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ2xpYi9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL1NvY2tldENvbm5lY3Rpb24uaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX0dDYW5j
ZWxsYWJsZSBHQ2FuY2VsbGFibGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1v
dGVJbnNwZWN0b3JDbGllbnQ7Ci1jbGFzcyBSZW1vdGVJbnNwZWN0b3JQcm94eTsKLWNsYXNzIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OwotCi1jbGFzcyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgdGFyZ2V0TGlzdENoYW5nZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKFJlbW90ZUluc3BlY3RvckNs
aWVudCYpID0gMDsKLX07Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvckNsaWVudCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQoKTsKLXB1YmxpYzoKLSAgICBSZW1vdGVJbnNwZWN0b3JDbGll
bnQoY29uc3QgY2hhciogYWRkcmVzcywgdW5zaWduZWQgcG9ydCwgUmVtb3RlSW5zcGVjdG9yT2Jz
ZXJ2ZXImKTsKLSAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7Ci0KLSAgICBzdHJ1Y3QgVGFy
Z2V0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHVpbnQ2NF90IGlkOwotICAgICAgICBDU3RyaW5n
IHR5cGU7Ci0gICAgICAgIENTdHJpbmcgbmFtZTsKLSAgICAgICAgQ1N0cmluZyB1cmw7Ci0gICAg
fTsKLQotICAgIGNvbnN0IEhhc2hNYXA8dWludDY0X3QsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQotICAgIGNvbnN0IFN0cmluZyYgaG9zdEFu
ZFBvcnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RBbmRQb3J0OyB9Ci0gICAgY29uc3QgU3RyaW5n
JiBiYWNrZW5kQ29tbWFuZHNVUkwoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRDb21tYW5kc1VS
TDsgfQotCi0gICAgdm9pZCBpbnNwZWN0KHVpbnQ2NF90IGNvbm5lY3Rpb25JRCwgdWludDY0X3Qg
dGFyZ2V0SUQpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQodWludDY0X3QgY29ubmVj
dGlvbklELCB1aW50NjRfdCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBjbG9z
ZUZyb21Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90IHRhcmdldElEKTsK
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgU29ja2V0Q29ubmVjdGlvbjo6TWVzc2FnZUhh
bmRsZXJzJiBtZXNzYWdlSGFuZGxlcnMoKTsKLSAgICB2b2lkIHNldHVwQ29ubmVjdGlvbihSZWY8
U29ja2V0Q29ubmVjdGlvbj4mJik7Ci0gICAgdm9pZCBjb25uZWN0aW9uRGlkQ2xvc2UoKTsKLQot
ICAgIHZvaWQgc2V0QmFja2VuZENvbW1hbmRzKGNvbnN0IGNoYXIqKTsKLSAgICB2b2lkIHNldFRh
cmdldExpc3QodWludDY0X3QgY29ubmVjdGlvbklELCBWZWN0b3I8VGFyZ2V0PiYmKTsKLSAgICB2
b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZCh1aW50NjRfdCBjb25uZWN0aW9uSUQsIHVpbnQ2NF90
IHRhcmdldElELCBjb25zdCBjaGFyKik7Ci0KLSAgICBTdHJpbmcgbV9ob3N0QW5kUG9ydDsKLSAg
ICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0gICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2
ZXImIG1fb2JzZXJ2ZXI7Ci0gICAgUmVmUHRyPFNvY2tldENvbm5lY3Rpb24+IG1fc29ja2V0Q29u
bmVjdGlvbjsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8VGFyZ2V0Pj4gbV90YXJnZXRzOwotICAgIEhhc2hNYXA8
c3RkOjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbnNw
ZWN0b3JQcm94eT4+IG1faW5zcGVjdG9yUHJveHlNYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1JlbW90ZVdlYkluc3BlY3RvclByb3h5R3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eUd0
ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMDg4ZGQwOGIwNjAyZDJlOTRl
ODU3OTQ2MDRhMjI2MjhjYjQyMDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1JlbW90ZVdlYkluc3BlY3Rv
clByb3h5R3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLSNpbmNsdWRlICJXZWJLaXRJbnNw
ZWN0b3JXaW5kb3cuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5m
by5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
Ojp1cGRhdGVXaW5kb3dUaXRsZShjb25zdCBDU3RyaW5nJiB0YXJnZXROYW1lKQotewotICAgIGlm
ICghbV93aW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICB3ZWJraXRJbnNwZWN0b3JXaW5kb3dT
ZXRTdWJ0aXRsZShXRUJLSVRfSU5TUEVDVE9SX1dJTkRPVyhtX3dpbmRvdyksICF0YXJnZXROYW1l
LmlzTnVsbCgpID8gdGFyZ2V0TmFtZS5kYXRhKCkgOiBudWxscHRyKTsKLX0KLQotc3RhdGljIHZv
aWQgcmVtb3RlSW5zcGVjdG9yVmlld0Rlc3Ryb3llZChSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSog
aW5zcGVjdG9yUHJveHkpCi17Ci0gICAgaW5zcGVjdG9yUHJveHktPmNsb3NlRnJvbUNyYXNoKCk7
Ci19Ci0KLVdlYlBhZ2VQcm94eSogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3Jl
YXRlRnJvbnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBBU1NFUlQoIW1fd2ViVmlldyk7Ci0K
LSAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwg
IldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0jaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQotICAg
IC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1
ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAgICBwcmVmZXJlbmNlcy0+c2V0TG9nc1Bh
Z2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBhdXRv
IHBhZ2VHcm91cCA9IFdlYlBhZ2VHcm91cDo6Y3JlYXRlKGluc3BlY3RvclBhZ2VHcm91cElkZW50
aWZpZXJGb3JQYWdlKG51bGxwdHIpKTsKLQotICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclByb2Nlc3NQb29sKGluc3BlY3RvckxldmVsRm9yUGFn
ZShudWxscHRyKSkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcyhwcmVm
ZXJlbmNlcy5wdHIoKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cChwYWdl
R3JvdXAucHRyKCkpOwotICAgIG1fd2ViVmlldyA9IEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jh
c2VDcmVhdGUoKnBhZ2VDb25maWd1cmF0aW9uLnB0cigpKSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fd2ViVmlldywgImRlc3Ryb3kiLCBHX0NBTExCQUNLKHJlbW90ZUluc3BlY3Rv
clZpZXdEZXN0cm95ZWQpLCB0aGlzKTsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdf
T0JKRUNUKG1fd2ViVmlldyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJWaWV3KSk7
Ci0KLSAgICBtX3dpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhudWxscHRyKTsKLSAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fd2luZG93KSwgbV93ZWJWaWV3KTsK
LSAgICBndGtfd2lkZ2V0X3Nob3cobV93ZWJWaWV3KTsKLQotICAgIGdfb2JqZWN0X2FkZF93ZWFr
X3BvaW50ZXIoR19PQkpFQ1QobV93aW5kb3cpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1f
d2luZG93KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cobV93aW5kb3cpKTsK
LQotICAgIHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JB
U0UobV93ZWJWaWV3KSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX3dlYlZpZXcpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VC
S0lUX1dFQl9WSUVXX0JBU0UobV93ZWJWaWV3KSkpCi0gICAgICAgICAgICB3ZWJQYWdlLT5jbG9z
ZSgpOwotICAgIH0KLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJv
eShtX3dpbmRvdyk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
UmVzZXRTdGF0ZSgpCi17Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBpZiAobV93aW5kb3cpCi0gICAgICAgIGd0a193aW5k
b3dfcHJlc2VudChHVEtfV0lORE9XKG1fd2luZG93KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW90
ZUZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmplY3QsIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHRmlsZSogZmlsZSA9
IEdfRklMRShzb3VyY2VPYmplY3QpOwotICAgIGlmICghZ19maWxlX3JlcGxhY2VfY29udGVudHNf
ZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1c2VyRGF0YSk7
Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlKSk7Ci0gICAg
cGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRT
YXZlKHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZl
RGlhbG9nKQotewotICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOwotCi0gICAgR1Jl
ZlB0cjxHdGtGaWxlQ2hvb3Nlck5hdGl2ZT4gZGlhbG9nID0gYWRvcHRHUmVmKGd0a19maWxlX2No
b29zZXJfbmF0aXZlX25ldygiU2F2ZSBGaWxlIiwKLSAgICAgICAgR1RLX1dJTkRPVyhtX3dpbmRv
dyksIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUsICJTYXZlIiwgIkNhbmNlbCIpKTsKLQot
ICAgIEd0a0ZpbGVDaG9vc2VyKiBjaG9vc2VyID0gR1RLX0ZJTEVfQ0hPT1NFUihkaWFsb2cuZ2V0
KCkpOwotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2RvX292ZXJ3cml0ZV9jb25maXJtYXRpb24o
Y2hvb3NlciwgVFJVRSk7Ci0KLSAgICAvLyBTb21lIGluc3BlY3RvciB2aWV3cyAoQXVkaXRzIGZv
ciBpbnN0YW5jZSkgdXNlIGEgY3VzdG9tIFVSSSBzY2hlbWUsIHN1Y2gKLSAgICAvLyBhcyB3ZWIt
aW5zcGVjdG9yLiBTbyB3ZSBjYW4ndCByZWx5IG9uIHRoZSBVUkwgYmVpbmcgYSB2YWxpZCBmaWxl
Oi8vLyBVUkwKLSAgICAvLyB1bmZvcnR1bmF0ZWx5LgotICAgIFVSTCB1cmwoVVJMKCksIHN1Z2dl
c3RlZFVSTCk7Ci0gICAgLy8gU3RyaXAgbGVhZGluZyAvIGNoYXJhY3Rlci4KLSAgICBndGtfZmls
ZV9jaG9vc2VyX3NldF9jdXJyZW50X25hbWUoY2hvb3NlciwgdXJsLnBhdGgoKS5zdWJzdHJpbmco
MSkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAoZ3RrX25hdGl2ZV9kaWFsb2dfcnVuKEdUS19O
QVRJVkVfRElBTE9HKGRpYWxvZy5nZXQoKSkpICE9IEdUS19SRVNQT05TRV9BQ0NFUFQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxjaGFyPiBkYXRhVmVjdG9yOwotICAgIENTdHJpbmcg
ZGF0YVN0cmluZzsKLSAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZShjb250ZW50LCBkYXRhVmVjdG9yLCBCYXNlNjRWYWxpZGF0ZVBhZGRpbmcpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkYXRhVmVjdG9yLnNocmlua1RvRml0KCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGRhdGFTdHJpbmcgPSBjb250ZW50LnV0ZjgoKTsKLQotICAgIGNvbnN0
IGNoYXIqIGRhdGEgPSAhZGF0YVN0cmluZy5pc051bGwoKSA/IGRhdGFTdHJpbmcuZGF0YSgpIDog
ZGF0YVZlY3Rvci5kYXRhKCk7Ci0gICAgc2l6ZV90IGRhdGFMZW5ndGggPSAhZGF0YVN0cmluZy5p
c051bGwoKSA/IGRhdGFTdHJpbmcubGVuZ3RoKCkgOiBkYXRhVmVjdG9yLnNpemUoKTsKLSAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGUo
Y2hvb3NlcikpOwotICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3BhdGgoZmls
ZS5nZXQoKSkpOwotICAgIGdfZmlsZV9yZXBsYWNlX2NvbnRlbnRzX2FzeW5jKGZpbGUuZ2V0KCks
IGRhdGEsIGRhdGFMZW5ndGgsIG51bGxwdHIsIGZhbHNlLAotICAgICAgICBHX0ZJTEVfQ1JFQVRF
X1JFUExBQ0VfREVTVElOQVRJT04sIG51bGxwdHIsIHJlbW90ZUZpbGVSZXBsYWNlQ29udGVudHND
YWxsYmFjaywgbV9pbnNwZWN0b3JQYWdlKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29u
c3QgRmxvYXRSZWN0JikKLXsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBDZXJ0
aWZpY2F0ZUluZm8mKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTk5YzQ0NjU3Njg4YTI4YWJhZTdhYTEwMWFiMjI2NzdiZDgxMTNhZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvclByb3h5OwotCi1jbGFzcyBX
ZWJJbnNwZWN0b3JQcm94eUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViSW5zcGVj
dG9yUHJveHlDbGllbnQoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3co
V2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKFdlYklu
c3BlY3RvclByb3h5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBicmluZ1RvRnJvbnQoV2ViSW5z
cGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQo
V2ViSW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIHVybCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBhdHRhY2goV2ViSW5zcGVjdG9yUHJveHkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRl
dGFjaChXZWJJbnNwZWN0b3JQcm94eSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
QXR0YWNoZWRIZWlnaHQoV2ViSW5zcGVjdG9yUHJveHkmLCB1bnNpZ25lZCBoZWlnaHQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aChXZWJJbnNwZWN0b3JQcm94
eSYsIHVuc2lnbmVkIHdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUF0dGFj
aEF2YWlsYWJpbGl0eShXZWJJbnNwZWN0b3JQcm94eSYsIGJvb2wgYXZhaWxhYmxlKSA9IDA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZmRlMzQ5YmI3MTlhMGY1ZWYyMGE3YmI2ZmUzNjdkMjE3ZmU0NzBlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1
MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEg
PGduc0Bnbm9tZS5vcmc+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKLSNp
bmNsdWRlICJBUElOYXZpZ2F0aW9uQWN0aW9uLmgiCi0jaW5jbHVkZSAiV0tBcnJheS5oIgotI2lu
Y2x1ZGUgIldLQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiV0tNdXRhYmxlQXJyYXkuaCIK
LSNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JQcm94eUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJTWVzc2FnZXMu
aCIKLSNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKLSNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HdGtVdGls
aXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8
d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9pZCBpbnNwZWN0b3JWaWV3RGVzdHJveWVk
KEd0a1dpZGdldCosIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYkluc3BlY3RvclByb3h5
KiBpbnNwZWN0b3JQcm94eSA9IHN0YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4odXNlckRh
dGEpOwotCi0gICAgLy8gSW5mb3JtIFdlYlByb2Nlc3MgYWJvdXQgd2ViaW5zcGVjdG9yIGNsb3N1
cmUuIE5vdCBkb2luZyBzbywKLSAgICAvLyByZXN1bHRzIGluIGZhaWx1cmUgb2Ygc3Vic2VxdWVu
dCBpbnZvY2F0aW9uIG9mIHdlYmluc3BlY3Rvci4KLSAgICBpbnNwZWN0b3JQcm94eS0+Y2xvc2Uo
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxXZWJJbnNwZWN0b3JQcm94eUNsaWVudD4mJiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQgPSBX
VEZNb3ZlKGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3Bl
Y3RvcldpbmRvd1RpdGxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JXaW5kb3cp
OwotICAgIHdlYmtpdEluc3BlY3RvcldpbmRvd1NldFN1YnRpdGxlKFdFQktJVF9JTlNQRUNUT1Jf
V0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgIW1faW5zcGVjdGVkVVJMU3RyaW5nLmlzRW1wdHko
KSA/IG1faW5zcGVjdGVkVVJMU3RyaW5nLnV0ZjgoKS5kYXRhKCkgOiBudWxscHRyKTsKLX0KLQot
c3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBleGNlZWRlZERhdGFiYXNlUXVvdGEoV0tQYWdlUmVm
LCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmLCBXS1N0cmluZ1JlZiwgV0tTdHJpbmdS
ZWYsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25n
IGxvbmcgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVz
YWdlLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gc3RkOjptYXg8dW5zaWduZWQgbG9uZyBs
b25nPihleHBlY3RlZFVzYWdlLCBjdXJyZW50RGF0YWJhc2VVc2FnZSAqIDEuMjUpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJQcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQotewotICAgIFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0
YXRpY19jYXN0PFdlYkluc3BlY3RvclByb3h5Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpOwotICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3JQcm94eSk7Ci0gICAgd2ViSW5zcGVjdG9yUHJv
eHktPmNsb3NlRm9yQ3Jhc2goKTsKLX0KLQotc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgV0tOYXZpZ2F0aW9uQWN0aW9uUmVmIG5h
dmlnYXRpb25BY3Rpb25SZWYsIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwg
V0tUeXBlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIC8vIEFsbG93IG5vbi1t
YWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KLSAgICBBUEk6OkZyYW1lSW5mbyogc291
cmNlRnJhbWUgPSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnNvdXJjZUZyYW1lKCk7Ci0g
ICAgaWYgKHNvdXJjZUZyYW1lICYmICFzb3VyY2VGcmFtZS0+aXNNYWluRnJhbWUoKSkgewotICAg
ICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGNvbnN0IFdlYkluc3BlY3RvclByb3h5KiB3ZWJJbnNwZWN0b3JQcm94eSA9IHN0
YXRpY19jYXN0PGNvbnN0IFdlYkluc3BlY3RvclByb3h5Kj4oY2xpZW50SW5mbyk7Ci0gICAgQVNT
RVJUKHdlYkluc3BlY3RvclByb3h5KTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBy
ZXF1ZXN0ID0gdG9JbXBsKG5hdmlnYXRpb25BY3Rpb25SZWYpLT5yZXF1ZXN0KCk7Ci0KLSAgICAv
LyBBbGxvdyBsb2FkaW5nIG9mIHRoZSBtYWluIGluc3BlY3RvciBmaWxlLgotICAgIGlmIChXZWJJ
bnNwZWN0b3JQcm94eTo6aXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShyZXF1ZXN0LnVybCgpKSkg
ewotICAgICAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT51c2UoeyB9KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlIGZyb20gbG9hZGluZyBp
biB0aGUgaW5zcGVjdG9yJ3MgcGFnZS4KLSAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5pZ25vcmUo
KTsKLQotICAgIC8vIEFuZCBpbnN0ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgot
ICAgIHdlYkluc3BlY3RvclByb3h5LT5pbnNwZWN0ZWRQYWdlKCktPmxvYWRSZXF1ZXN0KFdURk1v
dmUocmVxdWVzdCkpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3Nl
ZE1lbnUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLQXJyYXlSZWYgcHJvcG9zZWRNZW51UmVmLCBXS0Fy
cmF5UmVmKiBuZXdNZW51UmVmLCBXS0hpdFRlc3RSZXN1bHRSZWYsIFdLVHlwZVJlZiwgY29uc3Qg
dm9pZCopCi17Ci0gICAgV0tNdXRhYmxlQXJyYXlSZWYgbWVudUl0ZW1zID0gV0tNdXRhYmxlQXJy
YXlDcmVhdGUoKTsKLQotICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHByb3Bvc2Vk
TWVudVJlZik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIFdLQ29udGV4dE1lbnVJdGVtUmVmIGNvbnRleHRNZW51SXRlbSA9IHN0YXRpY19jYXN0PFdL
Q29udGV4dE1lbnVJdGVtUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgocHJvcG9zZWRNZW51UmVm
LCBpKSk7Ci0gICAgICAgIHN3aXRjaCAoV0tDb250ZXh0TWVudUl0ZW1HZXRUYWcoY29udGV4dE1l
bnVJdGVtKSkgewotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5O
ZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5O
ZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5O
ZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5O
ZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5r
VG9EaXNrOgotICAgICAgICBjYXNlIGtXS0NvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VU
b0Rpc2s6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFdLQXJyYXlBcHBlbmRJdGVtKG1lbnVJdGVtcywgY29udGV4dE1lbnVJdGVtKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgKm5ld01lbnVSZWYgPSBtZW51SXRl
bXM7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsKLSAgICBBU1NF
UlQoIW1faW5zcGVjdG9yVmlldyk7Ci0KLSAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVy
ZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0jaWYgRU5B
QkxFKERFVkVMT1BFUl9NT0RFKQotICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0
aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5n
cy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAg
ICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQo
dHJ1ZSk7Ci0jZW5kaWYKLSAgICBwcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFn
cyh7Ci0gICAgfSk7Ci0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShp
bnNwZWN0b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKLQot
ICAgIGF1dG8gcGFnZUNvbmZpZ3VyYXRpb24gPSBBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpjcmVh
dGUoKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJvY2Vzc1Bvb2woJmluc3BlY3RvclBy
b2Nlc3NQb29sKGluc3BlY3Rpb25MZXZlbCgpKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLnB0cigpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+
c2V0UGFnZUdyb3VwKHBhZ2VHcm91cC5wdHIoKSk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3ID0gR1RL
X1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZSgqcGFnZUNvbmZpZ3VyYXRpb24ucHRyKCkp
KTsKLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1faW5zcGVjdG9yVmll
dyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9pbnNwZWN0b3JWaWV3KSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChtX2luc3BlY3RvclZpZXcsICJkZXN0cm95IiwgR19DQUxMQkFDSyhpbnNw
ZWN0b3JWaWV3RGVzdHJveWVkKSwgdGhpcyk7Ci0KLSAgICBXS1BhZ2VVSUNsaWVudFYyIHVpQ2xp
ZW50ID0gewotICAgICAgICB7IDIsIHRoaXMgfSwKLSAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRl
TmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dQ
YWdlCi0gICAgICAgIG51bGxwdHIsIC8vIGNsb3NlUGFnZQotICAgICAgICBudWxscHRyLCAvLyB0
YWtlRm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8gZm9jdXMKLSAgICAgICAgbnVsbHB0ciwgLy8g
dW5mb2N1cwotICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKLSAgICAgICAg
bnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm0KLSAgICAgICAgbnVsbHB0ciwgLy8gcnVu
SmF2YVNjcmlwdFByb21wdAotICAgICAgICBudWxscHRyLCAvLyBzZXRTdGF0dXNUZXh0Ci0gICAg
ICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2RlcHJlY2F0ZWRGb3JVc2VX
aXRoVjAKLSAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdpbkJ1dHRvbkNsaWNrZWRfZGVw
cmVjYXRlZEZvclVzZVdpdGhWMAotICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVLZXlF
dmVudAotICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVXaGVlbEV2ZW50Ci0gICAgICAg
IG51bGxwdHIsIC8vIGFyZVRvb2xiYXJzVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBzZXRU
b29sYmFyc1Zpc2libGUKLSAgICAgICAgbnVsbHB0ciwgLy8gaXNNZW51QmFyVmlzaWJsZQotICAg
ICAgICBudWxscHRyLCAvLyBzZXRNZW51QmFyVmlzaWJsZQotICAgICAgICBudWxscHRyLCAvLyBp
c1N0YXR1c0JhclZpc2libGUKLSAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFyVmlzaWJs
ZQotICAgICAgICBudWxscHRyLCAvLyBpc1Jlc2l6YWJsZQotICAgICAgICBudWxscHRyLCAvLyBz
ZXRSZXNpemFibGUKLSAgICAgICAgbnVsbHB0ciwgLy8gZ2V0V2luZG93RnJhbWUsCi0gICAgICAg
IG51bGxwdHIsIC8vIHNldFdpbmRvd0ZyYW1lLAotICAgICAgICBudWxscHRyLCAvLyBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdwotICAgICAg
ICBudWxscHRyLCAvLyBwYWdlRGlkU2Nyb2xsCi0gICAgICAgIGV4Y2VlZGVkRGF0YWJhc2VRdW90
YSwKLSAgICAgICAgbnVsbHB0ciwgLy8gcnVuT3BlblBhbmVsLAotICAgICAgICBudWxscHRyLCAv
LyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0gICAgICAgIG51
bGxwdHIsIC8vIGhlYWRlckhlaWdodAotICAgICAgICBudWxscHRyLCAvLyBmb290ZXJIZWlnaHQK
LSAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0hlYWRlcgotICAgICAgICBudWxscHRyLCAvLyBkcmF3
Rm9vdGVyCi0gICAgICAgIG51bGxwdHIsIC8vIHByaW50RnJhbWUKLSAgICAgICAgbnVsbHB0ciwg
Ly8gcnVuTW9kYWwKLSAgICAgICAgbnVsbHB0ciwgLy8gdW51c2VkCi0gICAgICAgIG51bGxwdHIs
IC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKLSAgICAgICAgbnVsbHB0ciwgLy8g
c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAotICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVQYWdl
Ci0gICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50Ci0gICAgICAgIG51
bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Ci0g
ICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNh
dGVkRm9yVXNlV2l0aFYxCi0gICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgotICAg
ICAgICBudWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIKLSAgICAgICAgbnVsbHB0ciwgLy8gdW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkCi0gICAgfTsKLQotICAgIFdLUGFnZU5hdmlnYXRp
b25DbGllbnRWMCBuYXZpZ2F0aW9uQ2xpZW50ID0gewotICAgICAgICB7IDAsIHRoaXMgfSwKLSAg
ICAgICAgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbiwKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlCi0gICAgICAgIG51bGxwdHIsIC8v
IGRlY2lkZVBvbGljeUZvclBsdWdpbkxvYWQKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3RhcnRQ
cm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRp
ZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ29tbWl0
TmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRGaW5pc2hOYXZpZ2F0aW9uCi0gICAg
ICAgIG51bGxwdHIsIC8vIGRpZEZhaWxOYXZpZ2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIGRp
ZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEZp
bmlzaERvY3VtZW50TG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uCi0gICAgICAgIG51bGxwdHIsIC8vIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlCi0g
ICAgICAgIG51bGxwdHIsIC8vIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UK
LSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi0g
ICAgICAgIHdlYlByb2Nlc3NEaWRDcmFzaCwKLSAgICAgICAgbnVsbHB0ciwgLy8gY29weVdlYkNy
eXB0b01hc3RlcktleQotCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZEJlZ2luTmF2aWdhdGlvbkdl
c3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gd2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAg
ICAgIG51bGxwdHIsIC8vIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlCi0gICAgICAgIG51bGxwdHIs
IC8vIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKLSAgICB9OwotCi0gICAgV0tQ
YWdlQ29udGV4dE1lbnVDbGllbnRWMyBjb250ZXh0TWVudUNsaWVudCA9IHsKLSAgICAgICAgeyAz
LCB0aGlzIH0sCi0gICAgICAgIG51bGxwdHIsIC8vIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2Vk
TWVudV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCi0gICAgICAgIG51bGxwdHIsIC8vIGN1c3RvbUNv
bnRleHRNZW51SXRlbVNlbGVjdGVkCi0gICAgICAgIG51bGxwdHIsIC8vIGNvbnRleHRNZW51RGlz
bWlzc2VkCi0gICAgICAgIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudSwKLSAgICAgICAg
bnVsbHB0ciwgLy8gc2hvd0NvbnRleHRNZW51Ci0gICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb250
ZXh0TWVudQotICAgIH07Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJr
aXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JWaWV3
KSk7Ci0gICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOwotCi0gICAgV0tQYWdlU2V0UGFnZVVJQ2xp
ZW50KHRvQVBJKGluc3BlY3RvclBhZ2UpLCAmdWlDbGllbnQuYmFzZSk7Ci0gICAgV0tQYWdlU2V0
UGFnZU5hdmlnYXRpb25DbGllbnQodG9BUEkoaW5zcGVjdG9yUGFnZSksICZuYXZpZ2F0aW9uQ2xp
ZW50LmJhc2UpOwotICAgIFdLUGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudCh0b0FQSShpbnNw
ZWN0b3JQYWdlKSwgJmNvbnRleHRNZW51Q2xpZW50LmJhc2UpOwotCi0gICAgcmV0dXJuIGluc3Bl
Y3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlRnJv
bnRlbmRXaW5kb3coKQotewotICAgIGlmIChtX2NsaWVudCAmJiBtX2NsaWVudC0+b3BlbldpbmRv
dygqdGhpcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0a1dpZGdldCogaW5zcGVjdGVkVmll
d1BhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dp
ZGdldCgpKTsKLSAgICBpZiAoIVdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRv
dyhpbnNwZWN0ZWRWaWV3UGFyZW50KSkKLSAgICAgICAgaW5zcGVjdGVkVmlld1BhcmVudCA9IG51
bGxwdHI7Ci0KLSAgICBBU1NFUlQoIW1faW5zcGVjdG9yV2luZG93KTsKLSAgICBtX2luc3BlY3Rv
cldpbmRvdyA9IHdlYmtpdEluc3BlY3RvcldpbmRvd05ldyhpbnNwZWN0ZWRWaWV3UGFyZW50ID8g
R1RLX1dJTkRPVyhpbnNwZWN0ZWRWaWV3UGFyZW50KSA6IG51bGxwdHIpOwotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBtX2luc3BlY3RvclZp
ZXcpOwotICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOwotCi0gICAgaWYgKCFt
X2luc3BlY3RlZFVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHVwZGF0ZUluc3BlY3Rvcldp
bmRvd1RpdGxlKCk7Ci0KLSAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKG1f
aW5zcGVjdG9yV2luZG93KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX2luc3BlY3Rvcldp
bmRvdykpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKG1faW5zcGVjdG9yV2lu
ZG93KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9udGVu
ZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvclZpZXcpIHsKLSAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwotICAg
ICAgICBtX2luc3BlY3RvclZpZXcgPSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCp0aGlzKTsKLQotICAgIGlmIChtX2luc3Bl
Y3RvcldpbmRvdykgewotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9pbnNwZWN0b3JXaW5k
b3cpOwotICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IG51bGxwdHI7Ci0gICAgfQotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQotewotfQot
Ci12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRTdGF0ZSgp
Ci17Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkK
LXsKLSAgICBpZiAobV9pc09wZW5pbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Ns
aWVudCAmJiBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR3RrV2lkZ2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3Bl
Y3RvclZpZXcpOwotICAgIGlmIChXZWJDb3JlOjp3aWRnZXRJc09uc2NyZWVuVG9wbGV2ZWxXaW5k
b3cocGFyZW50KSkKLSAgICAgICAgZ3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1cocGFyZW50
KSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQ
YWdlVG9Gcm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICBHdGtXaWRnZXQqIHBhcmVudCA9
IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaWYgKFdlYkNv
cmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhwYXJlbnQpKQotICAgICAgICByZXR1
cm4gbV9pc1Zpc2libGUgJiYgZ3RrX3dpbmRvd19pc19hY3RpdmUoR1RLX1dJTkRPVyhwYXJlbnQp
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2luc3Bl
Y3RlZFVSTFN0cmluZyA9IHVybDsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50
LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKCp0aGlzLCB1cmwpOwotCi0gICAgaWYgKG1faW5zcGVjdG9y
V2luZG93KQotICAgICAgICB1cGRhdGVJbnNwZWN0b3JXaW5kb3dUaXRsZSgpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dDZXJ0aWZpY2F0ZShjb25zdCBXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmlu
ZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0
cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNwZWN0b3IvVXNlckludGVyZmFjZS9NYWlu
Lmh0bWwiKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFn
ZVVSTCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZygicmVzb3VyY2U6Ly8vb3JnL3dlYmtpdC9pbnNw
ZWN0b3IvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwiKTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKCJyZXNvdXJj
ZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Vc2VySW50ZXJmYWNlLyIpOwotfQotCi1EZWJ1Z2dh
YmxlSW5mb0RhdGEgV2ViSW5zcGVjdG9yUHJveHk6OmluZm9Gb3JMb2NhbERlYnVnZ2FibGUoKQot
ewotICAgIC8vIEZJWE1FIDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDU1MzY+OiB0aGlzIHNob3Vs
ZCBpbmZlciBtb3JlIHVzZWZ1bCBkYXRhIGFib3V0IHRoZSBkZWJ1ZyB0YXJnZXQuCi0gICAgcmV0
dXJuIERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVj
dG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICByZXR1cm4g
Z3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodChpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRn
ZXQoKSk7Ci19Ci0KLXVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3Rl
ZFdpbmRvd1dpZHRoKCkKLXsKLSAgICByZXR1cm4gZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGVkX3dp
ZHRoKGluc3BlY3RlZFBhZ2UoKS0+dmlld1dpZGdldCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNw
ZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykg
ewotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1faW5zcGVjdG9y
V2luZG93KSwgbV9pbnNwZWN0b3JWaWV3KTsKLSAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1f
aW5zcGVjdG9yV2luZG93KTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSAwOwotICAgIH0K
LQotICAgIC8vIFNldCBhIGRlZmF1bHQgc2l6ZXMgYmFzZWQgb24gSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkU2l6
ZSA9IDMwMDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFjaGVkV2lkdGgg
PSA3NTA7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1BdHRhY2hlZEhlaWdodCA9
IDI1MDsKLQotICAgIGlmIChtX2F0dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0
b20pIHsKLSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1J
bnNwZWN0ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4o
ZGVmYXVsdEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNw
ZWN0ZWRXaW5kb3dXaWR0aCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRX
aW5kb3dXaWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVs
dEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7Ci0gICAgfQotCi0gICAgaWYg
KG1fY2xpZW50ICYmIG1fY2xpZW50LT5hdHRhY2goKnRoaXMpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZFdlYkluc3BlY3RvcihXRUJLSVRfV0VCX1ZJRVdfQkFT
RShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRnZXQoKSksIG1faW5zcGVjdG9yVmlldywgbV9hdHRh
Y2htZW50U2lkZSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KG1faW5zcGVjdG9yVmlldyk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBpZiAoIWlu
c3BlY3RlZFBhZ2UoKS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR1JlZlB0cjxHdGtXaWRnZXQ+IGluc3BlY3RvclZpZXcgPSBtX2luc3BlY3RvclZpZXc7Ci0g
ICAgaWYgKCFtX2NsaWVudCB8fCAhbV9jbGllbnQtPmRldGFjaCgqdGhpcykpIHsKLSAgICAgICAg
Ly8gRGV0YWNoIGlzIGNhbGxlZCB3aGVuIG1faXNBdHRhY2hlZCBpcyB0cnVlLCBidXQgaXQgY291
bGQgY2FsbGVkIGJlZm9yZQotICAgICAgICAvLyB0aGUgaW5zcGVjdG9yIGlzIG9wZW5lZCBpZiB0
aGUgaW5zcGVjdG9yIGlzIHNob3duL2Nsb3NlZCBxdWlja2x5LiBTbywKLSAgICAgICAgLy8gd2Ug
bWlnaHQgbm90IGhhdmUgYSBwYXJlbnQgeWV0LgotICAgICAgICBpZiAoR3RrV2lkZ2V0KiBwYXJl
bnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQobV9pbnNwZWN0b3JWaWV3KSkKLSAgICAgICAgICAg
IGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIocGFyZW50KSwgbV9pbnNwZWN0b3JW
aWV3KTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgaWYgd2UgYXJlIG5vdCB2aXNpYmxl
LiBUaGlzIG1lYW5zIHRoZSBpbnNwZWN0b3Igd2FzIGNsb3NlZCB3aGlsZSBhdHRhY2hlZAotICAg
IC8vIGFuZCB3ZSBzaG91bGQgbm90IGNyZWF0ZSBhbmQgc2hvdyB0aGUgaW5zcGVjdG9yIHdpbmRv
dy4KLSAgICBpZiAoIW1faXNWaXNpYmxlKSB7Ci0gICAgICAgIC8vIFRoZSBpbnNwZWN0b3Igdmll
dyB3aWxsIGJlIGRlc3Ryb3llZCwgYnV0IHdlIGRvbid0IG5lZWQgdG8gbm90aWZ5IHRoZSB3ZWIg
cHJvY2VzcyB0byBjbG9zZSB0aGUKLSAgICAgICAgLy8gaW5zcGVjdG9yIGluIHRoaXMgY2FzZSwg
c2luY2UgaXQncyBhbHJlYWR5IGNsb3NlZC4KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
aW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcg
PSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgb3BlbigpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlQXR0YWNo
ZWRIZWlnaHQoKnRoaXMsIGhlaWdodCk7Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VTZXRJbnNwZWN0
b3JWaWV3U2l6ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRShpbnNwZWN0ZWRQYWdlKCktPnZpZXdXaWRn
ZXQoKSksIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBpZiAoIW1faXNBdHRh
Y2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+ZGlkQ2hhbmdlQXR0YWNoZWRXaWR0aCgqdGhpcywgd2lkdGgpOwotICAgIHdlYmtpdFdl
YlZpZXdCYXNlU2V0SW5zcGVjdG9yVmlld1NpemUoV0VCS0lUX1dFQl9WSUVXX0JBU0UoaW5zcGVj
dGVkUGFnZSgpLT52aWV3V2lkZ2V0KCkpLCB3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtU2V0U2hlZXRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1TdGFydFdpbmRvd0RyYWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZpbGVSZXBsYWNlQ29udGVudHNDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2VPYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBHRmls
ZSogZmlsZSA9IEdfRklMRShzb3VyY2VPYmplY3QpOwotICAgIGlmICghZ19maWxlX3JlcGxhY2Vf
Y29udGVudHNfZmluaXNoKGZpbGUsIHJlc3VsdCwgbnVsbHB0ciwgbnVsbHB0cikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPih1
c2VyRGF0YSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxl
KSk7Ci0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpE
aWRTYXZlKHBhdGguZ2V0KCkpLCBwYWdlLT53ZWJQYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlh
bG9nKQotewotICAgIFVOVVNFRF9QQVJBTShmb3JjZVNhdmVEaWFsb2cpOwotCi0gICAgR3RrV2lk
Z2V0KiBwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChtX2luc3BlY3RvclZpZXcpOwot
ICAgIGlmICghV2ViQ29yZTo6d2lkZ2V0SXNPbnNjcmVlblRvcGxldmVsV2luZG93KHBhcmVudCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrRmlsZUNob29zZXJOYXRpdmU+IGRp
YWxvZyA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX25hdGl2ZV9uZXcoIlNhdmUgRmlsZSIs
Ci0gICAgICAgIEdUS19XSU5ET1cocGFyZW50KSwgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fU0FW
RSwgIlNhdmUiLCAiQ2FuY2VsIikpOwotCi0gICAgR3RrRmlsZUNob29zZXIqIGNob29zZXIgPSBH
VEtfRklMRV9DSE9PU0VSKGRpYWxvZy5nZXQoKSk7Ci0gICAgZ3RrX2ZpbGVfY2hvb3Nlcl9zZXRf
ZG9fb3ZlcndyaXRlX2NvbmZpcm1hdGlvbihjaG9vc2VyLCBUUlVFKTsKLQotICAgIC8vIFNvbWUg
aW5zcGVjdG9yIHZpZXdzIChBdWRpdHMgZm9yIGluc3RhbmNlKSB1c2UgYSBjdXN0b20gVVJJIHNj
aGVtZSwgc3VjaAotICAgIC8vIGFzIHdlYi1pbnNwZWN0b3IuIFNvIHdlIGNhbid0IHJlbHkgb24g
dGhlIFVSTCBiZWluZyBhIHZhbGlkIGZpbGU6Ly8vIFVSTAotICAgIC8vIHVuZm9ydHVuYXRlbHku
Ci0gICAgVVJMIHVybChVUkwoKSwgc3VnZ2VzdGVkVVJMKTsKLSAgICAvLyBTdHJpcCBsZWFkaW5n
IC8gY2hhcmFjdGVyLgotICAgIGd0a19maWxlX2Nob29zZXJfc2V0X2N1cnJlbnRfbmFtZShjaG9v
c2VyLCB1cmwucGF0aCgpLnN1YnN0cmluZygxKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChn
dGtfbmF0aXZlX2RpYWxvZ19ydW4oR1RLX05BVElWRV9ESUFMT0coZGlhbG9nLmdldCgpKSkgIT0g
R1RLX1JFU1BPTlNFX0FDQ0VQVCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPGNoYXI+
IGRhdGFWZWN0b3I7Ci0gICAgQ1N0cmluZyBkYXRhU3RyaW5nOwotICAgIGlmIChiYXNlNjRFbmNv
ZGVkKSB7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGRhdGFWZWN0b3IsIEJh
c2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGFW
ZWN0b3Iuc2hyaW5rVG9GaXQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGF0YVN0cmluZyA9IGNv
bnRlbnQudXRmOCgpOwotCi0gICAgY29uc3QgY2hhciogZGF0YSA9ICFkYXRhU3RyaW5nLmlzTnVs
bCgpID8gZGF0YVN0cmluZy5kYXRhKCkgOiBkYXRhVmVjdG9yLmRhdGEoKTsKLSAgICBzaXplX3Qg
ZGF0YUxlbmd0aCA9ICFkYXRhU3RyaW5nLmlzTnVsbCgpID8gZGF0YVN0cmluZy5sZW5ndGgoKSA6
IGRhdGFWZWN0b3Iuc2l6ZSgpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYo
Z3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFy
PiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7Ci0gICAgZ19maWxlX3JlcGxhY2Vf
Y29udGVudHNfYXN5bmMoZmlsZS5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0aCwgbnVsbHB0ciwgZmFs
c2UsCi0gICAgICAgIEdfRklMRV9DUkVBVEVfUkVQTEFDRV9ERVNUSU5BVElPTiwgbnVsbHB0ciwg
ZmlsZVJlcGxhY2VDb250ZW50c0NhbGxiYWNrLCBtX2luc3BlY3RvclBhZ2UpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChib29sIGF2YWlsYWJsZSkK
LXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VBdHRhY2hB
dmFpbGFiaWxpdHkoKnRoaXMsIGF2YWlsYWJsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3Rv
cldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9y
V2luZG93LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5MGYwZTZmMzBmODNj
YzY3NGFkODc3MTIwZDlhODlhYTc3OTVmZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVj
dG9yV2luZG93LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJLaXRJbnNwZWN0b3JXaW5kb3cuaCIKLQotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclByb3h5LmgiCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDx3dGYv
Z2xpYi9HVW5pcXVlUHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLXN0cnVjdCBf
V2ViS2l0SW5zcGVjdG9yV2luZG93IHsKLSAgICBHdGtXaW5kb3cgcGFyZW50OwotCi0gICAgR3Rr
V2lkZ2V0KiBoZWFkZXJCYXI7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0Ns
YXNzIHsKLSAgICBHdGtXaW5kb3dDbGFzcyBwYXJlbnQ7Ci19OwotCi1HX0RFRklORV9UWVBFKFdl
YktpdEluc3BlY3RvcldpbmRvdywgd2Via2l0X2luc3BlY3Rvcl93aW5kb3csIEdUS19UWVBFX1dJ
TkRPVykKLQotc3RhdGljIHZvaWQgd2Via2l0X2luc3BlY3Rvcl93aW5kb3dfY2xhc3NfaW5pdChX
ZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcyopCi17Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9p
bnNwZWN0b3Jfd2luZG93X2luaXQoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3cpCi17Ci0g
ICAgd2luZG93LT5oZWFkZXJCYXIgPSBndGtfaGVhZGVyX2Jhcl9uZXcoKTsKLSAgICBndGtfaGVh
ZGVyX2Jhcl9zZXRfdGl0bGUoR1RLX0hFQURFUl9CQVIod2luZG93LT5oZWFkZXJCYXIpLCBfKCJX
ZWIgSW5zcGVjdG9yIikpOwotICAgIGd0a19oZWFkZXJfYmFyX3NldF9zaG93X2Nsb3NlX2J1dHRv
bihHVEtfSEVBREVSX0JBUih3aW5kb3ctPmhlYWRlckJhciksIFRSVUUpOwotICAgIGd0a193aW5k
b3dfc2V0X3RpdGxlYmFyKEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT5oZWFkZXJCYXIpOwot
ICAgIGd0a193aWRnZXRfc2hvdyh3aW5kb3ctPmhlYWRlckJhcik7Ci19Ci0KLUd0a1dpZGdldCog
d2Via2l0SW5zcGVjdG9yV2luZG93TmV3KEd0a1dpbmRvdyogcGFyZW50KQotewotICAgIHJldHVy
biBHVEtfV0lER0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCAi
dHlwZSIsIEdUS19XSU5ET1dfVE9QTEVWRUwsICJ0cmFuc2llbnQtZm9yIiwgcGFyZW50LAotICAg
ICAgICAiZGVmYXVsdC13aWR0aCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93V2lk
dGgsICJkZWZhdWx0LWhlaWdodCIsIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVp
Z2h0LCBudWxscHRyKSk7Ci19Ci0KLXZvaWQgd2Via2l0SW5zcGVjdG9yV2luZG93U2V0U3VidGl0
bGUoV2ViS2l0SW5zcGVjdG9yV2luZG93KiB3aW5kb3csIGNvbnN0IGNoYXIqIHN1YnRpdGxlKQot
ewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0lOU1BFQ1RPUl9XSU5ET1cod2luZG93
KSk7Ci0KLSAgICBndGtfaGVhZGVyX2Jhcl9zZXRfc3VidGl0bGUoR1RLX0hFQURFUl9CQVIod2lu
ZG93LT5oZWFkZXJCYXIpLCBzdWJ0aXRsZSk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvV2ViS2l0SW5zcGVjdG9yV2luZG93LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGViZGMyOGQxMDlmMDc5ZmEyNGEyNzgwOWIyYmNmZjM5ZmJhZmNmZGYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYktpdEluc3BlY3RvcldpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLUdfQkVHSU5fREVDTFMK
LQotI2RlZmluZSBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XICAgICAgICAgICAgKHdlYmtp
dF9pbnNwZWN0b3Jfd2luZG93X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9JTlNQRUNUT1Jf
V0lORE9XKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIFdlYktpdEluc3BlY3RvcldpbmRvdykpCi0j
ZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1JfV0lORE9XKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQot
I2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJTkRPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBX
ZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19JTlNQRUNUT1Jf
V0lORE9XX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX0lOU1BFQ1RPUl9XSU5ET1cpKQotI2RlZmluZSBXRUJLSVRfSU5TUEVDVE9SX1dJ
TkRPV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBXZWJLaXRJbnNwZWN0b3JXaW5kb3dDbGFzcykp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRJbnNwZWN0b3JXaW5kb3cgV2ViS2l0SW5zcGVjdG9y
V2luZG93OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEluc3BlY3RvcldpbmRvd0NsYXNzIFdlYktp
dEluc3BlY3RvcldpbmRvd0NsYXNzOwotCi1HVHlwZSB3ZWJraXRfaW5zcGVjdG9yX3dpbmRvd19n
ZXRfdHlwZSh2b2lkKTsKLQotR3RrV2lkZ2V0KiB3ZWJraXRJbnNwZWN0b3JXaW5kb3dOZXcoR3Rr
V2luZG93KiBwYXJlbnQpOwotdm9pZCB3ZWJraXRJbnNwZWN0b3JXaW5kb3dTZXRTdWJ0aXRsZShX
ZWJLaXRJbnNwZWN0b3JXaW5kb3cqLCBjb25zdCBjaGFyKiBzdWJ0aXRsZSk7Ci0KLUdfRU5EX0RF
Q0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjZmJhNjk1ZTZiYWY0MGRjZWY5OTcyODUxYWQzNmM5YmRhOTliODNh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotCi0jaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNvZ25pemVyLmg+
Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIgOiBV
SUdlc3R1cmVSZWNvZ25pemVyCi0tIChDR1BvaW50KWxvY2F0aW9uSW5WaWV3OihVSVZpZXcgKil2
aWV3OwotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXpl
ci5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY3ZmU3YmNjZGI2YzgyZjQzZGVi
ODU0NzBiOGY4YmQxYmRhYzZjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tJbnNwZWN0b3JOb2RlU2Vh
cmNoR2VzdHVyZVJlY29nbml6ZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0luc3BlY3Rvck5vZGVT
ZWFyY2hHZXN0dXJlUmVjb2duaXplci5oIgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQot
I2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplclN1YmNsYXNzLmg+Ci0jaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3Rvck5vZGVTZWFyY2hH
ZXN0dXJlUmVjb2duaXplciB7Ci0gICAgUmV0YWluUHRyPFVJVG91Y2g+IF90b3VjaDsKLX0KLQot
LSAoQ0dQb2ludClsb2NhdGlvbkluVmlldzooVUlWaWV3ICopdmlldwotewotICAgIHJldHVybiBb
X3RvdWNoIGxvY2F0aW9uSW5WaWV3OnZpZXddOwotfQotCi0tICh2b2lkKV9wcm9jZXNzVG91Y2hl
czooTlNTZXQgKil0b3VjaGVzIHN0YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpbmV3U3Rh
dGUKLXsKLSAgICBBU1NFUlQoX3RvdWNoKTsKLSAgICBpZiAoW3RvdWNoZXMgY29udGFpbnNPYmpl
Y3Q6X3RvdWNoLmdldCgpXSkKLSAgICAgICAgc2VsZi5zdGF0ZSA9IG5ld1N0YXRlOwotfQotCi0t
ICh2b2lkKXRvdWNoZXNCZWdhbjooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAq
KWV2ZW50Ci17Ci0gICAgaWYgKHNlbGYuc3RhdGUgIT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
UG9zc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghX3RvdWNoKTsKLSAgICBf
dG91Y2ggPSBbdG91Y2hlcyBhbnlPYmplY3RdOwotCi0gICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVz
OnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW5dOwotfQotCi0tICh2
b2lkKXRvdWNoZXNNb3ZlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVudDooVUlFdmVudCAqKWV2
ZW50Ci17Ci0gICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMgc3RhdGU6VUlHZXN0dXJl
UmVjb2duaXplclN0YXRlQ2hhbmdlZF07Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc0VuZGVkOihOU1Nl
dCAqKXRvdWNoZXMgd2l0aEV2ZW50OihVSUV2ZW50ICopZXZlbnQKLXsKLSAgICBbc2VsZiBfcHJv
Y2Vzc1RvdWNoZXM6dG91Y2hlcyBzdGF0ZTpVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZF07
Ci19Ci0KLS0gKHZvaWQpdG91Y2hlc0NhbmNlbGxlZDooTlNTZXQgKil0b3VjaGVzIHdpdGhFdmVu
dDooVUlFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3NlbGYgX3Byb2Nlc3NUb3VjaGVzOnRvdWNoZXMg
c3RhdGU6VUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkXTsKLX0KLQotLSAodm9pZCly
ZXNldAotewotICAgIF90b3VjaCA9IG5pbDsKLX0KLQotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94
eU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiZGViNWY2ZDA2NGNlOTRm
YTdhMmE1MzEzMThjNGY4YWY3ZjcwNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHlNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eS5oIgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
LQotI2ltcG9ydCAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2ltcG9ydCAi
UmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgotI2ltcG9ydCAiV0tGcmFtZUluZm8uaCIK
LSNpbXBvcnQgIldLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLTmF2aWdh
dGlvbkFjdGlvbi5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaCIKLSNpbXBvcnQg
IldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2lt
cG9ydCAiV2ViUGFnZUdyb3VwLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQg
PFNlY3VyaXR5SW50ZXJmYWNlL1NGQ2VydGlmaWNhdGVQYW5lbC5oPgotI2ltcG9ydCA8U2VjdXJp
dHlJbnRlcmZhY2UvU0ZDZXJ0aWZpY2F0ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2VydGlm
aWNhdGVJbmZvLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotQGludGVyZmFjZSBX
S1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgOiBOU09iamVjdCA8TlNXaW5kb3dE
ZWxlZ2F0ZSwgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlckRlbGVnYXRlPiB7Ci0gICAgV2ViS2l0
OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSogX2luc3BlY3RvclByb3h5OwotfQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6KFdlYktpdDo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkqKWluc3BlY3RvclByb3h5OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyCi0KLS0gKE5TUmVjdCl3aW5kb3c6
KE5TV2luZG93ICopd2luZG93IHdpbGxQb3NpdGlvblNoZWV0OihOU1dpbmRvdyAqKXNoZWV0IHVz
aW5nUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAg
ICByZXR1cm4gTlNNYWtlUmVjdCgwLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLmhlaWdo
dCgpLCBfaW5zcGVjdG9yUHJveHktPnNoZWV0UmVjdCgpLndpZHRoKCksIDApOwotICAgIHJldHVy
biByZWN0OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhSZW1vdGVXZWJJbnNwZWN0b3JQ
cm94eTooV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIF9pbnNwZWN0b3JQcm94eSA9IGluc3BlY3RvclByb3h5OwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpaW5zcGVjdG9yVmlld0NvbnRyb2xsZXJJbnNwZWN0b3JEaWRDcmFzaDoo
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0g
ICAgX2luc3BlY3RvclByb3h5LT5jbG9zZUZyb21DcmFzaCgpOwotfQotCi0tIChCT09MKWluc3Bl
Y3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0Nv
bnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcgotewotICAgIHJldHVybiBfaW5zcGVj
dG9yUHJveHktPmlzVW5kZXJUZXN0KCk7Ci19Ci0KLUBlbmQKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotV0tXZWJWaWV3ICpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6d2ViVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5zcGVjdG9yVmlldy5n
ZXQoKS53ZWJWaWV3OwotfQotCi1XZWJQYWdlUHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCi17Ci0gICAgbV9vYmpDQWRh
cHRlciA9IGFkb3B0TlMoW1tXS1JlbW90ZVdlYkluc3BlY3RvclByb3h5T2JqQ0FkYXB0ZXIgYWxs
b2NdIGluaXRXaXRoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOwotCi0gICAgbV9pbnNw
ZWN0b3JWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgYWxsb2NdIGlu
aXRXaXRoSW5zcGVjdGVkUGFnZTpudWxscHRyXSk7Ci0gICAgW21faW5zcGVjdG9yVmlldy5nZXQo
KSBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVyLmdldCgpXTsKLQotICAgIG1fd2luZG93ID0gV2Vi
SW5zcGVjdG9yUHJveHk6OmNyZWF0ZUZyb250ZW5kV2luZG93KE5TWmVyb1JlY3QsIFdlYkluc3Bl
Y3RvclByb3h5OjpJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6UmVtb3RlKTsKLSAgICBbbV93aW5kb3cg
c2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0gICAgW21fd2luZG93IHNldEZyYW1l
QXV0b3NhdmVOYW1lOkAiV0tSZW1vdGVXZWJJbnNwZWN0b3JXaW5kb3dGcmFtZSJdOwotCi0gICAg
TlNWaWV3ICpjb250ZW50VmlldyA9IG1fd2luZG93LmdldCgpLmNvbnRlbnRWaWV3OwotICAgIFt3
ZWJWaWV3KCkgc2V0RnJhbWU6Y29udGVudFZpZXcuYm91bmRzXTsKLSAgICBbY29udGVudFZpZXcg
YWRkU3Vidmlldzp3ZWJWaWV3KCldOwotCi0gICAgcmV0dXJuIHdlYlZpZXcoKS0+X3BhZ2UuZ2V0
KCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VGcm9u
dGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICBbbV93
aW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21fd2luZG93IGNsb3NlXTsKLSAgICAg
ICAgbV93aW5kb3cgPSBuaWw7Ci0gICAgfQotCi0gICAgaWYgKG1faW5zcGVjdG9yVmlldykgewot
ICAgICAgICBbbV9pbnNwZWN0b3JWaWV3LmdldCgpIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAg
IG1faW5zcGVjdG9yVmlldyA9IG5pbDsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmpDQWRhcHRlcikK
LSAgICAgICAgbV9vYmpDQWRhcHRlciA9IG5pbDsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkKLXsKLSAgICBbTlNXaW5kb3cgcmVtb3ZlRnJh
bWVVc2luZ05hbWU6W21fd2luZG93IGZyYW1lQXV0b3NhdmVOYW1lXV07Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKLXsKLSAgICBbbV93
aW5kb3cgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLSAgICBbbV93aW5kb3cgbWFrZUZpcnN0
UmVzcG9uZGVyOndlYlZpZXcoKV07Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAg
IC8vIEZJWE1FOiBTaGFyZSB3aXRoIFdlYkluc3BlY3RvclByb3h5TWFjLgotCi0gICAgQVNTRVJU
KCFzdWdnZXN0ZWRVUkwuaXNFbXB0eSgpKTsKLSAgICAKLSAgICBOU1VSTCAqcGxhdGZvcm1VUkwg
PSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpLmdldCgpOwotICAg
IGlmICghcGxhdGZvcm1VUkwpIHsKLSAgICAgICAgcGxhdGZvcm1VUkwgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpzdWdnZXN0ZWRVUkxdOwotICAgICAgICAvLyBUaGUgdXNlciBtdXN0IGNvbmZpcm0g
bmV3IGZpbGVuYW1lcyBiZWZvcmUgd2UgY2FuIHNhdmUgdG8gdGhlbS4KLSAgICAgICAgZm9yY2VT
YXZlRGlhbG9nID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKHBsYXRmb3JtVVJMKTsK
LSAgICBpZiAoIXBsYXRmb3JtVVJMKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOZWNlc3Nh
cnkgZm9yIHRoZSBibG9jayBiZWxvdy4KLSAgICBTdHJpbmcgc3VnZ2VzdGVkVVJMQ29weSA9IHN1
Z2dlc3RlZFVSTDsKLSAgICBTdHJpbmcgY29udGVudENvcHkgPSBjb250ZW50OwotCi0gICAgYXV0
byBzYXZlVG9VUkwgPSBeKE5TVVJMICphY3R1YWxVUkwpIHsKLSAgICAgICAgQVNTRVJUKGFjdHVh
bFVSTCk7Ci0KLSAgICAgICAgbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5zZXQoc3VnZ2VzdGVk
VVJMQ29weSwgYWN0dWFsVVJMKTsKLQotICAgICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewotICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KGNvbnRlbnRDb3B5LCBvdXQsIEJhc2U2NFZhbGlkYXRlUGFkZGluZykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YUNvbnRlbnQgPSBh
ZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOm91dC5kYXRhKCkgbGVuZ3RoOm91
dC5zaXplKCldKTsKLSAgICAgICAgICAgIFtkYXRhQ29udGVudCB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFU107Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW2NvbnRlbnRD
b3B5IHdyaXRlVG9VUkw6YWN0dWFsVVJMIGF0b21pY2FsbHk6WUVTIGVuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nIGVycm9yOk5VTExdOwotCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpEaWRTYXZlKFthY3R1
YWxVUkwgYWJzb2x1dGVTdHJpbmddKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7Ci0g
ICAgfTsKLQotICAgIGlmICghZm9yY2VTYXZlRGlhbG9nKSB7Ci0gICAgICAgIHNhdmVUb1VSTChw
bGF0Zm9ybVVSTCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1NhdmVQYW5lbCAq
cGFuZWwgPSBbTlNTYXZlUGFuZWwgc2F2ZVBhbmVsXTsKLSAgICBwYW5lbC5uYW1lRmllbGRTdHJp
bmdWYWx1ZSA9IHBsYXRmb3JtVVJMLmxhc3RQYXRoQ29tcG9uZW50OwotCi0gICAgLy8gSWYgd2Ug
aGF2ZSBhIGZpbGUgVVJMIHdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhpcyBmaWxlIHRvIGEgcGF0aCBh
bmQKLSAgICAvLyBjYW4gcHJvdmlkZSBhIGdvb2QgZGlyZWN0b3J5IHRvIHNob3cuIE90aGVyd2lz
ZSwgdXNlIHRoZSBzeXN0ZW0ncwotICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBpbml0
aWFsIGRpcmVjdG9yeSB0byBzaG93IGluIHRoZSBkaWFsb2cuCi0gICAgaWYgKHBsYXRmb3JtVVJM
LmlzRmlsZVVSTCkKLSAgICAgICAgcGFuZWwuZGlyZWN0b3J5VVJMID0gW3BsYXRmb3JtVVJMIFVS
TEJ5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07Ci0KLSAgICBhdXRvIGNvbXBsZXRpb25IYW5k
bGVyID0gXihOU0ludGVnZXIgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlNNb2Rh
bFJlc3BvbnNlQ2FuY2VsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQocmVz
dWx0ID09IE5TTW9kYWxSZXNwb25zZU9LKTsKLSAgICAgICAgc2F2ZVRvVVJMKHBhbmVsLlVSTCk7
Ci0gICAgfTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3dpbmRvdyA/IG1fd2luZG93Lmdl
dCgpIDogW05TQXBwIGtleVdpbmRvd107Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgW3BhbmVs
IGJlZ2luU2hlZXRNb2RhbEZvcldpbmRvdzp3aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxl
dGlvbkhhbmRsZXJdOwotICAgIGVsc2UKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3BhbmVs
IHJ1bk1vZGFsXSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQp
Ci17Ci0gICAgLy8gRklYTUU6IFNoYXJlIHdpdGggV2ViSW5zcGVjdG9yUHJveHlNYWMuCi0KLSAg
ICBBU1NFUlQoIXN1Z2dlc3RlZFVSTC5pc0VtcHR5KCkpOwotICAgIAotICAgIFJldGFpblB0cjxO
U1VSTD4gYWN0dWFsVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVSTE1hcC5nZXQoc3VnZ2VzdGVk
VVJMKTsKLSAgICAvLyBEbyBub3QgYXBwZW5kIHVubGVzcyB0aGUgdXNlciBoYXMgYWxyZWFkeSBj
b25maXJtZWQgdGhpcyBmaWxlbmFtZSBpbiBzYXZlKCkuCi0gICAgaWYgKCFhY3R1YWxVUkwpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE5TRmlsZUhhbmRsZSAqaGFuZGxlID0gW05TRmlsZUhhbmRs
ZSBmaWxlSGFuZGxlRm9yV3JpdGluZ1RvVVJMOmFjdHVhbFVSTC5nZXQoKSBlcnJvcjpOVUxMXTsK
LSAgICBbaGFuZGxlIHNlZWtUb0VuZE9mRmlsZV07Ci0gICAgW2hhbmRsZSB3cml0ZURhdGE6W2Nv
bnRlbnQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbaGFu
ZGxlIGNsb3NlRmlsZV07Ci0KLSAgICBXZWJQYWdlUHJveHkqIGluc3BlY3RvclBhZ2UgPSB3ZWJW
aWV3KCktPl9wYWdlLmdldCgpOwotICAgIGluc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6RGlkQXBwZW5kKFthY3R1YWxVUkwgYWJzb2x1
dGVTdHJpbmddKSwgaW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotfQotCi12b2lkIFJlbW90
ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgbV9zaGVldFJlY3QgPSByZWN0OwotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybVN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgd2ViVmlldygp
LT5fcGFnZS0+c3RhcnRXaW5kb3dEcmFnKCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtT3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIFtb
TlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBvcGVuVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OnVybF1dOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNob3dD
ZXJ0aWZpY2F0ZShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykKLXsKLSAg
ICBBU1NFUlQoIWNlcnRpZmljYXRlSW5mby5pc0VtcHR5KCkpOwotCi0gICAgUmV0YWluUHRyPFNG
Q2VydGlmaWNhdGVQYW5lbD4gY2VydGlmaWNhdGVQYW5lbCA9IGFkb3B0TlMoW1tTRkNlcnRpZmlj
YXRlUGFuZWwgYWxsb2NdIGluaXRdKTsKLQotICAgIEFTU0VSVChtX3dpbmRvdyk7Ci0jaWYgSEFW
RShTRUNfVFJVU1RfU0VSSUFMSVpBVElPTikKLSAgICBbY2VydGlmaWNhdGVQYW5lbCBiZWdpblNo
ZWV0Rm9yV2luZG93Om1fd2luZG93LmdldCgpIG1vZGFsRGVsZWdhdGU6bmlsIGRpZEVuZFNlbGVj
dG9yOk5VTEwgY29udGV4dEluZm86bnVsbHB0ciB0cnVzdDpjZXJ0aWZpY2F0ZUluZm8udHJ1c3Qo
KSBzaG93R3JvdXA6WUVTXTsKLSNlbHNlCi0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVl
dEZvcldpbmRvdzptX3dpbmRvdy5nZXQoKSBtb2RhbERlbGVnYXRlOm5pbCBkaWRFbmRTZWxlY3Rv
cjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihOU0FycmF5ICopY2VydGlm
aWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVTXTsKLSNlbmRpZgotCi0g
ICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3QgcGFuZWwgaGFzIGJlZW4g
ZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9lc24ndCBleGlzdCBiZWZv
cmVoYW5kLgotICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0ZVZpZXcgPSBbY2VydGlm
aWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwotICAgIFtjZXJ0aWZpY2F0ZVZpZXcgc2V0RGlz
cGxheVRydXN0OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRFZGl0YWJsZVRydXN0Ok5P
XTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxzOllFU107Ci0gICAgW2Nl
cnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwOGJkMDhmZjlkNDg3YzQwYjVlZGQxYjcxZTc4YzM5Mzc5YWEyZjQzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbXBvcnQgPFdlYktp
dC9XS0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPHd0Zi9OYWtlZFB0ci5oPgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotCi1PQkpDX0NMQVNTIFdLV2ViVmlldzsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1j
bGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLUBwcm90b2NvbCBXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyRGVsZWdhdGU7Ci0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi0KLUBpbnRlcmZhY2UgV0tJ
bnNwZWN0b3JWaWV3Q29udHJvbGxlciA6IE5TT2JqZWN0Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgV0tXZWJWaWV3ICp3ZWJWaWV3OwotQHByb3BlcnR5IChub25hdG9taWMsIHdl
YWspIGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRlOwotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnNwZWN0ZWRQYWdlOihOYWtlZFB0cjxXZWJLaXQ6Oldl
YlBhZ2VQcm94eT4paW5zcGVjdGVkUGFnZTsKLQotKyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJW
aWV3OihOU1ZpZXcgKil2aWV3OwotCi1AZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0PgotQG9wdGlvbmFsCi0tICh2b2lkKWluc3BlY3Rv
clZpZXdDb250cm9sbGVySW5zcGVjdG9yRGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgKilpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjsKLS0gKEJPT0wpaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJJbnNwZWN0b3JJc1VuZGVyVGVzdDooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWlu
c3BlY3RvclZpZXdDb250cm9sbGVyOwotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjoo
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyIHdpbGxN
b3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93OwotLSAodm9pZClpbnNwZWN0b3JWaWV3
Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWlu
c3BlY3RvclZpZXdDb250cm9sbGVyOwotQGVuZAotCi1OU19BU1NVTUVfTk9OTlVMTF9FTkQKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0luc3BlY3RvclZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ5MjYzZTBmZDZlNmFmYTZiYTdiNWExOTg1OTg5NTQ0ZjdhYTcwZTguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KKysrIC9kZXYvbnVs
bApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIgotCi0jaWYgUExBVEZPUk0oTUFDKQot
Ci0jaW1wb3J0ICJBUElOYXZpZ2F0aW9uLmgiCi0jaW1wb3J0ICJWZXJzaW9uQ2hlY2tzLmgiCi0j
aW1wb3J0ICJXS0ZyYW1lSW5mby5oIgotI2ltcG9ydCAiV0tJbnNwZWN0b3JXS1dlYlZpZXcuaCIK
LSNpbXBvcnQgIldLTmF2aWdhdGlvbkFjdGlvbi5oIgotI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGVs
ZWdhdGUuaCIKLSNpbXBvcnQgIldLT3BlblBhbmVsUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiV0tQ
cmVmZXJlbmNlc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5oIgot
I2ltcG9ydCAiV0tVSURlbGVnYXRlUHJpdmF0ZS5oIgotI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLSNpbXBvcnQg
IldlYkluc3BlY3RvclByb3h5LmgiCi0jaW1wb3J0ICJXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+Ci0K
LUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAoKSA8V0tVSURlbGVnYXRlLCBX
S05hdmlnYXRpb25EZWxlZ2F0ZSwgV0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgewotICAgIE5ha2Vk
UHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBfaW5zcGVjdGVkUGFnZTsKLSAgICBSZXRhaW5QdHI8
V0tJbnNwZWN0b3JXS1dlYlZpZXc+IF93ZWJWaWV3OwotICAgIFdlYWtPYmpDUHRyPGlkIDxXS0lu
c3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+PiBfZGVsZWdhdGU7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEluc3BlY3RlZFBhZ2U6KE5ha2VkUHRyPFdlYktpdDo6V2ViUGFnZVBy
b3h5PilpbnNwZWN0ZWRQYWdlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBUaGUgKGxvY2FsKSBpbnNwZWN0ZWQgcGFnZSBp
cyBuaWwgaWYgdGhlIGNvbnRyb2xsZXIgaXMgaG9zdGluZyBhIFJlbW90ZSBXZWIgSW5zcGVjdG9y
IHZpZXcuCi0gICAgX2luc3BlY3RlZFBhZ2UgPSBpbnNwZWN0ZWRQYWdlOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGlmIChfd2ViVmlldykgewotICAg
ICAgICBbX3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbX3dlYlZpZXcgc2V0
TmF2aWdhdGlvbkRlbGVnYXRlOm5pbF07Ci0gICAgICAgIFtfd2ViVmlldyBzZXRJbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZTpuaWxdOwotICAgICAgICBfd2ViVmlldyA9IG5pbDsKLSAgICB9Ci0K
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKGlkIDxXS0luc3BlY3RvclZpZXdDb250cm9s
bGVyRGVsZWdhdGU+KWRlbGVnYXRlCi17Ci0gICAgcmV0dXJuIF9kZWxlZ2F0ZS5nZXRBdXRvcmVs
ZWFzZWQoKTsKLX0KLQotLSAoV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIC8vIENvbnN0cnVj
dCBsYXppbHkgc28gdGhlIGNsaWVudCBjYW4gc2V0IHRoZSBkZWxlZ2F0ZSBiZWZvcmUgdGhlIFdl
YlZpZXcgaXMgY3JlYXRlZC4KLSAgICBpZiAoIV93ZWJWaWV3KSB7Ci0gICAgICAgIE5TUmVjdCBp
bml0aWFsRnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6
OmluaXRpYWxXaW5kb3dXaWR0aCwgV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdp
bmRvd0hlaWdodCk7Ci0gICAgICAgIF93ZWJWaWV3ID0gYWRvcHROUyhbW1dLSW5zcGVjdG9yV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmluaXRpYWxGcmFtZSBjb25maWd1cmF0aW9uOltz
ZWxmIGNvbmZpZ3VyYXRpb25dXSk7Ci0gICAgICAgIFtfd2ViVmlldyBzZXRVSURlbGVnYXRlOnNl
bGZdOwotICAgICAgICBbX3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOnNlbGZdOwotICAg
ICAgICBbX3dlYlZpZXcgc2V0SW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU6c2VsZl07Ci0gICAg
ICAgIFtfd2ViVmlldyBfc2V0QXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzOk5PXTsK
LSAgICAgICAgW193ZWJWaWV3IF9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOllFU107Ci0gICAgICAg
IFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmll
d0hlaWdodFNpemFibGVdOwotICAgIH0KLQotICAgIHJldHVybiBfd2ViVmlldy5nZXQoKTsKLX0K
LQotLSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZT4pZGVsZWdhdGUKLXsKLSAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotLSAoV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24KLXsKLSAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwot
Ci0gICAgV0tQcmVmZXJlbmNlcyAqcHJlZmVyZW5jZXMgPSBjb25maWd1cmF0aW9uLmdldCgpLnBy
ZWZlcmVuY2VzOwotICAgIHByZWZlcmVuY2VzLl9hbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMg
PSBZRVM7Ci0gICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzOllFU107Ci0gICAgcHJlZmVyZW5jZXMuX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9IF9X
S1N0b3JhZ2VCbG9ja2luZ1BvbGljeUFsbG93QWxsOwotICAgIHByZWZlcmVuY2VzLl9qYXZhU2Ny
aXB0UnVudGltZUZsYWdzID0gMDsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBBbGxvdyBkZXZl
bG9wZXJzIHRvIGluc3BlY3QgdGhlIFdlYiBJbnNwZWN0b3IgaW4gZGVidWcgYnVpbGRzIHdpdGhv
dXQgY2hhbmdpbmcgc2V0dGluZ3MuCi0gICAgcHJlZmVyZW5jZXMuX2RldmVsb3BlckV4dHJhc0Vu
YWJsZWQgPSBZRVM7Ci0gICAgcHJlZmVyZW5jZXMuX2xvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNv
bnNvbGVFbmFibGVkID0gWUVTOwotI2VuZGlmCi0KLSAgICBwcmVmZXJlbmNlcy5fZGlhZ25vc3Rp
Y0xvZ2dpbmdFbmFibGVkID0gWUVTOwotCi0gICAgaWYgKCEhX2RlbGVnYXRlICYmIFtfZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0b3JWaWV3Q29udHJvbGxlcklu
c3BlY3RvcklzVW5kZXJUZXN0OildKSB7Ci0gICAgICAgIGlmIChbX2RlbGVnYXRlIGluc3BlY3Rv
clZpZXdDb250cm9sbGVySW5zcGVjdG9ySXNVbmRlclRlc3Q6c2VsZl0pIHsKLSAgICAgICAgICAg
IHByZWZlcmVuY2VzLl9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9IE5POwot
ICAgICAgICAgICAgcHJlZmVyZW5jZXMuX3BhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJl
c3Npb25FbmFibGVkID0gTk87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBbY29uZmlndXJhdGlv
biBzZXRQcm9jZXNzUG9vbDp3cmFwcGVyKFdlYktpdDo6aW5zcGVjdG9yUHJvY2Vzc1Bvb2woV2Vi
S2l0OjppbnNwZWN0b3JMZXZlbEZvclBhZ2UoX2luc3BlY3RlZFBhZ2UpKSldOwotICAgIFtjb25m
aWd1cmF0aW9uIF9zZXRHcm91cElkZW50aWZpZXI6V2ViS2l0OjppbnNwZWN0b3JQYWdlR3JvdXBJ
ZGVudGlmaWVyRm9yUGFnZShfaW5zcGVjdGVkUGFnZSldOwotCi0gICAgcmV0dXJuIGNvbmZpZ3Vy
YXRpb24uYXV0b3JlbGVhc2UoKTsKLX0KLQotKyAoQk9PTCl2aWV3SXNJbnNwZWN0b3JXZWJWaWV3
OihOU1ZpZXcgKil2aWV3Ci17Ci0gICAgcmV0dXJuIFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dLSW5z
cGVjdG9yV0tXZWJWaWV3IGNsYXNzXV07Ci19Ci0KLS8vIE1BUks6IFdLVUlEZWxlZ2F0ZSBtZXRo
b2RzCi0KLS0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZ2V0V2luZG93RnJh
bWVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKENHUmVjdCkpY29tcGxldGlvbkhhbmRs
ZXIKLXsKLSAgICBpZiAoIV93ZWJWaWV3LmdldCgpLndpbmRvdykKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ0dSZWN0WmVybyk7Ci0gICAgZWxzZQotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihOU1JlY3RUb0NHUmVjdChbd2ViVmlldyBmcmFtZV0pKTsKLX0KLQotLSAodm9pZClfd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBzZXRXaW5kb3dGcmFtZTooQ0dSZWN0KWZyYW1lCi17Ci0g
ICAgaWYgKCFfd2ViVmlldy5nZXQoKS53aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtf
d2ViVmlldy5nZXQoKS53aW5kb3cgc2V0RnJhbWU6TlNSZWN0RnJvbUNHUmVjdChmcmFtZSkgZGlz
cGxheTpZRVNdOwotfQotCi0tICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVu
T3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6KFdLT3BlblBhbmVsUGFyYW1ldGVycyAqKXBhcmFtZXRl
cnMgaW5pdGlhdGVkQnlGcmFtZTooV0tGcmFtZUluZm8gKilmcmFtZSBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNBcnJheTxOU1VSTCAqPiAqVVJMcykpY29tcGxldGlvbkhhbmRsZXIKLXsK
LSAgICBOU09wZW5QYW5lbCAqb3BlblBhbmVsID0gW05TT3BlblBhbmVsIG9wZW5QYW5lbF07Ci0g
ICAgb3BlblBhbmVsLmFsbG93c011bHRpcGxlU2VsZWN0aW9uID0gcGFyYW1ldGVycy5hbGxvd3NN
dWx0aXBsZVNlbGVjdGlvbjsKLQotICAgIGF1dG8gcmVwb3J0U2VsZWN0ZWRGaWxlcyA9IF4oTlNJ
bnRlZ2VyIHJlc3VsdCkgewotICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZU9L
KQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIob3BlblBhbmVsLlVSTHMpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwotICAgIH07Ci0KLSAg
ICBpZiAoX3dlYlZpZXcuZ2V0KCkud2luZG93KQotICAgICAgICBbb3BlblBhbmVsIGJlZ2luU2hl
ZXRNb2RhbEZvcldpbmRvdzpfd2ViVmlldy5nZXQoKS53aW5kb3cgY29tcGxldGlvbkhhbmRsZXI6
cmVwb3J0U2VsZWN0ZWRGaWxlc107Ci0gICAgZWxzZQotICAgICAgICByZXBvcnRTZWxlY3RlZEZp
bGVzKFtvcGVuUGFuZWwgcnVuTW9kYWxdKTsKLX0KLQotLSAodm9pZClfd2ViVmlldzooV0tXZWJW
aWV3ICopd2ViVmlldyBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46KFdLU2Vj
dXJpdHlPcmlnaW4gKilzZWN1cml0eU9yaWdpbiBjdXJyZW50UXVvdGE6KHVuc2lnbmVkIGxvbmcg
bG9uZyljdXJyZW50UXVvdGEgY3VycmVudE9yaWdpblVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcp
Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOih1bnNpZ25lZCBsb25nIGxv
bmcpY3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3Rl
ZFVzYWdlIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikodW5zaWduZWQgbG9uZyBsb25nIG5ld1F1
b3RhKSlkZWNpc2lvbkhhbmRsZXIKLXsKLSAgICBkZWNpc2lvbkhhbmRsZXIoc3RkOjptYXg8dW5z
aWduZWQgbG9uZyBsb25nPihleHBlY3RlZFVzYWdlLCBjdXJyZW50VXNhZ2UgKiAxLjI1KSk7Ci19
Ci0KLS0gKE5TTWVudSAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGNvbnRleHRNZW51
OihOU01lbnUgKiltZW51IGZvckVsZW1lbnQ6KF9XS0NvbnRleHRNZW51RWxlbWVudEluZm8gKill
bGVtZW50Ci17Ci0gICAgZm9yIChOU0ludGVnZXIgaSA9IG1lbnUubnVtYmVyT2ZJdGVtcyAtIDE7
IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKml0ZW0gPSBbbWVudSBpdGVtQXRJ
bmRleDppXTsKLSAgICAgICAgc3dpdGNoIChpdGVtLnRhZykgewotICAgICAgICBjYXNlIGtXS0Nv
bnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29u
dGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2Uga1dLQ29u
dGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVXJsVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2Uga1dL
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBjYXNlIGtXS0Nv
bnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6Ci0gICAgICAgICAgICBbbWVudSBy
ZW1vdmVJdGVtQXRJbmRleDppXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1lbnU7Ci19Ci0KLS8vIE1BUks6IFdLTmF2aWdhdGlvbkRlbGVnYXRl
IG1ldGhvZHMKLQotLSAodm9pZCl3ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGU6
KFdLV2ViVmlldyAqKXdlYlZpZXcKLXsKLSAgICBpZiAoISFfZGVsZWdhdGUgJiYgW19kZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RvclZpZXdDb250cm9sbGVySW5z
cGVjdG9yRGlkQ3Jhc2g6KV0pCi0gICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJJbnNwZWN0b3JEaWRDcmFzaDpzZWxmXTsKLX0KLQotLSAodm9pZCl3ZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdh
dGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShX
S05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKWRlY2lzaW9uSGFuZGxlcgotewotICAgIC8vIEFsbG93
IG5vbi1tYWluIGZyYW1lcyB0byBuYXZpZ2F0ZSBhbnl3aGVyZS4KLSAgICBpZiAoIW5hdmlnYXRp
b25BY3Rpb24udGFyZ2V0RnJhbWUuaXNNYWluRnJhbWUpIHsKLSAgICAgICAgZGVjaXNpb25IYW5k
bGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEFsbG93IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCi0g
ICAgaWYgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmlzTWFpbk9yVGVzdEluc3BlY3RvclBh
Z2UobmF2aWdhdGlvbkFjdGlvbi5yZXF1ZXN0LlVSTCkpIHsKLSAgICAgICAgZGVjaXNpb25IYW5k
bGVyKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFByZXZlbnQgZXZlcnl0aGluZyBlbHNlLgotICAgIGRlY2lzaW9uSGFuZGxl
cihXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lDYW5jZWwpOwotICAgIAotICAgIC8vIEFuZCBpbnN0
ZWFkIGxvYWQgaXQgaW4gdGhlIGluc3BlY3RlZCBwYWdlLgotICAgIGlmIChfaW5zcGVjdGVkUGFn
ZSkKLSAgICAgICAgX2luc3BlY3RlZFBhZ2UtPmxvYWRSZXF1ZXN0KG5hdmlnYXRpb25BY3Rpb24u
cmVxdWVzdCk7Ci19Ci0KLS8vIE1BUks6IFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGUgbWV0
aG9kcwotCi0tICh2b2lkKWluc3BlY3RvcldLV2ViVmlld1JlbG9hZDooV0tJbnNwZWN0b3JXS1dl
YlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCFfaW5zcGVjdGVkUGFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgT3B0aW9uU2V0PFdlYkNvcmU6OlJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0aW9u
czsKLSAgICBpZiAoV2ViS2l0OjpsaW5rZWRPbk9yQWZ0ZXIoV2ViS2l0OjpTREtWZXJzaW9uOjpG
aXJzdFdpdGhFeHBpcmVkT25seVJlbG9hZEJlaGF2aW9yKSkKLSAgICAgICAgcmVsb2FkT3B0aW9u
cy5hZGQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSk7Ci0KLSAgICBfaW5zcGVj
dGVkUGFnZS0+cmVsb2FkKHJlbG9hZE9wdGlvbnMpOwotfQotCi0tICh2b2lkKWluc3BlY3RvcldL
V2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldwot
ewotICAgIGlmICghX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9pbnNw
ZWN0ZWRQYWdlLT5yZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpGcm9tT3JpZ2luKTsKLX0K
LQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXc6KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2Vi
VmlldyB3aWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKW5ld1dpbmRvdwotewotICAgIGlmICgh
IV9kZWxlZ2F0ZSAmJiBbX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5z
cGVjdG9yVmlld0NvbnRyb2xsZXI6d2lsbE1vdmVUb1dpbmRvdzopXSkKLSAgICAgICAgW19kZWxl
Z2F0ZSBpbnNwZWN0b3JWaWV3Q29udHJvbGxlcjpzZWxmIHdpbGxNb3ZlVG9XaW5kb3c6bmV3V2lu
ZG93XTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6KFdL
SW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlmICghIV9kZWxlZ2F0ZSAmJiBb
X2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW5zcGVjdG9yVmlld0NvbnRy
b2xsZXJEaWRNb3ZlVG9XaW5kb3c6KV0pCi0gICAgICAgIFtfZGVsZWdhdGUgaW5zcGVjdG9yVmll
d0NvbnRyb2xsZXJEaWRNb3ZlVG9XaW5kb3c6c2VsZl07Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S0luc3BlY3RvcldLV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5z
cGVjdG9yV0tXZWJWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1N2U3N2Nm
ZTdmMjg1OWM0NDViZDQ1ZmZmY2JjYjljMmQxNTYyM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5z
cGVjdG9yV0tXZWJWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLQotI2lm
IFBMQVRGT1JNKE1BQykKLQotQHByb3RvY29sIFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7
Ci0KLUBpbnRlcmZhY2UgV0tJbnNwZWN0b3JXS1dlYlZpZXcgOiBXS1dlYlZpZXcKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8V0tJbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZT4gaW5z
cGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBXS0luc3BlY3RvcldL
V2ViVmlld0RlbGVnYXRlCi1AcmVxdWlyZWQKLS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3UmVs
b2FkOihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZpZXc7Ci0tICh2b2lkKWluc3BlY3RvcldL
V2ViVmlld1JlbG9hZEZyb21PcmlnaW46KFdLSW5zcGVjdG9yV0tXZWJWaWV3ICopd2ViVmlldzsK
LS0gKHZvaWQpaW5zcGVjdG9yV0tXZWJWaWV3OihXS0luc3BlY3RvcldLV2ViVmlldyAqKXdlYlZp
ZXcgd2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3c7Ci0tICh2b2lkKWluc3Bl
Y3RvcldLV2ViVmlld0RpZE1vdmVUb1dpbmRvdzooV0tJbnNwZWN0b3JXS1dlYlZpZXcgKil3ZWJW
aWV3OwotQGVuZAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0YmZlZjRhMDFiYWYxM2FkNGZlNzFmOGE5ZDNkYzY1NDI1OGE5Y2I2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS0luc3BlY3RvcldLV2ViVmlldy5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIldLSW5zcGVjdG9yV0tXZWJWaWV3LmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpbXBv
cnQgIldLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIgotI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+
Ci0KLUBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvcldLV2ViVmlldyB7Ci0gICAgV2Vha09iakNQ
dHI8aWQgPFdLSW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdhdGU+PiBfaW5zcGVjdG9yV0tXZWJWaWV3
RGVsZWdhdGU7Ci19Ci0KLS0gKE5TUmVjdClfb3BhcXVlUmVjdEZvcldpbmRvd01vdmVXaGVuSW5U
aXRsZWJhcgotewotICAgIC8vIFRoaXMgY29udmluY2VzIEFwcEtpdCB0byBhbGxvdyB3aW5kb3cg
bW92ZXMgd2hlbiBjbGlja2luZyBhbnl3aGVyZSBpbiB0aGUgdGl0bGViYXIgKHRvcCAyMnB0KQot
ICAgIC8vIHdoZW4gdGhpcyB2aWV3J3MgY29udGVudHMgY292ZXIgdGhlIGVudGlyZSB3aW5kb3cn
cyBjb250ZW50cywgaW5jbHVkaW5nIHRoZSB0aXRsZWJhci4KLSAgICByZXR1cm4gTlNaZXJvUmVj
dDsKLX0KLQotLSAoTlNJbnRlZ2VyKXRhZwotewotICAgIHJldHVybiBXS0luc3BlY3RvclZpZXdU
YWc7Ci19Ci0KLS0gKGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilpbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZQotewotICAgIHJldHVybiBfaW5zcGVjdG9yV0tXZWJWaWV3RGVsZWdh
dGUuZ2V0QXV0b3JlbGVhc2VkKCk7Ci19Ci0KLS0gKHZvaWQpc2V0SW5zcGVjdG9yV0tXZWJWaWV3
RGVsZWdhdGU6KGlkIDxXS0luc3BlY3RvcldLV2ViVmlld0RlbGVnYXRlPilkZWxlZ2F0ZQotewot
ICAgIF9pbnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0tIChJQkFj
dGlvbilyZWxvYWQ6KGlkKXNlbmRlcgotewotICAgIFtzZWxmLmluc3BlY3RvcldLV2ViVmlld0Rl
bGVnYXRlIGluc3BlY3RvcldLV2ViVmlld1JlbG9hZDpzZWxmXTsKLX0KLQotLSAoSUJBY3Rpb24p
cmVsb2FkRnJvbU9yaWdpbjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYuaW5zcGVjdG9yV0tXZWJW
aWV3RGVsZWdhdGUgaW5zcGVjdG9yV0tXZWJWaWV3UmVsb2FkRnJvbU9yaWdpbjpzZWxmXTsKLX0K
LQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKiluZXdXaW5kb3cKLXsK
LSAgICBbc3VwZXIgdmlld1dpbGxNb3ZlVG9XaW5kb3c6bmV3V2luZG93XTsKLSAgICBbc2VsZi5p
bnNwZWN0b3JXS1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXc6c2VsZiB3aWxsTW92
ZVRvV2luZG93Om5ld1dpbmRvd107Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1dpbmRvdwot
ewotICAgIFtzdXBlciB2aWV3RGlkTW92ZVRvV2luZG93XTsKLSAgICBbc2VsZi5pbnNwZWN0b3JX
S1dlYlZpZXdEZWxlZ2F0ZSBpbnNwZWN0b3JXS1dlYlZpZXdEaWRNb3ZlVG9XaW5kb3c6c2VsZl07
Ci19Ci0KLUBlbmQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV2ViSW5zcGVjdG9yUHJveHlNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJiZTcyOGQ0MzVjYWY3MDU5NjUyYWQyYjNkOWUyMTcxNDY3ZWIwZmUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODA2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiV2ViSW5z
cGVjdG9yUHJveHkuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiV0tJbnNwZWN0
b3JQcml2YXRlTWFjLmgiCi0jaW1wb3J0ICJXS0luc3BlY3RvclZpZXdDb250cm9sbGVyLmgiCi0j
aW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIK
LSNpbXBvcnQgIldlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91
cC5oIgotI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCi0jaW1wb3J0ICJfV0tJbnNwZWN0b3JJbnRl
cm5hbC5oIgotI2ltcG9ydCAiX1dLSW5zcGVjdG9yV2luZG93LmgiCi0jaW1wb3J0IDxTZWN1cml0
eUludGVyZmFjZS9TRkNlcnRpZmljYXRlUGFuZWwuaD4KLSNpbXBvcnQgPFNlY3VyaXR5SW50ZXJm
YWNlL1NGQ2VydGlmaWNhdGVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NlcnRpZmljYXRlSW5m
by5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgotCi1zdGF0aWMgY29uc3QgTlNVSW50ZWdlciB3aW5kb3dTdHlsZU1hc2sgPSBOU1dp
bmRvd1N0eWxlTWFza1RpdGxlZCB8IE5TV2luZG93U3R5bGVNYXNrQ2xvc2FibGUgfCBOU1dpbmRv
d1N0eWxlTWFza01pbmlhdHVyaXphYmxlIHwgTlNXaW5kb3dTdHlsZU1hc2tSZXNpemFibGUgfCBO
U1dpbmRvd1N0eWxlTWFza0Z1bGxTaXplQ29udGVudFZpZXc7Ci0KLS8vIFRoZSB0aW1lIHdlIGtl
ZXAgb3VyIFdlYlZpZXcgYWxpdmUgYmVmb3JlIGNsb3NpbmcgaXQgYW5kIGl0cyBwcm9jZXNzLgot
Ly8gUmV1c2luZyB0aGUgV2ViVmlldyBpbXByb3ZlcyBzdGFydCB1cCB0aW1lIGZvciBwZW9wbGUg
dGhhdCBqdW1wIGluIGFuZCBvdXQgb2YgdGhlIEluc3BlY3Rvci4KLXN0YXRpYyBjb25zdCBTZWNv
bmRzIHdlYlZpZXdDbG9zZVRpbWVvdXQgeyAxX21pbiB9OwotCi1zdGF0aWMgdm9pZCoga1dpbmRv
d0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQgPSAma1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNl
cnZlckNvbnRleHQ7Ci0KLUBpbnRlcmZhY2UgV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVy
ICgpIDxOU1dpbmRvd0RlbGVnYXRlLCBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVsZWdhdGU+
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYkluc3BlY3RvclByb3h5OihXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5KilpbnNwZWN0b3JQcm94eTsKLS0gKHZvaWQpaW52YWxpZGF0ZTsKLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gV0tXZWJJbnNwZWN0b3JQcm94eU9iakNBZGFwdGVyIHsK
LSAgICBXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5KiBfaW5zcGVjdG9yUHJveHk7Ci19Ci0KLS0g
KFdLSW5zcGVjdG9yUmVmKWluc3BlY3RvclJlZgotewotICAgIHJldHVybiB0b0FQSShfaW5zcGVj
dG9yUHJveHkpOwotfQotCi0tIChfV0tJbnNwZWN0b3IgKilpbnNwZWN0b3IKLXsKLSAgICBpZiAo
X2luc3BlY3RvclByb3h5KQotICAgICAgICByZXR1cm4gd3JhcHBlcigqX2luc3BlY3RvclByb3h5
KTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJJbnNw
ZWN0b3JQcm94eTooV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eSopaW5zcGVjdG9yUHJveHkKLXsK
LSAgICBBU1NFUlRfQVJHKGluc3BlY3RvclByb3h5LCBpbnNwZWN0b3JQcm94eSk7Ci0KLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8v
IFVucmV0YWluZWQgdG8gYXZvaWQgYSByZWZlcmVuY2UgY3ljbGUuCi0gICAgX2luc3BlY3RvclBy
b3h5ID0gaW5zcGVjdG9yUHJveHk7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClp
bnZhbGlkYXRlCi17Ci0gICAgX2luc3BlY3RvclByb3h5ID0gbnVsbHB0cjsKLX0KLQotLSAoTlNS
ZWN0KXdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cgd2lsbFBvc2l0aW9uU2hlZXQ6KE5TV2luZG93
ICopc2hlZXQgdXNpbmdSZWN0OihOU1JlY3QpcmVjdAotewotICAgIGlmIChfaW5zcGVjdG9yUHJv
eHkpCi0gICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRS
ZWN0KCkuaGVpZ2h0KCksIF9pbnNwZWN0b3JQcm94eS0+c2hlZXRSZWN0KCkud2lkdGgoKSwgMCk7
Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkTW92ZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAg
ICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0ZyYW1lRGlkQ2hhbmdlKCk7Ci19Ci0KLS0gKHZvaWQp
d2luZG93RGlkUmVzaXplOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlm
IChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94eS0+d2luZG93RnJhbWVE
aWRDaGFuZ2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2lu
c3BlY3RvclByb3h5LT5jbG9zZSgpOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZEVudGVyRnVsbFNj
cmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3Rv
clByb3h5KQotICAgICAgICBfaW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFu
Z2UoKTsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbFNjcmVlbjooTlNOb3RpZmljYXRp
b24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoX2luc3BlY3RvclByb3h5KQotICAgICAgICBf
aW5zcGVjdG9yUHJveHktPndpbmRvd0Z1bGxTY3JlZW5EaWRDaGFuZ2UoKTsKLX0KLQotLSAodm9p
ZClpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0
aW9uCi17Ci0gICAgLy8gUmVzaXppbmcgdGhlIHZpZXdzIHdoaWxlIGluc2lkZSB0aGlzIG5vdGlm
aWNhdGlvbiBjYW4gbGVhZCB0byBiYWQgcmVzdWx0cyB3aGVuIGVudGVyaW5nCi0gICAgLy8gb3Ig
ZXhpdGluZyBmdWxsIHNjcmVlbi4gVG8gYXZvaWQgdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gdGhl
IHdvcmsgYWZ0ZXIgYSBkZWxheS4gV2Ugb25seQotICAgIC8vIGRlcGVuZCBvbiB0aGlzIGZvciBl
bmZvcmNpbmcgdGhlIGhlaWdodCBjb25zdHJhaW50cywgc28gYSBzbWFsbCBkZWxheSBpc24ndCB0
ZXJyaWJsZS4gTW9zdAotICAgIC8vIG9mIHRoZSB0aW1lIHRoZSB2aWV3cyB3aWxsIGFscmVhZHkg
aGF2ZSB0aGUgY29ycmVjdCBmcmFtZXMgYmVjYXVzZSBvZiBhdXRvcmVzaXppbmcgbWFza3MuCi0K
LSAgICBkaXNwYXRjaF9hZnRlcihESVNQQVRDSF9USU1FX05PVywgZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKLSAgICAgICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgICAgIF9p
bnNwZWN0b3JQcm94eS0+aW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7Ci0gICAgfSk7Ci19
Ci0KLS0gKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoIG9m
T2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnk8TlNLZXlWYWx1ZUNoYW5nZUtl
eSwgaWQ+ICopY2hhbmdlIGNvbnRleHQ6KHZvaWQgKiljb250ZXh0Ci17Ci0gICAgaWYgKGNvbnRl
eHQgIT0ga1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHQpIHsKLSAgICAgICAgW3N1
cGVyIG9ic2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvZk9iamVjdDpvYmplY3QgY2hhbmdl
OmNoYW5nZSBjb250ZXh0OmNvbnRleHRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
TlNXaW5kb3cgKndpbmRvdyA9IG9iamVjdDsKLSAgICBBU1NFUlQoW3dpbmRvdyBpc0tpbmRPZkNs
YXNzOltOU1dpbmRvdyBjbGFzc11dKTsKLSAgICBpZiAod2luZG93LmluTGl2ZVJlc2l6ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZGlzcGF0Y2hfYWZ0ZXIoRElTUEFUQ0hfVElNRV9OT1csIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAgIGlmIChfaW5zcGVjdG9yUHJveHkp
Ci0gICAgICAgICAgICBfaW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5n
ZSgpOwotICAgIH0pOwotfQotCi0vLyBNQVJLOiBXS0luc3BlY3RvclZpZXdDb250cm9sbGVyRGVs
ZWdhdGUgbWV0aG9kcwotCi0tICh2b2lkKWluc3BlY3RvclZpZXdDb250cm9sbGVySW5zcGVjdG9y
RGlkQ3Jhc2g6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0b3JWaWV3Q29udHJv
bGxlcgotewotICAgIGlmIChfaW5zcGVjdG9yUHJveHkpCi0gICAgICAgIF9pbnNwZWN0b3JQcm94
eS0+Y2xvc2VGb3JDcmFzaCgpOwotfQotCi0tIChCT09MKWluc3BlY3RvclZpZXdDb250cm9sbGVy
SW5zcGVjdG9ySXNVbmRlclRlc3Q6KFdLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgKilpbnNwZWN0
b3JWaWV3Q29udHJvbGxlcgotewotICAgIHJldHVybiBfaW5zcGVjdG9yUHJveHkgPyBfaW5zcGVj
dG9yUHJveHktPmlzVW5kZXJUZXN0KCkgOiBmYWxzZTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JW
aWV3Q29udHJvbGxlcjooV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdD
b250cm9sbGVyIHdpbGxNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopbmV3V2luZG93Ci17Ci0gICAg
aWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5hdHRhY2htZW50
V2lsbE1vdmVGcm9tV2luZG93KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndlYlZpZXcud2luZG93
KTsKLX0KLQotLSAodm9pZClpbnNwZWN0b3JWaWV3Q29udHJvbGxlckRpZE1vdmVUb1dpbmRvdzoo
V0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlciAqKWluc3BlY3RvclZpZXdDb250cm9sbGVyCi17Ci0g
ICAgaWYgKF9pbnNwZWN0b3JQcm94eSkKLSAgICAgICAgX2luc3BlY3RvclByb3h5LT5hdHRhY2ht
ZW50RGlkTW92ZVRvV2luZG93KGluc3BlY3RvclZpZXdDb250cm9sbGVyLndlYlZpZXcud2luZG93
KTsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2htZW50Vmlld0RpZENoYW5nZShO
U1ZpZXcgKm9sZFZpZXcsIE5TVmlldyAqbmV3VmlldykKLXsKLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkg
bmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6b2xkVmlld107Ci0g
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29i
akNBZGFwdGVyLmdldCgpIHNlbGVjdG9yOkBzZWxlY3RvcihpbnNwZWN0ZWRWaWV3RnJhbWVEaWRD
aGFuZ2U6KSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpuZXdW
aWV3XTsKLQotICAgIGlmIChtX2lzQXR0YWNoZWQpCi0gICAgICAgIGF0dGFjaChtX2F0dGFjaG1l
bnRTaWRlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNobWVudFdpbGxNb3Zl
RnJvbVdpbmRvdyhOU1dpbmRvdyAqb2xkV2luZG93KQotewotICAgIGlmIChtX2lzT2JzZXJ2aW5n
Q29udGVudExheW91dFJlY3QpIHsKLSAgICAgICAgbV9pc09ic2VydmluZ0NvbnRlbnRMYXlvdXRS
ZWN0ID0gZmFsc2U7Ci0gICAgICAgIFtvbGRXaW5kb3cgcmVtb3ZlT2JzZXJ2ZXI6bV9vYmpDQWRh
cHRlci5nZXQoKSBmb3JLZXlQYXRoOkAiY29udGVudExheW91dFJlY3QiIGNvbnRleHQ6a1dpbmRv
d0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRleHRdOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6YXR0YWNobWVudERpZE1vdmVUb1dpbmRvdyhOU1dpbmRvdyAqbmV3V2luZG93
KQotewotICAgIGlmIChtX2lzQXR0YWNoZWQgJiYgISFuZXdXaW5kb3cpIHsKLSAgICAgICAgbV9p
c09ic2VydmluZ0NvbnRlbnRMYXlvdXRSZWN0ID0gdHJ1ZTsKLSAgICAgICAgW25ld1dpbmRvdyBh
ZGRPYnNlcnZlcjptX29iakNBZGFwdGVyLmdldCgpIGZvcktleVBhdGg6QCJjb250ZW50TGF5b3V0
UmVjdCIgb3B0aW9uczowIGNvbnRleHQ6a1dpbmRvd0NvbnRlbnRMYXlvdXRPYnNlcnZlckNvbnRl
eHRdOwotICAgICAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB1bnNpZ25lZCBsZXZlbCA9IGluc3BlY3Rpb25MZXZlbCgpOwotICAgIGlmIChsZXZlbCA+IDEp
IHsKLSAgICAgICAgTlNTdHJpbmcgKmRlYnVnVGl0bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIFslZF0g4oCUICVAIiwgIldlYiBJbnNw
ZWN0b3Igd2luZG93IHRpdGxlIHdoZW4gaW5zcGVjdGluZyBXZWIgSW5zcGVjdG9yIiksIGxldmVs
LCAoTlNTdHJpbmcgKiltX3VybFN0cmluZ107Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBz
ZXRUaXRsZTpkZWJ1Z1RpdGxlXTsKLSAgICB9IGVsc2UgewotICAgICAgICBOU1N0cmluZyAqdGl0
bGUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCJXZWIgSW5zcGVj
dG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAoTlNTdHJpbmcgKilt
X3VybFN0cmluZ107Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRUaXRsZTp0aXRsZV07
Ci0gICAgfQotfQotCi1SZXRhaW5QdHI8TlNXaW5kb3c+IFdlYkluc3BlY3RvclByb3h5OjpjcmVh
dGVGcm9udGVuZFdpbmRvdyhOU1JlY3Qgc2F2ZWRXaW5kb3dGcmFtZSwgSW5zcGVjdGlvblRhcmdl
dFR5cGUgdGFyZ2V0VHlwZSkKLXsKLSAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSAhTlNJc0VtcHR5
UmVjdChzYXZlZFdpbmRvd0ZyYW1lKSA/IHNhdmVkV2luZG93RnJhbWUgOiBOU01ha2VSZWN0KDAs
IDAsIGluaXRpYWxXaW5kb3dXaWR0aCwgaW5pdGlhbFdpbmRvd0hlaWdodCk7Ci0gICAgYXV0byB3
aW5kb3cgPSBhZG9wdE5TKFtbX1dLSW5zcGVjdG9yV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRl
bnRSZWN0OndpbmRvd0ZyYW1lIHN0eWxlTWFzazp3aW5kb3dTdHlsZU1hc2sgYmFja2luZzpOU0Jh
Y2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7Ci0gICAgW3dpbmRvdyBzZXRNaW5TaXplOk5T
TWFrZVNpemUobWluaW11bVdpbmRvd1dpZHRoLCBtaW5pbXVtV2luZG93SGVpZ2h0KV07Ci0gICAg
W3dpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwotICAgIFt3aW5kb3cgc2V0Q29sbGVj
dGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBOU1dpbmRvd0NvbGxl
Y3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5QcmltYXJ5KV07Ci0KLSAgICBib29sIGZvclJlbW90ZVRh
cmdldCA9IHRhcmdldFR5cGUgPT0gSW5zcGVjdGlvblRhcmdldFR5cGU6OlJlbW90ZTsKLSAgICBb
d2luZG93IHNldEZvclJlbW90ZVRhcmdldDpmb3JSZW1vdGVUYXJnZXRdOwotCi0gICAgQ0dGbG9h
dCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUgPSAoW3dpbmRvdyBzY3JlZW5dLmZyYW1lLnNp
emUud2lkdGggLyAyKSAtIDQ7Ci0gICAgQ0dGbG9hdCBtaW5pbXVtRnVsbFNjcmVlbldpZHRoID0g
c3RkOjptYXg8Q0dGbG9hdD4oNjM2LCBhcHByb3hpbWF0ZWx5SGFsZlNjcmVlblNpemUpOwotICAg
IFt3aW5kb3cgc2V0TWluRnVsbFNjcmVlbkNvbnRlbnRTaXplOk5TTWFrZVNpemUobWluaW11bUZ1
bGxTY3JlZW5XaWR0aCwgbWluaW11bVdpbmRvd0hlaWdodCldOwotICAgIFt3aW5kb3cgc2V0Q29s
bGVjdGlvbkJlaGF2aW9yOihbd2luZG93IGNvbGxlY3Rpb25CZWhhdmlvcl0gfCBOU1dpbmRvd0Nv
bGxlY3Rpb25CZWhhdmlvckZ1bGxTY3JlZW5BbGxvd3NUaWxpbmcpXTsKLQotICAgIFt3aW5kb3cg
c2V0VGl0bGViYXJBcHBlYXJzVHJhbnNwYXJlbnQ6WUVTXTsKLQotICAgIC8vIENlbnRlciB0aGUg
d2luZG93IGlmIHRoZSBzYXZlZCBmcmFtZSB3YXMgZW1wdHkuCi0gICAgaWYgKE5TSXNFbXB0eVJl
Y3Qoc2F2ZWRXaW5kb3dGcmFtZSkpCi0gICAgICAgIFt3aW5kb3cgY2VudGVyXTsKLQotICAgIHJl
dHVybiB3aW5kb3c7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoaW5zcGVjdGVkUGFnZSgpKTsK
LSAgICBBU1NFUlQoIW1faW5zcGVjdG9yUGFnZSk7Ci0KLSAgICBtX2Nsb3NlRnJvbnRlbmRBZnRl
ckluYWN0aXZpdHlUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JWaWV3Q29udHJv
bGxlcikgewotICAgICAgICBBU1NFUlQobV9vYmpDQWRhcHRlcik7Ci0gICAgICAgIHJldHVybiBb
bV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+X3BhZ2UuZ2V0KCk7Ci0gICAgfQot
Ci0gICAgbV9vYmpDQWRhcHRlciA9IGFkb3B0TlMoW1tXS1dlYkluc3BlY3RvclByb3h5T2JqQ0Fk
YXB0ZXIgYWxsb2NdIGluaXRXaXRoV2ViSW5zcGVjdG9yUHJveHk6dGhpc10pOwotICAgIE5TVmll
dyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVudFZp
ZXcoKTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2Vy
dmVyOm1fb2JqQ0FkYXB0ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGluc3BlY3RlZFZpZXdG
cmFtZURpZENoYW5nZTopIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2Jq
ZWN0Omluc3BlY3RlZFZpZXddOwotCi0gICAgbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciA9IGFk
b3B0TlMoW1tXS0luc3BlY3RvclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rl
ZFBhZ2U6aW5zcGVjdGVkUGFnZSgpXSk7Ci0gICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIu
Z2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpDQWRhcHRlci5nZXQoKV07Ci0KLSAgICBXZWJQYWdlUHJv
eHkgKmluc3BlY3RvclBhZ2UgPSBbbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciB3ZWJWaWV3XS0+
X3BhZ2UuZ2V0KCk7Ci0gICAgQVNTRVJUKGluc3BlY3RvclBhZ2UpOwotCi0gICAgcmV0dXJuIGlu
c3BlY3RvclBhZ2U7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
RnJvbnRlbmRXaW5kb3coKQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwotCi0g
ICAgTlNTdHJpbmcgKnNhdmVkV2luZG93RnJhbWVTdHJpbmcgPSBpbnNwZWN0ZWRQYWdlKCktPnBh
Z2VHcm91cCgpLnByZWZlcmVuY2VzKCkuaW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLSAgICBOU1Jl
Y3Qgc2F2ZWRXaW5kb3dGcmFtZSA9IE5TUmVjdEZyb21TdHJpbmcoc2F2ZWRXaW5kb3dGcmFtZVN0
cmluZyk7Ci0KLSAgICBtX2luc3BlY3RvcldpbmRvdyA9IFdlYkluc3BlY3RvclByb3h5OjpjcmVh
dGVGcm9udGVuZFdpbmRvdyhzYXZlZFdpbmRvd0ZyYW1lLCBJbnNwZWN0aW9uVGFyZ2V0VHlwZTo6
TG9jYWwpOwotICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXREZWxlZ2F0ZTptX29iakNBZGFwdGVy
LmdldCgpXTsKLQotICAgIFdLV2ViVmlldyAqaW5zcGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZp
ZXdDb250cm9sbGVyIHdlYlZpZXddOwotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbbV9pbnNw
ZWN0b3JXaW5kb3cgY29udGVudFZpZXddOwotICAgIGluc3BlY3RvclZpZXcuZnJhbWUgPSBbY29u
dGVudFZpZXcgYm91bmRzXTsKLSAgICBbY29udGVudFZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JW
aWV3XTsKLQotICAgIHVwZGF0ZUluc3BlY3RvcldpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmNsb3NlRnJvbnRlbmRQYWdlKCkKLXsKLSAgICBBU1NFUlQoIW1faXNB
dHRhY2hlZCB8fCAhbV9pbnNwZWN0b3JXaW5kb3cpOwotCi0gICAgaWYgKG1faW5zcGVjdG9yVmll
d0NvbnRyb2xsZXIpIHsKLSAgICAgICAgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIuZ2V0KCkg
c2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgbV9pbnNwZWN0b3JWaWV3Q29udHJvbGxlciA9IG5p
bDsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmpDQWRhcHRlcikgewotICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqQ0FkYXB0ZXIu
Z2V0KCldOwotCi0gICAgICAgIFttX29iakNBZGFwdGVyIGludmFsaWRhdGVdOwotICAgICAgICBt
X29iakNBZGFwdGVyID0gbmlsOwotICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZEFmdGVySW5hY3Rpdml0eVRpbWVyRmlyZWQoKQotewotICAgIGNsb3NlRnJv
bnRlbmRQYWdlKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ2xvc2VG
cm9udGVuZFBhZ2VBbmRXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewot
ICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICAgICAgW21f
aW5zcGVjdG9yV2luZG93IGNsb3NlXTsKLSAgICAgICAgbV9pbnNwZWN0b3JXaW5kb3cgPSBuaWw7
Ci0gICAgfQotCi0gICAgbV9jbG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RhcnRP
bmVTaG90KHdlYlZpZXdDbG9zZVRpbWVvdXQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybURpZENsb3NlRm9yQ3Jhc2goKQotewotICAgIG1fY2xvc2VGcm9udGVuZEFmdGVy
SW5hY3Rpdml0eVRpbWVyLnN0b3AoKTsKLQotICAgIGNsb3NlRnJvbnRlbmRQYWdlKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbV9j
bG9zZUZyb250ZW5kQWZ0ZXJJbmFjdGl2aXR5VGltZXIuc3RvcCgpOwotCi0gICAgY2xvc2VGcm9u
dGVuZFBhZ2UoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKCkK
LXsKLSAgICBpZiAobV9pc0F0dGFjaGVkKSB7Ci0gICAgICAgIHBsYXRmb3JtRGV0YWNoKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKLSAg
ICAgICAgW21faW5zcGVjdG9yV2luZG93IHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX2lu
c3BlY3RvcldpbmRvdyBjbG9zZV07Ci0gICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gbmlsOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1SZXNldFN0YXRlKCkK
LXsKLSAgICBpbnNwZWN0ZWRQYWdlKCktPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuZGVsZXRl
SW5zcGVjdG9yV2luZG93RnJhbWUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIC8vIElmIHRoZSBXZWIgSW5zcGVjdG9yIGlzIG5v
IGxvbmdlciBpbiB0aGUgc2FtZSB3aW5kb3cgYXMgdGhlIGluc3BlY3RlZCB2aWV3LAotICAgIC8v
IHRoZW4gd2UgbmVlZCB0byByZW9wZW4gdGhlIEluc3BlY3RvciB0byBnZXQgaXQgYXR0YWNoZWQg
dG8gdGhlIHJpZ2h0IHdpbmRvdy4KLSAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBkcmFnZ2lu
ZyB0YWJzIHRvIGFub3RoZXIgd2luZG93IGluIFNhZmFyaS4KLSAgICBpZiAobV9pc0F0dGFjaGVk
ICYmIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyAhPSBpbnNwZWN0
ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkpIHsKLSAgICAgICAgb3BlbigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEwOTM3Njg4Pjog
dGhpcyB3aWxsIG5vdCBicmluZyBhIGJhY2tncm91bmQgdGFiIGluIFNhZmFyaSB0byB0aGUgZnJv
bnQsIG9ubHkgaXRzIHdpbmRvdy4KLSAgICBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgd2Vi
Vmlld10ud2luZG93IG1ha2VLZXlBbmRPcmRlckZyb250Om5pbF07Ci0gICAgW1ttX2luc3BlY3Rv
clZpZXdDb250cm9sbGVyIHdlYlZpZXddLndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6W21faW5z
cGVjdG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld11dOwotfQotCi12b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKQotewotICAgIFtpbnNwZWN0
ZWRQYWdlKCktPnBsYXRmb3JtV2luZG93KCkgbWFrZUtleUFuZE9yZGVyRnJvbnQ6bmlsXTsKLX0K
LQotYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkKLXsKLSAgICAvLyBG
SVhNRSA8cmRhcjovL3Byb2JsZW0vMTA5Mzc2ODg+OiB0aGlzIHdpbGwgbm90IHJldHVybiBmYWxz
ZSBmb3IgYSBiYWNrZ3JvdW5kIHRhYiBpbiBTYWZhcmksIG9ubHkgYSBiYWNrZ3JvdW5kIHdpbmRv
dy4KLSAgICByZXR1cm4gbV9pc1Zpc2libGUgJiYgW21faW5zcGVjdG9yVmlld0NvbnRyb2xsZXIg
d2ViVmlld10ud2luZG93LmlzTWFpbldpbmRvdzsKLX0KLQotYm9vbCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1DYW5BdHRhY2goYm9vbCB3ZWJQcm9jZXNzQ2FuQXR0YWNoKQotewotICAgIE5T
VmlldyAqaW5zcGVjdGVkVmlldyA9IGluc3BlY3RlZFBhZ2UoKS0+aW5zcGVjdG9yQXR0YWNobWVu
dFZpZXcoKTsKLSAgICBpZiAoW1dLSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIgdmlld0lzSW5zcGVj
dG9yV2ViVmlldzppbnNwZWN0ZWRWaWV3XSkKLSAgICAgICAgcmV0dXJuIHdlYlByb2Nlc3NDYW5B
dHRhY2g7Ci0KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0g
MjUwOwotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9
IDAuNzU7Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdpZHRoID0gNTAw
OwotCi0gICAgTlNSZWN0IGluc3BlY3RlZFZpZXdGcmFtZSA9IGluc3BlY3RlZFZpZXcuZnJhbWU7
Ci0KLSAgICBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgPSBOU0hlaWdodChpbnNwZWN0ZWRW
aWV3RnJhbWUpICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87Ci0gICAgcmV0dXJuIG1pbmlt
dW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVtQXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFj
aGVkV2lkdGggPD0gTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFp
bGFibGUpCi17Ci0gICAgLy8gRG8gbm90aGluZy4KLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQot
ewotICAgIG1fdXJsU3RyaW5nID0gdXJsU3RyaW5nOwotCi0gICAgdXBkYXRlSW5zcGVjdG9yV2lu
ZG93VGl0bGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TaG93Q2Vy
dGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAg
QVNTRVJUKCFjZXJ0aWZpY2F0ZUluZm8uaXNFbXB0eSgpKTsKLQotICAgIFJldGFpblB0cjxTRkNl
cnRpZmljYXRlUGFuZWw+IGNlcnRpZmljYXRlUGFuZWwgPSBhZG9wdE5TKFtbU0ZDZXJ0aWZpY2F0
ZVBhbmVsIGFsbG9jXSBpbml0XSk7Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93OwotICAgIGlmICht
X2luc3BlY3RvcldpbmRvdykKLSAgICAgICAgd2luZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cuZ2V0
KCk7Ci0gICAgZWxzZQotICAgICAgICB3aW5kb3cgPSBbW21faW5zcGVjdG9yVmlld0NvbnRyb2xs
ZXIgd2ViVmlld10gd2luZG93XTsKLQotICAgIGlmICghd2luZG93KQotICAgICAgICB3aW5kb3cg
PSBbTlNBcHAga2V5V2luZG93XTsKLQotI2lmIEhBVkUoU0VDX1RSVVNUX1NFUklBTElaQVRJT04p
Ci0gICAgW2NlcnRpZmljYXRlUGFuZWwgYmVnaW5TaGVldEZvcldpbmRvdzp3aW5kb3cgbW9kYWxE
ZWxlZ2F0ZTpuaWwgZGlkRW5kU2VsZWN0b3I6TlVMTCBjb250ZXh0SW5mbzpudWxscHRyIHRydXN0
OmNlcnRpZmljYXRlSW5mby50cnVzdCgpIHNob3dHcm91cDpZRVNdOwotI2Vsc2UKLSAgICBbY2Vy
dGlmaWNhdGVQYW5lbCBiZWdpblNoZWV0Rm9yV2luZG93OndpbmRvdyBtb2RhbERlbGVnYXRlOm5p
bCBkaWRFbmRTZWxlY3RvcjpOVUxMIGNvbnRleHRJbmZvOm51bGxwdHIgY2VydGlmaWNhdGVzOihO
U0FycmF5ICopY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSBzaG93R3JvdXA6WUVT
XTsKLSNlbmRpZgotCi0gICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJ1c3Qg
cGFuZWwgaGFzIGJlZW4gZGlzcGxheWVkLCBiZWNhdXNlIHRoZSBjZXJ0aWZpY2F0ZVZpZXcgZG9l
c24ndCBleGlzdCBiZWZvcmVoYW5kLgotICAgIFNGQ2VydGlmaWNhdGVWaWV3ICpjZXJ0aWZpY2F0
ZVZpZXcgPSBbY2VydGlmaWNhdGVQYW5lbCBjZXJ0aWZpY2F0ZVZpZXddOwotICAgIFtjZXJ0aWZp
Y2F0ZVZpZXcgc2V0RGlzcGxheVRydXN0OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXRF
ZGl0YWJsZVRydXN0Ok5PXTsKLSAgICBbY2VydGlmaWNhdGVWaWV3IHNldERpc3BsYXlEZXRhaWxz
OllFU107Ci0gICAgW2NlcnRpZmljYXRlVmlldyBzZXREZXRhaWxzRGlzY2xvc2VkOllFU107Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJv
b2wgZm9yY2VTYXZlRGlhbG9nKQotewotICAgIEFTU0VSVCghc3VnZ2VzdGVkVVJMLmlzRW1wdHko
KSk7Ci0gICAgCi0gICAgTlNVUkwgKnBsYXRmb3JtVVJMID0gbV9zdWdnZXN0ZWRUb0FjdHVhbFVS
TE1hcC5nZXQoc3VnZ2VzdGVkVVJMKS5nZXQoKTsKLSAgICBpZiAoIXBsYXRmb3JtVVJMKSB7Ci0g
ICAgICAgIHBsYXRmb3JtVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6c3VnZ2VzdGVkVVJMXTsK
LSAgICAgICAgLy8gVGhlIHVzZXIgbXVzdCBjb25maXJtIG5ldyBmaWxlbmFtZXMgYmVmb3JlIHdl
IGNhbiBzYXZlIHRvIHRoZW0uCi0gICAgICAgIGZvcmNlU2F2ZURpYWxvZyA9IHRydWU7Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVChwbGF0Zm9ybVVSTCk7Ci0gICAgaWYgKCFwbGF0Zm9ybVVSTCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTmVjZXNzYXJ5IGZvciB0aGUgYmxvY2sgYmVsb3cu
Ci0gICAgU3RyaW5nIHN1Z2dlc3RlZFVSTENvcHkgPSBzdWdnZXN0ZWRVUkw7Ci0gICAgU3RyaW5n
IGNvbnRlbnRDb3B5ID0gY29udGVudDsKLQotICAgIGF1dG8gc2F2ZVRvVVJMID0gXihOU1VSTCAq
YWN0dWFsVVJMKSB7Ci0gICAgICAgIEFTU0VSVChhY3R1YWxVUkwpOwotCi0gICAgICAgIG1fc3Vn
Z2VzdGVkVG9BY3R1YWxVUkxNYXAuc2V0KHN1Z2dlc3RlZFVSTENvcHksIGFjdHVhbFVSTCk7Ci0K
LSAgICAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBv
dXQ7Ci0gICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50Q29weSwgb3V0LCBCYXNl
NjRWYWxpZGF0ZVBhZGRpbmcpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IFJldGFpblB0cjxOU0RhdGE+IGRhdGFDb250ZW50ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10g
aW5pdFdpdGhCeXRlczpvdXQuZGF0YSgpIGxlbmd0aDpvdXQuc2l6ZSgpXSk7Ci0gICAgICAgICAg
ICBbZGF0YUNvbnRlbnQgd3JpdGVUb1VSTDphY3R1YWxVUkwgYXRvbWljYWxseTpZRVNdOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtjb250ZW50Q29weSB3cml0ZVRvVVJMOmFjdHVhbFVS
TCBhdG9taWNhbGx5OllFUyBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZyBlcnJvcjpOVUxM
XTsKLQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShbYWN0dWFsVVJMIGFic29sdXRlU3RyaW5nXSksIG1faW5z
cGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOwotICAgIH07Ci0KLSAgICBpZiAoIWZvcmNlU2F2ZURp
YWxvZykgewotICAgICAgICBzYXZlVG9VUkwocGxhdGZvcm1VUkwpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgTlNTYXZlUGFuZWwgKnBhbmVsID0gW05TU2F2ZVBhbmVsIHNhdmVQYW5l
bF07Ci0gICAgcGFuZWwubmFtZUZpZWxkU3RyaW5nVmFsdWUgPSBwbGF0Zm9ybVVSTC5sYXN0UGF0
aENvbXBvbmVudDsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmaWxlIFVSTCB3ZSd2ZSBhbHJlYWR5
IHNhdmVkIHRoaXMgZmlsZSB0byBhIHBhdGggYW5kCi0gICAgLy8gY2FuIHByb3ZpZGUgYSBnb29k
IGRpcmVjdG9yeSB0byBzaG93LiBPdGhlcndpc2UsIHVzZSB0aGUgc3lzdGVtJ3MKLSAgICAvLyBk
ZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgaW5pdGlhbCBkaXJlY3RvcnkgdG8gc2hvdyBpbiB0aGUg
ZGlhbG9nLgotICAgIGlmIChwbGF0Zm9ybVVSTC5pc0ZpbGVVUkwpCi0gICAgICAgIHBhbmVsLmRp
cmVjdG9yeVVSTCA9IFtwbGF0Zm9ybVVSTCBVUkxCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRd
OwotCi0gICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IF4oTlNJbnRlZ2VyIHJlc3VsdCkgewot
ICAgICAgICBpZiAocmVzdWx0ID09IE5TTW9kYWxSZXNwb25zZUNhbmNlbCkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBOU01vZGFsUmVzcG9uc2VPSyk7Ci0g
ICAgICAgIHNhdmVUb1VSTChwYW5lbC5VUkwpOwotICAgIH07Ci0KLSAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gbV9pbnNwZWN0b3JXaW5kb3cgPyBtX2luc3BlY3RvcldpbmRvdy5nZXQoKSA6IFtOU0Fw
cCBrZXlXaW5kb3ddOwotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIFtwYW5lbCBiZWdpblNoZWV0
TW9kYWxGb3JXaW5kb3c6d2luZG93IGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVy
XTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtwYW5lbCBydW5Nb2RhbF0p
OwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFVSTCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQotewotICAgIEFTU0VSVCgh
c3VnZ2VzdGVkVVJMLmlzRW1wdHkoKSk7Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TVVJMPiBhY3R1
YWxVUkwgPSBtX3N1Z2dlc3RlZFRvQWN0dWFsVVJMTWFwLmdldChzdWdnZXN0ZWRVUkwpOwotICAg
IC8vIERvIG5vdCBhcHBlbmQgdW5sZXNzIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGNvbmZpcm1lZCB0
aGlzIGZpbGVuYW1lIGluIHNhdmUoKS4KLSAgICBpZiAoIWFjdHVhbFVSTCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTlNGaWxlSGFuZGxlICpoYW5kbGUgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5k
bGVGb3JXcml0aW5nVG9VUkw6YWN0dWFsVVJMLmdldCgpIGVycm9yOk5VTExdOwotICAgIFtoYW5k
bGUgc2Vla1RvRW5kT2ZGaWxlXTsKLSAgICBbaGFuZGxlIHdyaXRlRGF0YTpbY29udGVudCBkYXRh
VXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtoYW5kbGUgY2xvc2VG
aWxlXTsKLQotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpEaWRBcHBlbmQoW2FjdHVhbFVSTCBhYnNvbHV0ZVN0cmluZ10pLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
d2luZG93RnJhbWVEaWRDaGFuZ2UoKQotewotICAgIEFTU0VSVCghbV9pc0F0dGFjaGVkKTsKLSAg
ICBBU1NFUlQobV9pc1Zpc2libGUpOwotICAgIEFTU0VSVChtX2luc3BlY3RvcldpbmRvdyk7Ci0K
LSAgICBpZiAobV9pc0F0dGFjaGVkIHx8ICFtX2lzVmlzaWJsZSB8fCAhbV9pbnNwZWN0b3JXaW5k
b3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TU3RyaW5nICpmcmFtZVN0cmluZyA9IE5TU3Ry
aW5nRnJvbVJlY3QoW21faW5zcGVjdG9yV2luZG93IGZyYW1lXSk7Ci0gICAgaW5zcGVjdGVkUGFn
ZSgpLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNldEluc3BlY3RvcldpbmRvd0ZyYW1lKGZy
YW1lU3RyaW5nKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6d2luZG93RnVsbFNjcmVl
bkRpZENoYW5nZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzQXR0YWNoZWQpOwotICAgIEFTU0VSVCht
X2lzVmlzaWJsZSk7Ci0gICAgQVNTRVJUKG1faW5zcGVjdG9yV2luZG93KTsKLQotICAgIGlmICht
X2lzQXR0YWNoZWQgfHwgIW1faXNWaXNpYmxlIHx8ICFtX2luc3BlY3RvcldpbmRvdykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChwbGF0Zm9ybUNhbkF0
dGFjaChjYW5BdHRhY2goKSkpOyAgICAKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5z
cGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKENHRmxvYXQgY3VycmVudERpbWVuc2lvbikKLXsKLSAg
ICBpZiAoIW1faXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNBdHRh
Y2hlZCkgewotICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXR0YWNoIGF2YWlsYWJpbGl0eSBjaGFu
Z2VkLiBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBpbiBjYXNlCi0gICAgICAgIC8vIHRoZSBhdHRh
Y2htZW50IHZpZXcgaXMgbm90IHRoZSBXS1ZpZXcuCi0gICAgICAgIGF0dGFjaEF2YWlsYWJpbGl0
eUNoYW5nZWQocGxhdGZvcm1DYW5BdHRhY2goY2FuQXR0YWNoKCkpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghaW5zcGVjdGVkUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0
dGFjaG1lbnRWaWV3KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIgd2ViVmlld107Ci0KLSAgICBOU1JlY3QgaW5zcGVjdGVkVmlld0Zy
YW1lID0gaW5zcGVjdGVkVmlldy5mcmFtZTsKLSAgICBOU1JlY3Qgb2xkSW5zcGVjdG9yVmlld0Zy
YW1lID0gaW5zcGVjdG9yVmlldy5mcmFtZTsKLSAgICBOU1JlY3QgbmV3SW5zcGVjdG9yVmlld0Zy
YW1lID0gTlNaZXJvUmVjdDsKLSAgICBOU1JlY3QgcGFyZW50Qm91bmRzID0gaW5zcGVjdGVkVmll
dy5zdXBlcnZpZXcuYm91bmRzOwotICAgIENHRmxvYXQgaW5zcGVjdGVkVmlld1RvcCA9IE5TTWF4
WShpbnNwZWN0ZWRWaWV3RnJhbWUpOwotCi0gICAgc3dpdGNoIChtX2F0dGFjaG1lbnRTaWRlKSB7
Ci0gICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOiB7Ci0gICAgICAgIGlmICghY3VycmVu
dERpbWVuc2lvbikKLSAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBOU0hlaWdodChvbGRJ
bnNwZWN0b3JWaWV3RnJhbWUpOwotCi0gICAgICAgIENHRmxvYXQgcGFyZW50SGVpZ2h0ID0gTlNI
ZWlnaHQocGFyZW50Qm91bmRzKTsKLSAgICAgICAgQ0dGbG9hdCBpbnNwZWN0b3JIZWlnaHQgPSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVp
Z2h0KGN1cnJlbnREaW1lbnNpb24sIHBhcmVudEhlaWdodCk7Ci0KLSAgICAgICAgLy8gUHJlc2Vy
dmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVkIHZpZXcgc28gYmFubmVycyBpbiBT
YWZhcmkgc3RpbGwgd29yay4KLSAgICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVj
dCgwLCBpbnNwZWN0b3JIZWlnaHQsIE5TV2lkdGgocGFyZW50Qm91bmRzKSwgaW5zcGVjdGVkVmll
d1RvcCAtIGluc3BlY3RvckhlaWdodCk7Ci0gICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9
IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRWaWV3RnJhbWUpLCBpbnNwZWN0b3JI
ZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRl
OjpSaWdodDogewotICAgICAgICBpZiAoIWN1cnJlbnREaW1lbnNpb24pCi0gICAgICAgICAgICBj
dXJyZW50RGltZW5zaW9uID0gTlNXaWR0aChvbGRJbnNwZWN0b3JWaWV3RnJhbWUpOwotCi0gICAg
ICAgIENHRmxvYXQgcGFyZW50V2lkdGggPSBOU1dpZHRoKHBhcmVudEJvdW5kcyk7Ci0gICAgICAg
IENHRmxvYXQgaW5zcGVjdG9yV2lkdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpj
b25zdHJhaW5lZEF0dGFjaGVkV2luZG93V2lkdGgoY3VycmVudERpbWVuc2lvbiwgcGFyZW50V2lk
dGgpOwotCi0gICAgICAgIC8vIFByZXNlcnZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGluc3Bl
Y3RlZCB2aWV3IHNvIGJhbm5lcnMgaW4gU2FmYXJpIHN0aWxsIHdvcmsuIEJ1dCBkb24ndCB1c2Ug
dGhhdAotICAgICAgICAvLyB0b3AgcG9zaXRpb24gZm9yIHRoZSBpbnNwZWN0b3IgdmlldyBzaW5j
ZSB0aGUgYmFubmVycyBvbmx5IHN0cmV0Y2ggYXMgd2lkZSBhcyB0aGUgaW5zcGVjdGVkIHZpZXcu
Ci0gICAgICAgIGluc3BlY3RlZFZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgcGFyZW50V2lk
dGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1RvcCk7Ci0gICAgICAgIG5ld0luc3Bl
Y3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QocGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwg
MCwgaW5zcGVjdG9yV2lkdGgsIE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOwotCi0gICAgICAgIGlm
IChOU1dpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsKLSAg
ICAgICAgICAgIE5TUmVjdCBjb250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1cGVy
dmlldyBjb252ZXJ0UmVjdDppbnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJvbVZp
ZXc6bmlsXTsKLSAgICAgICAgICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJzZWN0
aW9uUmVjdChuZXdJbnNwZWN0b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpM
ZWZ0OiB7Ci0gICAgICAgIGlmICghY3VycmVudERpbWVuc2lvbikKLSAgICAgICAgICAgIGN1cnJl
bnREaW1lbnNpb24gPSBOU1dpZHRoKG9sZEluc3BlY3RvclZpZXdGcmFtZSk7Ci0KLSAgICAgICAg
Q0dGbG9hdCBwYXJlbnRXaWR0aCA9IE5TV2lkdGgocGFyZW50Qm91bmRzKTsKLSAgICAgICAgQ0dG
bG9hdCBpbnNwZWN0b3JXaWR0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0
cmFpbmVkQXR0YWNoZWRXaW5kb3dXaWR0aChjdXJyZW50RGltZW5zaW9uLCBwYXJlbnRXaWR0aCk7
Ci0KLSAgICAgICAgLy8gUHJlc2VydmUgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgaW5zcGVjdGVk
IHZpZXcgc28gYmFubmVycyBpbiBTYWZhcmkgc3RpbGwgd29yay4gQnV0IGRvbid0IHVzZSB0aGF0
Ci0gICAgICAgIC8vIHRvcCBwb3NpdGlvbiBmb3IgdGhlIGluc3BlY3RvciB2aWV3IHNpbmNlIHRo
ZSBiYW5uZXJzIG9ubHkgc3RyZXRjaCBhcyB3aWRlIGFzIHRoZSBpbnNwZWN0ZWQgdmlldy4KLSAg
ICAgICAgaW5zcGVjdGVkVmlld0ZyYW1lID0gTlNNYWtlUmVjdChpbnNwZWN0b3JXaWR0aCwgMCwg
cGFyZW50V2lkdGggLSBpbnNwZWN0b3JXaWR0aCwgaW5zcGVjdGVkVmlld1RvcCk7Ci0gICAgICAg
IG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgaW5zcGVjdG9yV2lkdGgs
IE5TSGVpZ2h0KHBhcmVudEJvdW5kcykpOwotCi0gICAgICAgIGlmIChOU1dpbmRvdyAqaW5zcGVj
dG9yV2luZG93ID0gaW5zcGVjdG9yVmlldy53aW5kb3cpIHsKLSAgICAgICAgICAgIE5TUmVjdCBj
b250ZW50TGF5b3V0UmVjdCA9IFtpbnNwZWN0ZWRWaWV3LnN1cGVydmlldyBjb252ZXJ0UmVjdDpp
bnNwZWN0b3JXaW5kb3cuY29udGVudExheW91dFJlY3QgZnJvbVZpZXc6bmlsXTsKLSAgICAgICAg
ICAgIG5ld0luc3BlY3RvclZpZXdGcmFtZSA9IE5TSW50ZXJzZWN0aW9uUmVjdChuZXdJbnNwZWN0
b3JWaWV3RnJhbWUsIGNvbnRlbnRMYXlvdXRSZWN0KTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgfQotCi0gICAgaWYgKE5TRXF1YWxSZWN0cyhvbGRJbnNwZWN0b3JWaWV3
RnJhbWUsIG5ld0luc3BlY3RvclZpZXdGcmFtZSkgJiYgTlNFcXVhbFJlY3RzKFtpbnNwZWN0ZWRW
aWV3IGZyYW1lXSwgaW5zcGVjdGVkVmlld0ZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyB0byBtYWtlIHN1cmUgdGhlIGxheWVycyBmb3IgYm90
aCB2aWV3cyByZXNpemUgaW4gc3luYy4KLSAgICBbaW5zcGVjdG9yVmlldy53aW5kb3cgZGlzYWJs
ZVNjcmVlblVwZGF0ZXNVbnRpbEZsdXNoXTsKLQotICAgIFtpbnNwZWN0b3JWaWV3IHNldEZyYW1l
Om5ld0luc3BlY3RvclZpZXdGcmFtZV07Ci0gICAgW2luc3BlY3RlZFZpZXcgc2V0RnJhbWU6aW5z
cGVjdGVkVmlld0ZyYW1lXTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICBOU1ZpZXcgKmluc3BlY3RlZFZpZXcg
PSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3KCk7Ci0gICAgTlNSZWN0
IGluc3BlY3RlZFZpZXdSZWN0ID0gW2luc3BlY3RlZFZpZXcgZnJhbWVdOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zcGVjdGVkVmlld1JlY3Quc2l6ZS5oZWlnaHQpOwotfQot
Ci11bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0
aCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVjdGVkUGFnZSgpLT5pbnNw
ZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIE5TUmVjdCBpbnNwZWN0ZWRWaWV3UmVjdCA9IFtp
bnNwZWN0ZWRWaWV3IGZyYW1lXTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
c3BlY3RlZFZpZXdSZWN0LnNpemUud2lkdGgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUF0dGFjaCgpCi17Ci0gICAgTlNWaWV3ICppbnNwZWN0ZWRWaWV3ID0gaW5zcGVj
dGVkUGFnZSgpLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwotICAgIFdLV2ViVmlldyAqaW5z
cGVjdG9yVmlldyA9IFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddOwotCi0gICAg
aWYgKG1faW5zcGVjdG9yV2luZG93KSB7Ci0gICAgICAgIFttX2luc3BlY3RvcldpbmRvdyBzZXRE
ZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9pbnNwZWN0b3JXaW5kb3cgY2xvc2VdOwotICAgICAg
ICBtX2luc3BlY3RvcldpbmRvdyA9IG5pbDsKLSAgICB9Ci0KLSAgICBbaW5zcGVjdG9yVmlldyBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLQotICAgIENHRmxvYXQgY3VycmVudERpbWVuc2lvbjsKLSAg
ICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpC
b3R0b206Ci0gICAgICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3
V2lkdGhTaXphYmxlIHwgTlNWaWV3TWF4WU1hcmdpbl07Ci0gICAgICAgIGN1cnJlbnREaW1lbnNp
b24gPSBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpSaWdodDoKLSAgICAg
ICAgW2luc3BlY3RvclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdIZWlnaHRTaXphYmxl
IHwgTlNWaWV3TWluWE1hcmdpbl07Ci0gICAgICAgIGN1cnJlbnREaW1lbnNpb24gPSBpbnNwZWN0
b3JQYWdlUHJlZmVyZW5jZXMoKS5pbnNwZWN0b3JBdHRhY2hlZFdpZHRoKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIFtpbnNwZWN0b3JW
aWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3SGVpZ2h0U2l6YWJsZSB8IE5TVmlld01heFhN
YXJnaW5dOwotICAgICAgICBjdXJyZW50RGltZW5zaW9uID0gaW5zcGVjdG9yUGFnZVByZWZlcmVu
Y2VzKCkuaW5zcGVjdG9yQXR0YWNoZWRXaWR0aCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBpbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoY3VycmVudERpbWVuc2lvbik7Ci0KLSAg
ICBbaW5zcGVjdGVkVmlldy5zdXBlcnZpZXcgYWRkU3VidmlldzppbnNwZWN0b3JWaWV3IHBvc2l0
aW9uZWQ6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOmluc3BlY3RlZFZpZXddOwotICAgIFtpbnNw
ZWN0b3JWaWV3LndpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6aW5zcGVjdG9yVmlld107Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKCkKLXsKLSAgICBOU1ZpZXcg
Kmluc3BlY3RlZFZpZXcgPSBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckF0dGFjaG1lbnRWaWV3
KCk7Ci0gICAgV0tXZWJWaWV3ICppbnNwZWN0b3JWaWV3ID0gW21faW5zcGVjdG9yVmlld0NvbnRy
b2xsZXIgd2ViVmlld107Ci0KLSAgICBbaW5zcGVjdG9yVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKLQotICAgIFtpbnNwZWN0b3JWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhT
aXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3
ZSBzaXplIHRoZSBpbnNwZWN0ZWQgdmlldydzIGZyYW1lIGFmdGVyIGRldGFjaGluZyBzbyB0aGF0
IGl0IHRha2VzIHVwIHRoZSBzcGFjZSB0aGF0IHRoZQotICAgIC8vIGF0dGFjaGVkIGluc3BlY3Rv
ciB1c2VkIHRvLiBQcmVzZXJ2ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBpbnNwZWN0ZWQgdmll
dyBzbyBiYW5uZXJzIGluIFNhZmFyaSBzdGlsbCB3b3JrLgotCi0gICAgaW5zcGVjdGVkVmlldy5m
cmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgTlNXaWR0aChpbnNwZWN0ZWRWaWV3LnN1cGVydmlldy5i
b3VuZHMpLCBOU01heFkoaW5zcGVjdGVkVmlldy5mcmFtZSkpOwotCi0gICAgLy8gUmV0dXJuIGVh
cmx5IGlmIHdlIGFyZSBub3QgdmlzaWJsZS4gVGhpcyBtZWFucyB0aGUgaW5zcGVjdG9yIHdhcyBj
bG9zZWQgd2hpbGUgYXR0YWNoZWQKLSAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW5k
IHNob3cgdGhlIGluc3BlY3RvciB3aW5kb3cuCi0gICAgaWYgKCFtX2lzVmlzaWJsZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgb3BlbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBp
ZiAoIW1faXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVjdGVkVmlld0Zy
YW1lRGlkQ2hhbmdlKGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBpZiAoIW1f
aXNBdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5zcGVjdGVkVmlld0ZyYW1lRGlk
Q2hhbmdlKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRT
aGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fc2hlZXRSZWN0ID0gcmVj
dDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TdGFydFdpbmRvd0RyYWco
KQotewotICAgIFttX2luc3BlY3RvclZpZXdDb250cm9sbGVyIHdlYlZpZXddLT5fcGFnZS0+c3Rh
cnRXaW5kb3dEcmFnKCk7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9y
UGFnZVVSTCgpCi17Ci0gICAgTlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBidW5kbGVXaXRo
SWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJJbnNwZWN0b3JVSSJdOwotICAgIGlmICghYnVuZGxl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBOU1N0cmluZyAqcGF0aCA9IFtidW5k
bGUgcGF0aEZvclJlc291cmNlOkAiTWFpbiIgb2ZUeXBlOkAiaHRtbCJdOwotICAgIEFTU0VSVChw
YXRoICYmIHBhdGgubGVuZ3RoKTsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rv
cnk6Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvclRlc3RQYWdlVVJMKCkKLXsKLSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxl
IGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0gICAg
aWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFdlIG1pZ2h0
IG5vdCBoYXZlIGEgVGVzdC5odG1sIGluIFByb2R1Y3Rpb24gYnVpbGRzLgotICAgIE5TU3RyaW5n
ICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJUZXN0IiBvZlR5cGU6QCJodG1sIl07
Ci0gICAgaWYgKCFwYXRoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4g
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVN0cmlu
ZzsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNlVVJMKCkKLXsK
LSAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAi
Y29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIE5TU3RyaW5nICpwYXRoID0gYnVuZGxlLnJlc291cmNlUGF0
aDsKLSAgICBBU1NFUlQocGF0aCAmJiBwYXRoLmxlbmd0aCk7Ci0KLSAgICByZXR1cm4gW05TVVJM
IGZpbGVVUkxXaXRoUGF0aDpwYXRoIGlzRGlyZWN0b3J5OllFU10uYWJzb2x1dGVTdHJpbmc7Ci19
Ci0KLXN0YXRpYyBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNpb25QbGlzdCgpCi17Ci0gICAgTlNT
dHJpbmcgKnN5c3RlbUxpYnJhcnlQYXRoID0gW05TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5E
b21haW5zKE5TTGlicmFyeURpcmVjdG9yeSwgTlNTeXN0ZW1Eb21haW5NYXNrLCBZRVMpIG9iamVj
dEF0SW5kZXg6MF07Ci0gICAgTlNTdHJpbmcgKnN5c3RlbVZlcnNpb25QbGlzdFBhdGggPSBbc3lz
dGVtTGlicmFyeVBhdGggc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiQ29yZVNlcnZp
Y2VzL1N5c3RlbVZlcnNpb24ucGxpc3QiXTsKLSAgICBOU0RpY3Rpb25hcnkgKnN5c3RlbVZlcnNp
b25JbmZvID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aENvbnRlbnRzT2ZGaWxlOnN5c3Rl
bVZlcnNpb25QbGlzdFBhdGhdOwotICAgIHJldHVybiBzeXN0ZW1WZXJzaW9uSW5mbzsKLX0KLQot
RGVidWdnYWJsZUluZm9EYXRhIFdlYkluc3BlY3RvclByb3h5OjppbmZvRm9yTG9jYWxEZWJ1Z2dh
YmxlKCkKLXsKLSAgICBOU0RpY3Rpb25hcnkgKnBsaXN0ID0gc3lzdGVtVmVyc2lvblBsaXN0KCk7
Ci0KLSAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgcmVzdWx0OwotICAgIHJlc3VsdC5kZWJ1Z2dhYmxl
VHlwZSA9IEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7Ci0gICAgcmVzdWx0LnRh
cmdldFBsYXRmb3JtTmFtZSA9ICJtYWNPUyJfczsKLSAgICByZXN1bHQudGFyZ2V0QnVpbGRWZXJz
aW9uID0gcGxpc3RbQCJQcm9kdWN0QnVpbGRWZXJzaW9uIl07Ci0gICAgcmVzdWx0LnRhcmdldFBy
b2R1Y3RWZXJzaW9uID0gcGxpc3RbQCJQcm9kdWN0VXNlclZpc2libGVWZXJzaW9uIl07Ci0gICAg
cmVzdWx0LnRhcmdldElzU2ltdWxhdG9yID0gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZWU1Y2RmZjM4YjNj
Nzc5YTI2MjczOGM0MTk1MTViNDQ1OGI5ZGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1JlbW90ZUlu
c3BlY3RvckNsaWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9y
Q2xpZW50LmgiCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkFQ
SURlYnVnZ2FibGVJbmZvLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuaCIK
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yUHJveHkgZmlu
YWwgOiBwdWJsaWMgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGllbnQgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6Ci0gICAgUmVtb3RlSW5zcGVjdG9yUHJveHkoUmVt
b3RlSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQsIENvbm5lY3Rpb25JRCBjb25uZWN0
aW9uSUQsIFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVn
Z2FibGVUeXBlKQotICAgICAgICA6IG1fcHJveHkoUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmNy
ZWF0ZSgpKQotICAgICAgICAsIG1faW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKLSAg
ICAgICAgLCBtX2Nvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpCi0gICAgICAgICwgbV90YXJnZXRJ
RCh0YXJnZXRJRCkKLSAgICAgICAgLCBtX2RlYnVnZ2FibGVUeXBlKGRlYnVnZ2FibGVUeXBlKQot
ICAgIHsKLSAgICAgICAgbV9wcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgIH0KLQotICAgIH5S
ZW1vdGVJbnNwZWN0b3JQcm94eSgpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zZXRDbGllbnQo
bnVsbHB0cik7Ci0gICAgICAgIG1fcHJveHktPmludmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGxvYWQoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIwNTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEgYWJvdXQgdGhlIGRl
YnVnIHRhcmdldC4KLSAgICAgICAgUmVmPEFQSTo6RGVidWdnYWJsZUluZm8+IGRlYnVnZ2FibGVJ
bmZvID0gQVBJOjpEZWJ1Z2dhYmxlSW5mbzo6Y3JlYXRlKERlYnVnZ2FibGVJbmZvRGF0YTo6ZW1w
dHkoKSk7Ci0gICAgICAgIGRlYnVnZ2FibGVJbmZvLT5zZXREZWJ1Z2dhYmxlVHlwZShtX2RlYnVn
Z2FibGVUeXBlKTsKLSAgICAgICAgbV9wcm94eS0+bG9hZChXVEZNb3ZlKGRlYnVnZ2FibGVJbmZv
KSwgbV9pbnNwZWN0b3JDbGllbnQuYmFja2VuZENvbW1hbmRzVVJMKCkpOwotICAgIH0KLQotICAg
IHZvaWQgc2hvdygpCi0gICAgewotICAgICAgICBtX3Byb3h5LT5zaG93KCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAg
IHsKLSAgICAgICAgbV9wcm94eS0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpOwotICAg
IH0KLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuc2VuZE1lc3NhZ2VU
b0JhY2tlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0SUQsIG1lc3NhZ2UpOwotICAgIH0KLQot
ICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9p
bnNwZWN0b3JDbGllbnQuY2xvc2VGcm9tRnJvbnRlbmQobV9jb25uZWN0aW9uSUQsIG1fdGFyZ2V0
SUQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk+
IG1fcHJveHk7Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsK
LSAgICBDb25uZWN0aW9uSUQgbV9jb25uZWN0aW9uSUQ7Ci0gICAgVGFyZ2V0SUQgbV90YXJnZXRJ
RDsKLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIG1fZGVidWdnYWJsZVR5cGU7Ci19Owot
Ci1SZW1vdGVJbnNwZWN0b3JDbGllbnQ6OlJlbW90ZUluc3BlY3RvckNsaWVudChVUkwgdXJsLCBS
ZW1vdGVJbnNwZWN0b3JPYnNlcnZlciYgb2JzZXJ2ZXIpCi0gICAgOiBtX29ic2VydmVyKG9ic2Vy
dmVyKQotewotICAgIGlmICghdXJsLmhvc3QoKSB8fCAhdXJsLnBvcnQoKSkgewotICAgICAgICBM
T0dfRVJST1IoIkludmFsaWQgaW5zcGVjdG9yIHVybDogJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb25JRCA9
IGNvbm5lY3RJbmV0KHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLnBvcnQoKS52YWx1ZSgp
KTsKLSAgICBpZiAoIW1fY29ubmVjdGlvbklEKSB7Ci0gICAgICAgIExPR19FUlJPUigiSW5zcGVj
dG9yIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0byAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXJ0SW5pdGlhbENvbW11
bmljYXRpb24oKTsKLX0KLQotUmVtb3RlSW5zcGVjdG9yQ2xpZW50Ojp+UmVtb3RlSW5zcGVjdG9y
Q2xpZW50KCkKLXsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRXZWJJbnNw
ZWN0b3JFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOwotICAgIGF1dG8g
bWVzc2FnZSA9IGV2ZW50LnV0ZjgoKTsKLSAgICBzZW5kKG1fY29ubmVjdGlvbklELnZhbHVlKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1lc3NhZ2UuZGF0YSgpKSwgbWVzc2Fn
ZS5sZW5ndGgoKSk7Ci19Ci0KLUhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3RvckNvbm5lY3Rpb25DbGllbnQ6OkNhbGxIYW5kbGVyPiYgUmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpkaXNwYXRjaE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8U3Ry
aW5nLCBDYWxsSGFuZGxlcj4+IGRpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5k
bGVyPih7Ci0gICAgICAgIHsgIkJhY2tlbmRDb21tYW5kcyJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhh
bmRsZXI+KCZSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldEJhY2tlbmRDb21tYW5kcykgfSwKLSAg
ICAgICAgeyAiU2V0VGFyZ2V0TGlzdCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1v
dGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QpIH0sCi0gICAgICAgIHsgIlNlbmRNZXNz
YWdlVG9Gcm9udGVuZCJfcywgc3RhdGljX2Nhc3Q8Q2FsbEhhbmRsZXI+KCZSZW1vdGVJbnNwZWN0
b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCkgfSwKLSAgICB9KTsKLQotICAgIHJldHVy
biBkaXNwYXRjaE1hcDsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnN0YXJ0SW5p
dGlhbENvbW11bmljYXRpb24oKQotewotICAgIGF1dG8gZXZlbnQgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXBJbnNwZWN0b3JD
bGllbnQiX3MpOwotICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChldmVudC0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6Y29ubmVjdGlvbkNsb3NlZCgp
Ci17Ci0gICAgbV90YXJnZXRzLmNsZWFyKCk7Ci0gICAgbV9pbnNwZWN0b3JQcm94eU1hcC5jbGVh
cigpOwotICAgIG1fb2JzZXJ2ZXIuY29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Ci0gICAgbV9vYnNl
cnZlci50YXJnZXRMaXN0Q2hhbmdlZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9y
Q2xpZW50OjpkaWRDbG9zZShDb25uZWN0aW9uSUQpCi17Ci0gICAgY2FsbE9uTWFpblRocmVhZChb
dGhpc10gewotICAgICAgICBjb25uZWN0aW9uQ2xvc2VkKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0KENvbm5lY3Rpb25JRCBjb25uZWN0aW9uSUQs
IFRhcmdldElEIHRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVU
eXBlKQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5lbnN1cmUo
c3RkOjptYWtlX3BhaXIoY29ubmVjdGlvbklELCB0YXJnZXRJRCksIFt0aGlzLCBjb25uZWN0aW9u
SUQsIHRhcmdldElELCBkZWJ1Z2dhYmxlVHlwZV0gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxSZW1vdGVJbnNwZWN0b3JQcm94eT4oKnRoaXMsIGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRl
YnVnZ2FibGVUeXBlKTsKLSAgICB9KTsKLQotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c2hvdygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzZXR1cEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBzZXR1cEV2ZW50LT5zZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0dXAiX3MpOwot
ICAgIHNldHVwRXZlbnQtPnNldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywgY29ubmVjdGlvbklE
KTsKLSAgICBzZXR1cEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpOwot
ICAgIHNlbmRXZWJJbnNwZWN0b3JFdmVudChzZXR1cEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0K
LSAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5sb2FkKCk7Ci19Ci0KLXZvaWQgUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50OjpzZW5kTWVzc2FnZVRvQmFja2VuZChDb25uZWN0aW9uSUQgY29ubmVj
dGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IGF1dG8gYmFja2VuZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBiYWNrZW5k
RXZlbnQtPnNldFN0cmluZygiZXZlbnQiX3MsICJTZW5kTWVzc2FnZVRvQmFja2VuZCJfcyk7Ci0g
ICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25J
RCk7Ci0gICAgYmFja2VuZEV2ZW50LT5zZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQp
OwotICAgIGJhY2tlbmRFdmVudC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKTsKLSAg
ICBzZW5kV2ViSW5zcGVjdG9yRXZlbnQoYmFja2VuZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpjbG9zZUZyb21Gcm9udGVuZChDb25uZWN0
aW9uSUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCkKLXsKLSAgICBhdXRvIGNsb3Nl
ZEV2ZW50ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBjbG9zZWRFdmVudC0+c2V0U3Ry
aW5nKCJldmVudCJfcywgIkZyb250ZW5kRGlkQ2xvc2UiX3MpOwotICAgIGNsb3NlZEV2ZW50LT5z
ZXRJbnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCk7Ci0gICAgY2xvc2VkRXZl
bnQtPnNldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCk7Ci0gICAgc2VuZFdlYkluc3Bl
Y3RvckV2ZW50KGNsb3NlZEV2ZW50LT50b0pTT05TdHJpbmcoKSk7Ci0KLSAgICBtX2luc3BlY3Rv
clByb3h5TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb25uZWN0aW9uSUQsIHRhcmdldElEKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRCYWNrZW5kQ29tbWFuZHMoY29u
c3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZlbnQubWVzc2FnZSB8fCBldmVudC5tZXNz
YWdlLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2VuZENvbW1hbmRz
VVJMID0gbWFrZVN0cmluZygiZGF0YTp0ZXh0L2phdmFzY3JpcHQ7YmFzZTY0LCIsIGJhc2U2NEVu
Y29kZShldmVudC5tZXNzYWdlLT51dGY4KCkpKTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQotewotICAgIGlmICghZXZl
bnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVl
OjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBp
ZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OwotICAgIGZvciAoYXV0byYgaXRlbVZh
bHVlIDogKm1lc3NhZ2VBcnJheSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVt
T2JqZWN0OwotICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmplY3QoaXRlbU9iamVjdCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBUYXJnZXQgdGFyZ2V0OwotICAgICAgICBp
ZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCi0gICAg
ICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkK
LSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVy
bCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdl
dC50eXBlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHRhcmdldExpc3QuYXBw
ZW5kKFdURk1vdmUodGFyZ2V0KSk7Ci0gICAgfQotCi0gICAgYXV0byBjb25uZWN0aW9uSUQgPSBl
dmVudC5jb25uZWN0aW9uSUQudmFsdWUoKTsKLQotICAgIC8vIEZpbmQgY2xvc2VkIHRhcmdldHMg
dG8gcmVtb3ZlIHRoZW0uCi0gICAgVmVjdG9yPFRhcmdldElELCA0PiB0YXJnZXRzVG9SZW1vdmU7
Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbnNwZWN0b3JQcm94eU1hcC5rZXlzKCkpIHsKLSAg
ICAgICAgaWYgKHBhaXIuZmlyc3QgIT0gY29ubmVjdGlvbklEKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIHRh
cmdldCA6IHRhcmdldExpc3QpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQuaWQgPT0gcGFpci5z
ZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvdW5kKQot
ICAgICAgICAgICAgdGFyZ2V0c1RvUmVtb3ZlLmFwcGVuZChwYWlyLnNlY29uZCk7Ci0gICAgfQot
ICAgIGZvciAoYXV0byYgdGFyZ2V0SUQgOiB0YXJnZXRzVG9SZW1vdmUpCi0gICAgICAgIG1faW5z
cGVjdG9yUHJveHlNYXAucmVtb3ZlKHN0ZDo6bWFrZV9wYWlyKGNvbm5lY3Rpb25JRCwgdGFyZ2V0
SUQpKTsKLQotICAgIG1fdGFyZ2V0cy5zZXQoY29ubmVjdGlvbklELCBXVEZNb3ZlKHRhcmdldExp
c3QpKTsKLSAgICBtX29ic2VydmVyLnRhcmdldExpc3RDaGFuZ2VkKCp0aGlzKTsKLX0KLQotdm9p
ZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBFdmVu
dCYgZXZlbnQpCi17Ci0gICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50LnRhcmdl
dElEIHx8ICFldmVudC5tZXNzYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByb3h5
ID0gbV9pbnNwZWN0b3JQcm94eU1hcC5nZXQoc3RkOjptYWtlX3BhaXIoZXZlbnQuY29ubmVjdGlv
bklELnZhbHVlKCksIGV2ZW50LnRhcmdldElELnZhbHVlKCkpKTsKLSAgICBpZiAoIXByb3h5KSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcHJveHktPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChldmVudC5tZXNzYWdlLnZhbHVlKCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjUx
ZDYzZGVhMDZkOTUwOWQ2MjFhNGE4MzU0MGRhYTMzODY5ZWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUNvbnRyb2xsYWJsZVRhcmdl
dC5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25D
bGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OwotY2xhc3MgUmVtb3Rl
SW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3Rvck9ic2VydmVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5SZW1vdGVJbnNwZWN0b3JPYnNlcnZlcigpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCB0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJbnNwZWN0b3JDbGllbnQmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoUmVtb3RlSW5zcGVjdG9yQ2xpZW50Jikg
PSAwOwotfTsKLQotdXNpbmcgQ29ubmVjdGlvbklEID0gSW5zcGVjdG9yOjpDb25uZWN0aW9uSUQ7
Ci11c2luZyBUYXJnZXRJRCA9IEluc3BlY3Rvcjo6VGFyZ2V0SUQ7Ci0KLWNsYXNzIFJlbW90ZUlu
c3BlY3RvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNv
bm5lY3Rpb25DbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEKCk7Ci1wdWJsaWM6
Ci0gICAgUmVtb3RlSW5zcGVjdG9yQ2xpZW50KFVSTCwgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIm
KTsKLSAgICB+UmVtb3RlSW5zcGVjdG9yQ2xpZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHVwZGF0ZSB0aGUgbWVzc2FnaW5nIHByb3RvY29sIHRvIHVzZSBEZWJ1Z2dhYmxlVHlwZSBp
bnN0ZWFkIG9mIFN0cmluZyBmb3IgdGhlIHRhcmdldCB0eXBlLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYwNDcKLSAgICBzdHJ1Y3QgVGFyZ2V0IHsK
LSAgICAgICAgVGFyZ2V0SUQgaWQ7Ci0gICAgICAgIFN0cmluZyB0eXBlOwotICAgICAgICBTdHJp
bmcgbmFtZTsKLSAgICAgICAgU3RyaW5nIHVybDsKLSAgICB9OwotCi0gICAgY29uc3QgSGFzaE1h
cDxDb25uZWN0aW9uSUQsIFZlY3RvcjxUYXJnZXQ+PiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0czsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KLQotICAgIHZvaWQgaW5zcGVjdChD
b25uZWN0aW9uSUQsIFRhcmdldElELCBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlKTsKLSAgICB2
b2lkIHNlbmRNZXNzYWdlVG9CYWNrZW5kKENvbm5lY3Rpb25JRCwgVGFyZ2V0SUQsIGNvbnN0IFN0
cmluZyYpOwotICAgIHZvaWQgY2xvc2VGcm9tRnJvbnRlbmQoQ29ubmVjdGlvbklELCBUYXJnZXRJ
RCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFJlbW90ZUlu
c3BlY3RvckNsaWVudD47Ci0KLSAgICB2b2lkIHN0YXJ0SW5pdGlhbENvbW11bmljYXRpb24oKTsK
LSAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoKTsKLQotICAgIHZvaWQgc2V0VGFyZ2V0TGlzdChj
b25zdCBFdmVudCYpOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IEV2ZW50
Jik7Ci0gICAgdm9pZCBzZXRCYWNrZW5kQ29tbWFuZHMoY29uc3QgRXZlbnQmKTsKLQotICAgIHZv
aWQgZGlkQ2xvc2UoQ29ubmVjdGlvbklEKSBmaW5hbDsKLSAgICBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+JiBkaXNwYXRjaE1hcCgpIGZpbmFsOwotCi0gICAgdm9pZCBzZW5kV2ViSW5zcGVj
dG9yRXZlbnQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNV
Ukw7Ci0gICAgUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXImIG1fb2JzZXJ2ZXI7Ci0gICAgT3B0aW9u
YWw8Q29ubmVjdGlvbklEPiBtX2Nvbm5lY3Rpb25JRDsKLSAgICBIYXNoTWFwPENvbm5lY3Rpb25J
RCwgVmVjdG9yPFRhcmdldD4+IG1fdGFyZ2V0czsKLSAgICBIYXNoTWFwPHN0ZDo6cGFpcjxDb25u
ZWN0aW9uSUQsIFRhcmdldElEPiwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUluc3BlY3RvclByb3h5
Pj4gbV9pbnNwZWN0b3JQcm94eU1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmM0NTVkM2U2MjNkYTc0
MzI5NTNkZjFiMGY1ODQ1Njk0YjYxNmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlci5oIgotCi0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
Ci0KLSNpbmNsdWRlICJBUElMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJBUElOYXZpZ2F0aW9u
LmgiCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRXb3JsZC5oIgotI2luY2x1ZGUgIldlYlBhZ2VH
cm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlNjcmlwdE1l
c3NhZ2VIYW5kbGVyLmgiCi0jaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotY2xhc3MgU2NyaXB0TWVzc2FnZUNsaWVu
dCBmaW5hbCA6IHB1YmxpYyBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Q2xpZW50IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTY3JpcHRNZXNzYWdlQ2xpZW50
KFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciYgaW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVy
KQotICAgICAgICA6IG1faW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyKGluc3BlY3RvclByb3RvY29s
SGFuZGxlcikgeyB9Ci0KLSAgICB+U2NyaXB0TWVzc2FnZUNsaWVudCgpIHsgfQotCi0gICAgdm9p
ZCBkaWRQb3N0TWVzc2FnZShXZWJQYWdlUHJveHkmIHBhZ2UsIEZyYW1lSW5mb0RhdGEmJiwgV2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpIG92ZXJy
aWRlCi0gICAgewotICAgICAgICBhdXRvIHRva2VucyA9IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS50
b1N0cmluZygpLnNwbGl0KCI6Iik7Ci0gICAgICAgIGlmICh0b2tlbnMuc2l6ZSgpICE9IDMpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVVJMIHJlcXVlc3RVUkwgeyB7IH0sIHBhZ2Uu
cGFnZUxvYWRTdGF0ZSgpLnVybCgpIH07Ci0gICAgICAgIG1faW5zcGVjdG9yUHJvdG9jb2xIYW5k
bGVyLmluc3BlY3QocmVxdWVzdFVSTC5ob3N0QW5kUG9ydCgpLCB0b2tlbnNbMF0udG9VSW50U3Ry
aWN0KCksIHRva2Vuc1sxXS50b1VJbnRTdHJpY3QoKSwgdG9rZW5zWzJdKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgUmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyJiBtX2luc3BlY3RvclBy
b3RvY29sSGFuZGxlcjsKLX07Ci0KLWNsYXNzIExvYWRlckNsaWVudCBmaW5hbCA6IHB1YmxpYyBB
UEk6OkxvYWRlckNsaWVudCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgTG9hZGVyQ2xpZW50KEZ1bmN0aW9uPHZvaWQoKT4mJiBsb2FkZWRDYWxsYmFjaykKLSAg
ICAgICAgOiBtX2xvYWRlZENhbGxiYWNrIHsgV1RGTW92ZShsb2FkZWRDYWxsYmFjaykgfSB7IH0K
LQotICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
V2ViS2l0OjpXZWJGcmFtZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uKiwgQVBJOjpPYmplY3QqKSBm
aW5hbAotICAgIHsKLSAgICAgICAgbV9sb2FkZWRDYWxsYmFjaygpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fbG9hZGVkQ2FsbGJhY2s7Ci19OwotCi1zdGF0aWMg
T3B0aW9uYWw8SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZT4gcGFyc2VEZWJ1Z2dhYmxlVHlwZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBkZWJ1Z2dhYmxlVHlwZVN0cmluZykKLXsKLSAgICBpZiAo
ZGVidWdnYWJsZVR5cGVTdHJpbmcgPT0gImphdmFzY3JpcHQiX3MpCi0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlOjpKYXZhU2NyaXB0OwotICAgIGlmIChkZWJ1Z2dhYmxl
VHlwZVN0cmluZyA9PSAicGFnZSJfcykKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdn
YWJsZVR5cGU6OlBhZ2U7Ci0gICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJzZXJ2aWNl
LXdvcmtlciJfcykKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OlNl
cnZpY2VXb3JrZXI7Ci0gICAgaWYgKGRlYnVnZ2FibGVUeXBlU3RyaW5nID09ICJ3ZWItcGFnZSJf
cykKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6RGVidWdnYWJsZVR5cGU6OldlYlBhZ2U7Ci0K
LSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3Rv
Y29sSGFuZGxlcjo6aW5zcGVjdChjb25zdCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9u
SUQgY29ubmVjdGlvbklELCBUYXJnZXRJRCB0YXJnZXRJRCwgY29uc3QgU3RyaW5nJiB0eXBlKQot
ewotICAgIGF1dG8gZGVidWdnYWJsZVR5cGUgPSBwYXJzZURlYnVnZ2FibGVUeXBlRnJvbVN0cmlu
Zyh0eXBlKTsKLSAgICBpZiAoIWRlYnVnZ2FibGVUeXBlKSB7Ci0gICAgICAgIExPR19FUlJPUigi
VW5rbm93biBkZWJ1Z2dhYmxlIHR5cGU6IFwiJXNcIiIsIHR5cGUudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9pbnNwZWN0b3JDbGllbnQpCi0gICAg
ICAgIG1faW5zcGVjdG9yQ2xpZW50LT5pbnNwZWN0KGNvbm5lY3Rpb25JRCwgdGFyZ2V0SUQsIGRl
YnVnZ2FibGVUeXBlLnZhbHVlKCkpOwotfQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29s
SGFuZGxlcjo6cnVuU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0KQotewotICAgIG1fcGFnZS5y
dW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoeyBzY3JpcHQsIGZhbHNlLCBXVEY6Om51bGxvcHQsIGZh
bHNlIH0sIAotICAgICAgICBbXShBUEk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSosIE9wdGlvbmFs
PFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHM+IGV4Y2VwdGlvbkRldGFpbHMsIENhbGxiYWNrQmFz
ZTo6RXJyb3IpIHsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXRhaWxzKQotICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiRXhjZXB0aW9uIHJ1bm5pbmcgc2NyaXB0IFwiJXNcIiIsIGV4Y2Vw
dGlvbkRldGFpbHMtPm1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyOjp0YXJnZXRMaXN0Q2hhbmdlZChSZW1vdGVJ
bnNwZWN0b3JDbGllbnQmIGNsaWVudCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGh0bWw7Ci0gICAg
aWYgKGNsaWVudC50YXJnZXRzKCkuaXNFbXB0eSgpKQotICAgICAgICBodG1sLmFwcGVuZCgiPHA+
Tm8gdGFyZ2V0cyBmb3VuZDwvcD4iX3MpOwotICAgIGVsc2UgewotICAgICAgICBodG1sLmFwcGVu
ZCgiPHRhYmxlPiIpOwotICAgICAgICBmb3IgKGF1dG8mIGNvbm5lY3Rpb25JRCA6IGNsaWVudC50
YXJnZXRzKCkua2V5cygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHRhcmdldCA6IGNsaWVu
dC50YXJnZXRzKCkuZ2V0KGNvbm5lY3Rpb25JRCkpIHsKLSAgICAgICAgICAgICAgICBodG1sLmFw
cGVuZChtYWtlU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAiPHRib2R5Pjx0cj4iCi0gICAg
ICAgICAgICAgICAgICAgICI8dGQgY2xhc3M9XCJkYXRhXCI+PGRpdiBjbGFzcz1cInRhcmdldG5h
bWVcIj4iLCB0YXJnZXQubmFtZSwgIjwvZGl2PjxkaXYgY2xhc3M9XCJ0YXJnZXR1cmxcIj4iLCB0
YXJnZXQudXJsLCAiPC9kaXY+PC90ZD4iCi0gICAgICAgICAgICAgICAgICAgICI8dGQgY2xhc3M9
XCJpbnB1dFwiPjxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJJbnNwZWN0XCIgb25jbGlj
az1cIndpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLmluc3BlY3Rvci5wb3N0TWVzc2FnZShc
XCciLCBjb25uZWN0aW9uSUQsICI6IiwgdGFyZ2V0LmlkLCAiOiIsIHRhcmdldC50eXBlLCAiXFwn
KTtcIj48L3RkPiIKLSAgICAgICAgICAgICAgICAgICAgIjwvdHI+PC90Ym9keT4iCi0gICAgICAg
ICAgICAgICAgKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaHRtbC5hcHBl
bmQoIjwvdGFibGU+Iik7Ci0gICAgfQotICAgIG1fdGFyZ2V0TGlzdHNIdG1sID0gaHRtbC50b1N0
cmluZygpOwotICAgIGlmIChtX3BhZ2VMb2FkZWQpCi0gICAgICAgIHVwZGF0ZVRhcmdldExpc3Qo
KTsKLX0KLQotdm9pZCBSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhhbmRsZXI6OnVwZGF0ZVRhcmdl
dExpc3QoKQotewotICAgIGlmICghbV90YXJnZXRMaXN0c0h0bWwuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHJ1blNjcmlwdChtYWtlU3RyaW5nKCJ1cGRhdGVUYXJnZXRzKGAiLCBtX3RhcmdldExpc3Rz
SHRtbCwgImApOyIpKTsKLSAgICAgICAgbV90YXJnZXRMaXN0c0h0bWwgPSB7IH07Ci0gICAgfQot
fQotCi12b2lkIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlcjo6cGxhdGZvcm1TdGFydFRh
c2soV2ViUGFnZVByb3h5JiBwYWdlUHJveHksIFdlYlVSTFNjaGVtZVRhc2smIHRhc2spCi17Ci0g
ICAgYXV0byYgcmVxdWVzdFVSTCA9IHRhc2sucmVxdWVzdCgpLnVybCgpOwotCi0gICAgLy8gRGVz
dHJveSB0aGUgY2xpZW50IGJlZm9yZSBjcmVhdGluZyBhIG5ldyBjb25uZWN0aW9uIHNvIGl0IGNh
biBjb25uZWN0IHRvIHRoZSBzYW1lIHBvcnQKLSAgICBtX2luc3BlY3RvckNsaWVudCA9IG51bGxw
dHI7Ci0gICAgbV9pbnNwZWN0b3JDbGllbnQgPSBtYWtlVW5pcXVlPFJlbW90ZUluc3BlY3RvckNs
aWVudD4ocmVxdWVzdFVSTCwgKnRoaXMpOwotCi0gICAgLy8gU2V0dXAgdGFyZ2V0IHBvc3RNZXNz
YWdlIGxpc3RlbmVyCi0gICAgYXV0byBoYW5kbGVyID0gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6
OmNyZWF0ZShtYWtlVW5pcXVlPFNjcmlwdE1lc3NhZ2VDbGllbnQ+KCp0aGlzKSwgImluc3BlY3Rv
ciIsIEFQSTo6VXNlckNvbnRlbnRXb3JsZDo6bm9ybWFsV29ybGQoKSk7Ci0gICAgcGFnZVByb3h5
LnBhZ2VHcm91cCgpLnVzZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHRNZXNzYWdl
SGFuZGxlcihoYW5kbGVyLmdldCgpKTsKLQotICAgIC8vIFNldHVwIGxvYWRlciBjbGllbnQgdG8g
Z2V0IG5vdGlmaWVkIG9mIHBhZ2UgbG9hZAotICAgIG1fcGFnZS5zZXRMb2FkZXJDbGllbnQobWFr
ZVVuaXF1ZTxMb2FkZXJDbGllbnQ+KFt0aGlzXSB7Ci0gICAgICAgIG1fcGFnZUxvYWRlZCA9IHRy
dWU7Ci0gICAgICAgIHVwZGF0ZVRhcmdldExpc3QoKTsKLSAgICB9KSk7Ci0gICAgbV9wYWdlTG9h
ZGVkID0gZmFsc2U7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGh0bWxCdWlsZGVyOwotICAgIGh0bWxC
dWlsZGVyLmFwcGVuZCgKLSAgICAgICAgIjxodG1sPjxoZWFkPjx0aXRsZT5SZW1vdGUgSW5zcGVj
dG9yPC90aXRsZT4iCi0gICAgICAgICI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIg
Y29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIC8+IgotICAgICAgICAiPHN0eWxl
PiIKLSAgICAgICAgIiAgaDEgeyBjb2xvcjogI2JhYmRiNjsgdGV4dC1zaGFkb3c6IDAgMXB4IDAg
d2hpdGU7IG1hcmdpbi1ib3R0b206IDA7IH0iCi0gICAgICAgICIgIGh0bWwgeyBmb250LWZhbWls
eTogLXdlYmtpdC1zeXN0ZW0tZm9udDsgZm9udC1zaXplOiAxMXB0OyBjb2xvcjogIzJlMzQzNjsg
cGFkZGluZzogMjBweCAyMHB4IDAgMjBweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmNDsgIgot
ICAgICAgICAiICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5l
YXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZWVlZWVjKSwgY29sb3It
c3RvcCgxLCAjZjZmNmY0KSk7IgotICAgICAgICAiICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAx
MDAlIDVlbTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgfSIKLSAgICAgICAgIiAgdGFi
bGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgdGFibGUtbGF5b3V0
OiBmaXhlZDsgfSIKLSAgICAgICAgIiAgdGFibGUsIHRkIHsgYm9yZGVyOiAxcHggc29saWQgI2Qz
ZDdjZjsgYm9yZGVyLWxlZnQ6IG5vbmU7IGJvcmRlci1yaWdodDogbm9uZTsgfSIKLSAgICAgICAg
IiAgcCB7IG1hcmdpbi1ib3R0b206IDMwcHg7IH0iCi0gICAgICAgICIgIHRkIHsgcGFkZGluZzog
MTVweDsgfSIKLSAgICAgICAgIiAgdGQuZGF0YSB7IHdpZHRoOiAyMDBweDsgfSIKLSAgICAgICAg
IiAgLnRhcmdldG5hbWUgeyBmb250LXdlaWdodDogYm9sZDsgb3ZlcmZsb3c6IGhpZGRlbjsgd2hp
dGUtc3BhY2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgfSIKLSAgICAgICAgIiAg
LnRhcmdldHVybCB7IGNvbG9yOiAjYmFiZGI2OyBiYWNrZ3JvdW5kOiAjZWVlOyB3b3JkLXdyYXA6
IGJyZWFrLXdvcmQ7IG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7IH0iCi0gICAgICAgICIgIHRk
LmlucHV0IHsgd2lkdGg6IDY0cHg7IH0iCi0gICAgICAgICIgIGlucHV0IHsgd2lkdGg6IDEwMCU7
IHBhZGRpbmc6IDhweDsgfSIKLSAgICAgICAgIjwvc3R5bGU+IgotICAgICAgICAiPC9oZWFkPjxi
b2R5PjxoMT5JbnNwZWN0YWJsZSB0YXJnZXRzPC9oMT4iCi0gICAgICAgICI8ZGl2IGlkPVwidGFy
Z2V0bGlzdFwiPjxwPk5vIHRhcmdldHMgZm91bmQ8L3A+PC9kaXY+PC9ib2R5PiIKLSAgICAgICAg
IjxzY3JpcHQ+IgotICAgICAgICAiZnVuY3Rpb24gdXBkYXRlVGFyZ2V0cyhzdHIpIHsiCi0gICAg
ICAgICAgICAibGV0IHRhcmdldERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXRs
aXN0Jyk7IgotICAgICAgICAgICAgInRhcmdldERpdi5pbm5lckhUTUwgPSBzdHI7IgotICAgICAg
ICAifSIKLSAgICAgICAgIjwvc2NyaXB0PiIpOwotICAgIGh0bWxCdWlsZGVyLmFwcGVuZCgiPC9o
dG1sPiIpOwotCi0gICAgYXV0byBodG1sID0gaHRtbEJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7
Ci0gICAgYXV0byBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoaHRtbC5kYXRhKCksIGh0bWwu
bGVuZ3RoKCkpOwotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UocmVxdWVzdFVSTCwgInRl
eHQvaHRtbCJfcywgaHRtbC5sZW5ndGgoKSwgIlVURi04Il9zKTsKLSAgICB0YXNrLmRpZFJlY2Vp
dmVSZXNwb25zZShyZXNwb25zZSk7Ci0gICAgdGFzay5kaWRSZWNlaXZlRGF0YShXVEZNb3ZlKGRh
dGEpKTsKLSAgICB0YXNrLmRpZENvbXBsZXRlKFJlc291cmNlRXJyb3IoKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3RlSW5zcGVjdG9y
UHJvdG9jb2xIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDBmNjAwZWZkZWQ0ODc2YmVmNzA0ZmNiMjk3NDI0ZDg1YTIxODhlYzkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
c29ja2V0L1JlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiUmVtb3RlSW5zcGVjdG9yQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiV2ViVVJMU2NoZW1lSGFuZGxlci5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLWNs
YXNzIFVSTDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlVSTFNjaGVtZVRh
c2s7Ci0KLWNsYXNzIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlciBmaW5hbCA6IHB1Ymxp
YyBSZW1vdGVJbnNwZWN0b3JPYnNlcnZlciwgcHVibGljIFdlYlVSTFNjaGVtZUhhbmRsZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyPiBj
cmVhdGUoV2ViUGFnZVByb3h5JiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUlu
c3BlY3RvclByb3RvY29sSGFuZGxlcihwYWdlKSk7IH0KLQotICAgIHZvaWQgaW5zcGVjdChjb25z
dCBTdHJpbmcmIGhvc3RBbmRQb3J0LCBDb25uZWN0aW9uSUQsIFRhcmdldElELCBjb25zdCBTdHJp
bmcmIHR5cGUpOwotCi1wcml2YXRlOgotICAgIFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxl
cihXZWJQYWdlUHJveHkmIHBhZ2UpCi0gICAgICAgIDogbV9wYWdlKHBhZ2UpIHsgfQotCi0gICAg
Ly8gUmVtb3RlSW5zcGVjdG9yT2JzZXJ2ZXIKLSAgICB2b2lkIHRhcmdldExpc3RDaGFuZ2VkKFJl
bW90ZUluc3BlY3RvckNsaWVudCYpIGZpbmFsOwotICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChS
ZW1vdGVJbnNwZWN0b3JDbGllbnQmKSBmaW5hbCB7IH0KLQotICAgIC8vIFdlYlVSTFNjaGVtZUhh
bmRsZXIKLSAgICB2b2lkIHBsYXRmb3JtU3RhcnRUYXNrKFdlYlBhZ2VQcm94eSYsIFdlYlVSTFNj
aGVtZVRhc2smKSBmaW5hbDsKLSAgICB2b2lkIHBsYXRmb3JtU3RvcFRhc2soV2ViUGFnZVByb3h5
JiwgV2ViVVJMU2NoZW1lVGFzayYpIGZpbmFsIHsgfQotICAgIHZvaWQgcGxhdGZvcm1UYXNrQ29t
cGxldGVkKFdlYlVSTFNjaGVtZVRhc2smKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgdXBkYXRlVGFy
Z2V0TGlzdCgpOwotCi0gICAgdm9pZCBydW5TY3JpcHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW5zcGVjdG9yQ2xpZW50PiBtX2luc3BlY3RvckNsaWVudDsK
LSAgICBXZWJQYWdlUHJveHkmIG1fcGFnZTsKLSAgICBib29sIG1fcGFnZUxvYWRlZCB7IGZhbHNl
IH07Ci0gICAgU3RyaW5nIG1fdGFyZ2V0TGlzdHNIdG1sOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eVdpbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTBjMmI5NGYyZmY1NGE0ZjBk
YTllYWVlNDAxMDhjOTllYWEwYmJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9SZW1vdGVXZWJJbnNwZWN0
b3JQcm94eVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkuaCIKLQotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiQVBJ
UGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1
ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBMUENUU1RSIFJlbW90ZVdlYkluc3BlY3RvclByb3h5UG9pbnRl
clByb3AgPSBURVhUKCJSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIiKTsKLWNvbnN0IExQ
Q1dTVFIgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUgPSBMIlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Q2xhc3MiOwotCi1MUkVTVUxUIENBTExCQUNLIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5OjpXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCi17Ci0gICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkqPig6OkdldFByb3AoaHduZCwgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOwotCi0gICAgc3dpdGNoIChtc2cpIHsKLSAg
ICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIHJldHVybiBjbGllbnQtPnNpemVDaGFuZ2UoKTsKLSAg
ICBjYXNlIFdNX0NMT1NFOgotICAgICAgICByZXR1cm4gY2xpZW50LT5vbkNsb3NlKCk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIDo6RGVmV2luZG93
UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIEFUT00gcmVnaXN0
ZXJXaW5kb3dDbGFzcygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dD
bGFzcyA9IGZhbHNlOwotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9
IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gMDsKLSAgICB3
Y2V4LmxwZm5XbmRQcm9jICAgID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlduZFByb2M7Ci0g
ICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7
Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IDA7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9
IDA7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsK
LSAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0g
MDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlDbGFz
c05hbWU7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0KLSAgICBoYXZlUmVnaXN0ZXJl
ZFdpbmRvd0NsYXNzID0gdHJ1ZTsKLSAgICByZXR1cm4gOjpSZWdpc3RlckNsYXNzRXgoJndjZXgp
OwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzaXplQ2hhbmdlKCkKLXsK
LSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSRUNUIHJlY3Q7
Ci0gICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyZWN0KTsKLSAgICA6OlNl
dFdpbmRvd1BvcyhtX3dlYlZpZXctPndpbmRvdygpLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCBy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JE
RVIpOwotICAgIHJldHVybiAwOwotfQotCi1MUkVTVUxUIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpvbkNsb3NlKCkKLXsKLSAgICA6OlNob3dXaW5kb3cobV9mcm9udGVuZEhhbmRsZSwgU1dfSElE
RSk7Ci0gICAgZnJvbnRlbmREaWRDbG9zZSgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJQYWdl
UHJveHkqIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFn
ZUFuZFdpbmRvdygpCi17Ci0gICAgUmVmUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlcyA9
IFdlYlByZWZlcmVuY2VzOjpjcmVhdGUoU3RyaW5nKCksICJXZWJLaXQyLiIsICJXZWJLaXQyLiIp
OwotICAgIHByZWZlcmVuY2VzLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHModHJ1ZSk7
Ci0KLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgcHJlZmVyZW5jZXMtPnNldERldmVs
b3BlckV4dHJhc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJlZmVyZW5jZXMtPnNldExvZ3NQYWdlTWVz
c2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKHRydWUpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8
V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0b3JQ
YWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShudWxscHRyKSk7Ci0KLSAgICBhdXRvIHBhZ2VDb25m
aWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgcGFnZUNv
bmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9vbChpbnNwZWN0
b3JMZXZlbEZvclBhZ2UobnVsbHB0cikpKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJl
ZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQ
YWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKLQotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCg2
MCwgMjAwLCAxNTAwLCAxMDAwKTsKLSAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7Ci0gICAgbV9m
cm9udGVuZEhhbmRsZSA9IDo6Q3JlYXRlV2luZG93RXgoMCwgUmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCAwLCAwLCAwLCAwKTsKLQotICAg
IDo6U2V0UHJvcChtX2Zyb250ZW5kSGFuZGxlLCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eVBvaW50
ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwotICAgIFNob3dXaW5kb3co
bV9mcm9udGVuZEhhbmRsZSwgU1dfU0hPVyk7Ci0KLSAgICBSRUNUIHI7Ci0gICAgOjpHZXRDbGll
bnRSZWN0KG1fZnJvbnRlbmRIYW5kbGUsICZyKTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUociwgcGFnZUNvbmZpZ3VyYXRpb24sIG1fZnJvbnRlbmRIYW5kbGUpOwotICAgIHJldHVy
biBtX3dlYlZpZXctPnBhZ2UoKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1SZXNldFN0YXRlKCkgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUJyaW5nVG9Gcm9udCgpIHsgfQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpIHsg
fQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci12b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldFNoZWV0UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KLXZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkgeyB9Ci12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW5Jbk5ld1RhYihjb25zdCBT
dHJpbmcmKSB7IH0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2hvd0Nl
cnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIHsgfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93
KCkKLXsKLSAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEhhbmRsZSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYkluc3BlY3RvclByb3h5V2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRlYWM5NzMxNzk2ZjI1NWExMGJj
ZTg0N2Q2YjBiZjZhNzk3OTA3Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViSW5zcGVjdG9yUHJveHlX
aW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgotCi0jaW5j
bHVkZSAiQVBJTmF2aWdhdGlvbi5oIgotI2luY2x1ZGUgIkFQSU5hdmlnYXRpb25BY3Rpb24uaCIK
LSNpbmNsdWRlICJBUElQYWdlQ29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgIlBhZ2VDbGllbnRJ
bXBsLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCi0jaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
V2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgotI2luY2x1ZGUg
IldlYlZpZXcuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVX
aW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0
L1dLUGFnZS5oPgotCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPHd0Zi9jZi9DRlVSTEV4dHJhcy5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgTFBDV1NUUiBX
ZWJJbnNwZWN0b3JQcm94eVBvaW50ZXJQcm9wID0gTCJXZWJJbnNwZWN0b3JQcm94eVBvaW50ZXIi
Owotc3RhdGljIGNvbnN0IExQQ1dTVFIgV2ViSW5zcGVjdG9yUHJveHlDbGFzc05hbWUgPSBMIldl
Ykluc3BlY3RvclByb3h5Q2xhc3MiOwotCi1zdHJ1Y3QgSW5zcGVjdGVkV2luZG93SW5mbyB7Ci0g
ICAgaW50IGxlZnQ7Ci0gICAgaW50IHRvcDsKLSAgICBpbnQgdmlld1dpZHRoOwotICAgIGludCB2
aWV3SGVpZ2h0OwotICAgIGludCBwYXJlbnRXaWR0aDsKLSAgICBpbnQgcGFyZW50SGVpZ2h0Owot
fTsKLQotc3RhdGljIEluc3BlY3RlZFdpbmRvd0luZm8gZ2V0SW5zcGVjdGVkV2luZG93SW5mbyhI
V05EIGluc3BlY3RlZFdpbmRvdywgSFdORCBwYXJlbnRXaW5kb3cpCi17Ci0gICAgUkVDVCByZWN0
OwotICAgIDo6R2V0Q2xpZW50UmVjdChpbnNwZWN0ZWRXaW5kb3csICZyZWN0KTsKLSAgICA6Ok1h
cFdpbmRvd1BvaW50cyhpbnNwZWN0ZWRXaW5kb3csIHBhcmVudFdpbmRvdywgKExQUE9JTlQpJnJl
Y3QsIDIpOwotCi0gICAgUkVDVCBwYXJlbnRSZWN0OwotICAgIDo6R2V0Q2xpZW50UmVjdChwYXJl
bnRXaW5kb3csICZwYXJlbnRSZWN0KTsKLSAgICByZXR1cm4geyByZWN0LmxlZnQsIHJlY3QudG9w
LCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBwYXJlbnRS
ZWN0LnJpZ2h0IC0gcGFyZW50UmVjdC5sZWZ0LCBwYXJlbnRSZWN0LmJvdHRvbSAtIHBhcmVudFJl
Y3QudG9wIH07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OndpbmRvd1JlY2VpdmVkTWVz
c2FnZShIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAg
c3dpdGNoIChtc2cpIHsKLSAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOiB7Ci0gICAgICAg
IGlmICghbV9pc0F0dGFjaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8g
d2luZG93UG9zID0gcmVpbnRlcnByZXRfY2FzdDxXSU5ET1dQT1MqPihsUGFyYW0pOwotCi0gICAg
ICAgIGlmICh3aW5kb3dQb3MtPmZsYWdzICYgU1dQX05PU0laRSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBIV05EIHBhcmVudCA9IEdldFBhcmVudChod25kKTsKLSAgICAgICAgUkVD
VCBwYXJlbnRSZWN0OwotICAgICAgICBHZXRDbGllbnRSZWN0KHBhcmVudCwgJnBhcmVudFJlY3Qp
OwotCi0gICAgICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKLSAgICAgICAgR2V0Q2xpZW50UmVjdCht
X2luc3BlY3RvclZpZXdXaW5kb3csICZpbnNwZWN0b3JSZWN0KTsKLQotICAgICAgICBzd2l0Y2gg
KG1fYXR0YWNobWVudFNpZGUpIHsKLSAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9t
OiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnNwZWN0b3JIZWlnaHQgPSBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0
KGluc3BlY3RvclJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3AsIHdpbmRvd1Bvcy0+Y3kp
OwotICAgICAgICAgICAgd2luZG93UG9zLT5jeSAtPSBpbnNwZWN0b3JIZWlnaHQ7Ci0gICAgICAg
ICAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd1Bvcy0+
eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9y
SGVpZ2h0LCBTV1BfTk9aT1JERVIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgY2FzZSBBdHRhY2htZW50
U2lkZTo6UmlnaHQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluc3BlY3RvcldpZHRoID0gV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdp
bmRvd1dpZHRoKGluc3BlY3RvclJlY3QucmlnaHQgLSBpbnNwZWN0b3JSZWN0LmxlZnQsIHdpbmRv
d1Bvcy0+Y3gpOwotICAgICAgICAgICAgd2luZG93UG9zLT5jeCAtPSBpbnNwZWN0b3JXaWR0aDsK
LSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgd2lu
ZG93UG9zLT54ICsgd2luZG93UG9zLT5jeCwgd2luZG93UG9zLT55LCBpbnNwZWN0b3JXaWR0aCwg
d2luZG93UG9zLT5jeSwgU1dQX05PWk9SREVSKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1MUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclByb3h5Ojp3bmRQcm9jKEhXTkQgaHdu
ZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgV2ViSW5z
cGVjdG9yUHJveHkqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkq
Pig6OkdldFByb3AoaHduZCwgV2ViSW5zcGVjdG9yUHJveHlQb2ludGVyUHJvcCkpOwotICAgIHN3
aXRjaCAobXNnKSB7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICA6OlNldFdpbmRvd1Bvcyhj
bGllbnQtPm1faW5zcGVjdG9yVmlld1dpbmRvdywgMCwgMCwgMCwgTE9XT1JEKGxQYXJhbSksIEhJ
V09SRChsUGFyYW0pLCBTV1BfTk9aT1JERVIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNl
IFdNX0NMT1NFOgotICAgICAgICBjbGllbnQtPmNsb3NlKCk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gOjpEZWZXaW5k
b3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwotfQotCi1ib29sIFdlYkluc3BlY3Rv
clByb3h5OjpyZWdpc3RlcldpbmRvd0NsYXNzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVn
aXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0KLSAgICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5k
b3dDbGFzcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dD
bGFzcyA9IHRydWU7Ci0KLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0gICAgd2NleC5jYlNpemUgPSBz
aXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2NleC5zdHlsZSA9IDA7Ci0gICAgd2NleC5scGZuV25k
UHJvYyA9IHduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhID0gMDsKLSAgICB3Y2V4LmNiV25k
RXh0cmEgPSAwOwotICAgIHdjZXguaEluc3RhbmNlID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUo
KTsKLSAgICB3Y2V4LmhJY29uID0gMDsKLSAgICB3Y2V4LmhDdXJzb3IgPSBMb2FkQ3Vyc29yKDAs
IElEQ19BUlJPVyk7Ci0gICAgd2NleC5oYnJCYWNrZ3JvdW5kID0gMDsKLSAgICB3Y2V4Lmxwc3pN
ZW51TmFtZSA9IDA7Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yUHJveHlD
bGFzc05hbWU7Ci0gICAgd2NleC5oSWNvblNtID0gMDsKLSAgICByZXR1cm4gOjpSZWdpc3RlckNs
YXNzRXgoJndjZXgpOwotfQotCi1zdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKFdLUGFnZVJlZiBwYWdlUmVmLCBXS05hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlv
bkFjdGlvblJlZiwgV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIGxpc3RlbmVyUmVmLCBXS1R5cGVS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgLy8gQWxsb3cgbm9uLW1haW4gZnJh
bWVzIHRvIG5hdmlnYXRlIGFueXdoZXJlLgotICAgIEFQSTo6RnJhbWVJbmZvKiBzb3VyY2VGcmFt
ZSA9IHRvSW1wbChuYXZpZ2F0aW9uQWN0aW9uUmVmKS0+c291cmNlRnJhbWUoKTsKLSAgICBpZiAo
c291cmNlRnJhbWUgJiYgIXNvdXJjZUZyYW1lLT5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgIHRv
SW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29uc3QgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViSW5zcGVjdG9yUHJveHkqPihjbGllbnRJbmZvKTsKLSAgICBBU1NFUlQod2Vi
SW5zcGVjdG9yUHJveHkpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qg
PSB0b0ltcGwobmF2aWdhdGlvbkFjdGlvblJlZiktPnJlcXVlc3QoKTsKLQotICAgIC8vIEFsbG93
IGxvYWRpbmcgb2YgdGhlIG1haW4gaW5zcGVjdG9yIGZpbGUuCi0gICAgaWYgKFdlYkluc3BlY3Rv
clByb3h5Ojppc01haW5PclRlc3RJbnNwZWN0b3JQYWdlKHJlcXVlc3QudXJsKCkpKSB7Ci0gICAg
ICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPnVzZSh7IH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gUHJldmVudCBldmVyeXRoaW5nIGVsc2UgZnJvbSBsb2FkaW5nIGluIHRoZSBp
bnNwZWN0b3IncyBwYWdlLgotICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmlnbm9yZSgpOwotCi0g
ICAgLy8gQW5kIGluc3RlYWQgbG9hZCBpdCBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgd2Vi
SW5zcGVjdG9yUHJveHktPmluc3BlY3RlZFBhZ2UoKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXF1
ZXN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlByb2Nlc3NEaWRDcmFzaChXS1BhZ2VSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIHdlYkluc3Bl
Y3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2ViSW5zcGVjdG9yUHJveHkqPihjb25zdF9jYXN0PHZv
aWQqPihjbGllbnRJbmZvKSk7Ci0gICAgQVNTRVJUKHdlYkluc3BlY3RvclByb3h5KTsKLSAgICB3
ZWJJbnNwZWN0b3JQcm94eS0+Y2xvc2VGb3JDcmFzaCgpOwotfQotCi1XZWJQYWdlUHJveHkqIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUZyb250ZW5kUGFnZSgpCi17Ci0gICAgQVNT
RVJUKGluc3BlY3RlZFBhZ2UoKSk7Ci0KLSAgICBhdXRvIHByZWZlcmVuY2VzID0gV2ViUHJlZmVy
ZW5jZXM6OmNyZWF0ZShTdHJpbmcoKSwgIldlYktpdDIuIiwgIldlYktpdDIuIik7Ci0jaWYgRU5B
QkxFKERFVkVMT1BFUl9NT0RFKQotICAgIC8vIEFsbG93IGRldmVsb3BlcnMgdG8gaW5zcGVjdCB0
aGUgV2ViIEluc3BlY3RvciBpbiBkZWJ1ZyBidWlsZHMgd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5n
cy4KLSAgICBwcmVmZXJlbmNlcy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLSAg
ICBwcmVmZXJlbmNlcy0+c2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQo
dHJ1ZSk7Ci0jZW5kaWYKLSAgICBwcmVmZXJlbmNlcy0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKHRydWUpOwotICAgIHByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdz
KHsgfSk7Ci0gICAgYXV0byBwYWdlR3JvdXAgPSBXZWJQYWdlR3JvdXA6OmNyZWF0ZShpbnNwZWN0
b3JQYWdlR3JvdXBJZGVudGlmaWVyRm9yUGFnZShpbnNwZWN0ZWRQYWdlKCkpKTsKLSAgICBhdXRv
IHBhZ2VDb25maWd1cmF0aW9uID0gQVBJOjpQYWdlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7Ci0g
ICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NQb29sKCZpbnNwZWN0b3JQcm9jZXNzUG9v
bChpbnNwZWN0aW9uTGV2ZWwoKSkpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJl
bmNlcyhwcmVmZXJlbmNlcy5wdHIoKSk7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VH
cm91cChwYWdlR3JvdXAucHRyKCkpOwotCi0gICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIG5h
dmlnYXRpb25DbGllbnQgPSB7Ci0gICAgICAgIHsgMCwgdGhpcyB9LAotICAgICAgICBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uLAotICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UKLSAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5
Rm9yUGx1Z2luTG9hZAotICAgICAgICBudWxscHRyLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2
aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lv
bmFsTmF2aWdhdGlvbgotICAgICAgICBudWxscHRyLCAvLyBkaWRDb21taXROYXZpZ2F0aW9uCi0g
ICAgICAgIG51bGxwdHIsIC8vIGRpZEZpbmlzaE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRmFpbE5hdmlnYXRpb24KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZEluU3ViZnJhbWUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkRmluaXNoRG9jdW1lbnRM
b2FkCi0gICAgICAgIG51bGxwdHIsIC8vIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24KLSAgICAg
ICAgbnVsbHB0ciwgLy8gcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UKLSAgICAgICAgbnVsbHB0
ciwgLy8gY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZQotICAgICAgICBudWxs
cHRyLCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLSAgICAgICAgd2ViUHJv
Y2Vzc0RpZENyYXNoLAotICAgICAgICBudWxscHRyLCAvLyBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5
Ci0KLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZQotICAgICAg
ICBudWxscHRyLCAvLyB3aWxsRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUKLSAgICAgICAgbnVsbHB0ciwgLy8gZGlkUmVtb3Zl
TmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdAotICAgIH07Ci0KLSAgICBSRUNUIHIgPSB7IDAsIDAs
IHN0YXRpY19jYXN0PExPTkc+KGluaXRpYWxXaW5kb3dXaWR0aCksIHN0YXRpY19jYXN0PExPTkc+
KGluaXRpYWxXaW5kb3dIZWlnaHQpIH07Ci0gICAgYXV0byBwYWdlID0gaW5zcGVjdGVkUGFnZSgp
OwotICAgIG1faW5zcGVjdGVkVmlld1dpbmRvdyA9IHBhZ2UtPnZpZXdXaWRnZXQoKTsKLSAgICBt
X2luc3BlY3RlZFZpZXdQYXJlbnRXaW5kb3cgPSA6OkdldFBhcmVudChtX2luc3BlY3RlZFZpZXdX
aW5kb3cpOwotICAgIGF1dG8gdmlldyA9IFdlYlZpZXc6OmNyZWF0ZShyLCBwYWdlQ29uZmlndXJh
dGlvbiwgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICBtX2luc3BlY3RvclZpZXcg
PSAmdmlldy5sZWFrUmVmKCk7Ci0gICAgYXV0byBpbnNwZWN0b3JQYWdlID0gbV9pbnNwZWN0b3JW
aWV3LT5wYWdlKCk7Ci0gICAgbV9pbnNwZWN0b3JWaWV3V2luZG93ID0gaW5zcGVjdG9yUGFnZS0+
dmlld1dpZGdldCgpOwotICAgIFdLUGFnZVNldFBhZ2VOYXZpZ2F0aW9uQ2xpZW50KHRvQVBJKGlu
c3BlY3RvclBhZ2UpLCAmbmF2aWdhdGlvbkNsaWVudC5iYXNlKTsKLQotICAgIHJldHVybiBpbnNw
ZWN0b3JQYWdlOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNsb3NlRnJv
bnRlbmRQYWdlQW5kV2luZG93KCkKLXsKLSAgICBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlQnJvYWRj
YXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkVmlld1dpbmRvdywgdGhpcyk7Ci0gICAg
bV9pbnNwZWN0b3JWaWV3ID0gbnVsbHB0cjsKLSAgICBtX2luc3BlY3RvclBhZ2UgPSBudWxscHRy
OwotICAgIGlmIChtX2luc3BlY3RvclZpZXdXaW5kb3cpIHsKLSAgICAgICAgOjpEZXN0cm95V2lu
ZG93KG1faW5zcGVjdG9yVmlld1dpbmRvdyk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlld1dpbmRv
dyA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChtX2luc3BlY3RvckRldGFjaFdpbmRvdykgewot
ICAgICAgICA6OlJlbW92ZVByb3AobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csIFdlYkluc3BlY3Rv
clByb3h5UG9pbnRlclByb3ApOwotICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3cpOwotICAgICAgICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IG51bGxwdHI7
Ci0gICAgfQotICAgIG1faW5zcGVjdGVkVmlld1dpbmRvdyA9IG51bGxwdHI7Ci0gICAgbV9pbnNw
ZWN0ZWRWaWV3UGFyZW50V2luZG93ID0gbnVsbHB0cjsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3Rv
clByb3h5OjppbnNwZWN0b3JQYWdlVVJMKCkKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWluUHRy
PENGVVJMUmVmPiBodG1sVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChX
ZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoIk1haW4iKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZT
VFIoIldlYkluc3BlY3RvclVJIikpKTsKLSAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoaHRtbFVS
TFJlZi5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiB7IH07Ci0jZW5kaWYKLX0KLQotU3RyaW5n
IFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JUZXN0UGFnZVVSTCgpCi17Ci0jaWYgVVNFKENG
KQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVD
b3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RSKCJUZXN0IiksIENG
U1RSKCJodG1sIiksIENGU1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7Ci0gICAgcmV0dXJuIENGVVJM
R2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2Vu
ZGlmCi19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpCi17
Ci0jaWYgVVNFKENGKQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYmFzZVVSTFJlZiA9IGFkb3B0
Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2ViS2l0QnVuZGxlKCksIENGU1RS
KCJXZWJJbnNwZWN0b3JVSSIpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIENGVVJM
R2V0U3RyaW5nKGJhc2VVUkxSZWYuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9OwotI2Vu
ZGlmCi19Ci0KLURlYnVnZ2FibGVJbmZvRGF0YSBXZWJJbnNwZWN0b3JQcm94eTo6aW5mb0Zvckxv
Y2FsRGVidWdnYWJsZSgpCi17Ci0gICAgLy8gRklYTUUgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIw
NTUzNz46IHRoaXMgc2hvdWxkIGluZmVyIG1vcmUgdXNlZnVsIGRhdGEuCi0gICAgcmV0dXJuIERl
YnVnZ2FibGVJbmZvRGF0YTo6ZW1wdHkoKTsKLX0KLQotdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93SGVpZ2h0KCkKLXsKLSAgICBSRUNUIHJlY3Q7Ci0g
ICAgOjpHZXRDbGllbnRSZWN0KG1faW5zcGVjdGVkVmlld1dpbmRvdywgJnJlY3QpOwotICAgIHJl
dHVybiByZWN0LmJvdHRvbSAtIHJlY3QudG9wOwotfQotCi11bnNpZ25lZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRXaW5kb3dXaWR0aCgpCi17Ci0gICAgUkVDVCByZWN0Owot
ICAgIDo6R2V0Q2xpZW50UmVjdChtX2luc3BlY3RlZFZpZXdXaW5kb3csICZyZWN0KTsKLSAgICBy
ZXR1cm4gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1BdHRhY2goKQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0
QXR0YWNoZWRTaXplID0gMzAwOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtQXR0
YWNoZWRXaWR0aCA9IDc1MDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bUF0dGFj
aGVkSGVpZ2h0ID0gMjUwOwotCi0gICAgaWYgKG1faW5zcGVjdG9yRGV0YWNoV2luZG93ICYmIDo6
R2V0UGFyZW50KG1faW5zcGVjdG9yVmlld1dpbmRvdykgPT0gbV9pbnNwZWN0b3JEZXRhY2hXaW5k
b3cpIHsKLSAgICAgICAgOjpTZXRQYXJlbnQobV9pbnNwZWN0b3JWaWV3V2luZG93LCBtX2luc3Bl
Y3RlZFZpZXdQYXJlbnRXaW5kb3cpOwotICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JE
ZXRhY2hXaW5kb3csIFNXX0hJREUpOwotICAgIH0KLQotICAgIFdlYkNvcmU6OldpbmRvd01lc3Nh
Z2VCcm9hZGNhc3Rlcjo6YWRkTGlzdGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsK
LQotICAgIGlmIChtX2F0dGFjaG1lbnRTaWRlID09IEF0dGFjaG1lbnRTaWRlOjpCb3R0b20pIHsK
LSAgICAgICAgdW5zaWduZWQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0ID0gcGxhdGZvcm1JbnNwZWN0
ZWRXaW5kb3dIZWlnaHQoKSAqIDMgLyA0OwotICAgICAgICBwbGF0Zm9ybVNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHN0ZDo6bWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgc3RkOjptaW4oZGVmYXVs
dEF0dGFjaGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkSGVpZ2h0KSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHVuc2lnbmVkIG1heGltdW1BdHRhY2hlZFdpZHRoID0gcGxhdGZvcm1JbnNwZWN0ZWRX
aW5kb3dXaWR0aCgpICogMyAvIDQ7Ci0gICAgICAgIHBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dX
aWR0aChzdGQ6Om1heChtaW5pbXVtQXR0YWNoZWRXaWR0aCwgc3RkOjptaW4oZGVmYXVsdEF0dGFj
aGVkU2l6ZSwgbWF4aW11bUF0dGFjaGVkV2lkdGgpKSk7Ci0gICAgfQotICAgIDo6U2hvd1dpbmRv
dyhtX2luc3BlY3RvclZpZXdXaW5kb3csIFNXX1NIT1cpOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybURldGFjaCgpCi17Ci0gICAgaWYgKCFpbnNwZWN0ZWRQYWdlKCktPmhh
c1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pbnNwZWN0
b3JEZXRhY2hXaW5kb3cpIHsKLSAgICAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwotICAgICAg
ICBtX2luc3BlY3RvckRldGFjaFdpbmRvdyA9IDo6Q3JlYXRlV2luZG93RXgoMCwgV2ViSW5zcGVj
dG9yUHJveHlDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgICAgICBD
V19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULCBpbml0aWFsV2luZG93V2lkdGgsIGluaXRpYWxX
aW5kb3dIZWlnaHQsCi0gICAgICAgICAgICAwLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgp
LCAwKTsKLSAgICAgICAgOjpTZXRQcm9wKG1faW5zcGVjdG9yRGV0YWNoV2luZG93LCBXZWJJbnNw
ZWN0b3JQcm94eVBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOwot
ICAgIH0KLQotICAgIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlz
dGVuZXIobV9pbnNwZWN0ZWRWaWV3V2luZG93LCB0aGlzKTsKLQotICAgIFJFQ1QgcmVjdDsKLSAg
ICA6OkdldENsaWVudFJlY3QobV9pbnNwZWN0b3JEZXRhY2hXaW5kb3csICZyZWN0KTsKLSAgICBh
dXRvIHdpbmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dp
bmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICA6OlNldFBhcmVudChtX2lu
c3BlY3RvclZpZXdXaW5kb3csIG1faW5zcGVjdG9yRGV0YWNoV2luZG93KTsKLSAgICA6OlNldFdp
bmRvd1BvcyhtX2luc3BlY3RvclZpZXdXaW5kb3csIDAsIDAsIDAsIHJlY3QucmlnaHQgLSByZWN0
LmxlZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7Ci0gICAgOjpTZXRX
aW5kb3dQb3MobV9pbnNwZWN0ZWRWaWV3V2luZG93LCAwLCB3aW5kb3dJbmZvLmxlZnQsIHdpbmRv
d0luZm8udG9wLCB3aW5kb3dJbmZvLnBhcmVudFdpZHRoIC0gd2luZG93SW5mby5sZWZ0LCB3aW5k
b3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0luZm8udG9wLCBTV1BfTk9aT1JERVIpOwotCi0g
ICAgaWYgKG1faXNWaXNpYmxlKQotICAgICAgICA6OlNob3dXaW5kb3cobV9pbnNwZWN0b3JEZXRh
Y2hXaW5kb3csIFNXX1NIT1cpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBhdXRvIHdp
bmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dpbmRvdywg
bV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3Bl
Y3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWln
aHQgLSBoZWlnaHQsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIGhl
aWdodCwgU1dQX05PWk9SREVSKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFZpZXdX
aW5kb3csIDAsIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby50b3AsIHdpbmRvd0luZm8ucGFy
ZW50V2lkdGggLSB3aW5kb3dJbmZvLmxlZnQsIHdpbmRvd0luZm8ucGFyZW50SGVpZ2h0IC0gd2lu
ZG93SW5mby50b3AsIFNXUF9OT1pPUkRFUik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKLXsKLSAgICBh
dXRvIHdpbmRvd0luZm8gPSBnZXRJbnNwZWN0ZWRXaW5kb3dJbmZvKG1faW5zcGVjdGVkVmlld1dp
bmRvdywgbV9pbnNwZWN0ZWRWaWV3UGFyZW50V2luZG93KTsKLSAgICA6OlNldFdpbmRvd1Bvcyht
X2luc3BlY3RvclZpZXdXaW5kb3csIDAsIHdpbmRvd0luZm8ucGFyZW50V2lkdGggLSB3aWR0aCwg
d2luZG93SW5mby50b3AsIHdpZHRoLCB3aW5kb3dJbmZvLnBhcmVudEhlaWdodCAtIHdpbmRvd0lu
Zm8udG9wLCBTV1BfTk9aT1JERVIpOwotICAgIDo6U2V0V2luZG93UG9zKG1faW5zcGVjdGVkVmll
d1dpbmRvdywgMCwgd2luZG93SW5mby5sZWZ0LCB3aW5kb3dJbmZvLnRvcCwgd2luZG93SW5mby5w
YXJlbnRXaWR0aCAtIHdpbmRvd0luZm8ubGVmdCwgd2luZG93SW5mby5wYXJlbnRIZWlnaHQgLSB3
aW5kb3dJbmZvLnRvcCwgU1dQX05PWk9SREVSKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bUlzRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUhpZGUoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtUmVzZXRT
dGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdJbnNwZWN0ZWRQYWdlVG9G
cm9udCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgLyogdXJsICov
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaEF2
YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCAvKiBhdmFpbGFibGUgKi8pCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVGcm9u
dGVuZFdpbmRvdygpCi17Ci0gICAgcGxhdGZvcm1EZXRhY2goKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZUZvckNyYXNoKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUludmFsaWRhdGUo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtU3RhcnRXaW5kb3dEcmFnKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA0ZTY1ZmEzZGFhZjJkZmIyMGM5NGU3MWY5NGM4YzJmYzZkNDIxMzk3Li44MGIyZTUwOTFj
NDNjNDhlYWY3ZGY4YmQ3M2Q1MDkxOGUzZTJhOGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ0MjksOCArNDQyOSw4IEBACiAJCUE1
MTNGNTNGMjE1NEE1Q0QwMDY2Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0lu
c3BlY3RvcldLV2ViVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3BlY3RvcldLV2ViVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE4QjVEMTFGRTFENTVCMDBGOUZBMjgg
LyogV0tJbnNwZWN0b3JXS1dlYlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3Bl
Y3RvcldLV2ViVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0MjkzQTIx
OTVBNDNDNjAwMjc4MkM3IC8qIFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVy
Lmg7IHBhdGggPSBpb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU0MjkzQTMxOTVBNDNDNjAwMjc4MkM3IC8q
IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGgg
PSBpb3MvV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1NDI5M0EyMTk1QTQzQzYwMDI3ODJDNyAvKiBXS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBNTQyOTNBMzE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNo
R2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3Rvck5v
ZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTU0M0UzMDUyMTVBRDEyRDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQzRTMwNjIxNUFE
MTJFMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5
Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUlu
c3BlY3RvclRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjY2MiwxMCAr
NjY2Miw2IEBACiAJCQkJRjREQjU0RTUyMzE5RTczMzAwOUUzMTU1IC8qIFdLSGlnaGxpZ2h0TG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCiAJCQkJOTMzREY4MkQxQjNCQzA5MDAwQUVB
OUUzIC8qIFdLSW1hZ2VQcmV2aWV3Vmlld0NvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzNERjgyRjFC
M0JDMEI0MDBBRUE5RTMgLyogV0tJbWFnZVByZXZpZXdWaWV3Q29udHJvbGxlci5tbSAqLywKLQkJ
CQkwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmgg
Ki8sCi0JCQkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5tbSAqLywKLQkJCQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKLQkJCQlBNTQyOTNBMzE5NUE0M0M2MDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCiAJ
CQkJMkRENUUxMjcyMTBBREM3QTAwREI2MDEyIC8qIFdLS2V5Ym9hcmRTY3JvbGxpbmdBbmltYXRv
ci5oICovLAogCQkJCTJERDVFMTI2MjEwQURDN0EwMERCNjAxMiAvKiBXS0tleWJvYXJkU2Nyb2xs
aW5nQW5pbWF0b3IubW0gKi8sCiAJCQkJMkRCOTQyOTcyMzRFN0E3RjAwRTc3NkFEIC8qIFdLTW91
c2VHZXN0dXJlUmVjb2duaXplci5oICovLApAQCAtNzk5MSw2ICs3OTg3LDk5IEBACiAJCQlwYXRo
ID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk5MUQ5NzBENDIz
REE2RDI1MDA1N0RCQzMgLyogSW5zcGVjdG9yICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk5MUQ5NzBENTIzREE2RDUwMDA1N0RCQzMgLyogQWdlbnRzICov
LAorCQkJCTkxRDk3MEQ3MjNEQTZENUIwMDU3REJDMyAvKiBpb3MgKi8sCisJCQkJOTFEOTcwRDYy
M0RBNkQ1NTAwNTdEQkMzIC8qIG1hYyAqLywKKwkJCQlBNUUzOTFGQjIxODNDMUU5MDBDOEZCMzEg
LyogSW5zcGVjdG9yVGFyZ2V0UHJveHkuY3BwICovLAorCQkJCUE1RTM5MUZDMjE4M0MxRTkwMEM4
RkIzMSAvKiBJbnNwZWN0b3JUYXJnZXRQcm94eS5oICovLAorCQkJCUE1NUJBODFCMUJBMjVCMUUw
MDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCisJCQkJQTU1QkE4MTkx
QkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCisJCQkJQTU1
QkE4MUExQkEyNUIxRTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2Vz
LmluICovLAorCQkJCTFDOEUyODMzMTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94
eS5jcHAgKi8sCisJCQkJMUM4RTI4MzIxMjc1RDczODAwQkM3QkQwIC8qIFdlYkluc3BlY3RvclBy
b3h5LmggKi8sCisJCQkJMUM3N0MxOTUxMjg4QTg3MjAwNkE3NDJGIC8qIFdlYkluc3BlY3RvclBy
b3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCUE1NUJBODI3MUJBMzhFMUUwMDdDRDMzRCAvKiBXZWJJ
bnNwZWN0b3JVdGlsaXRpZXMuY3BwICovLAorCQkJCUE1NUJBODI4MUJBMzhFMUUwMDdDRDMzRCAv
KiBXZWJJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLywKKwkJCQlBNUVDNkFEMjIxNTFCRDY5MDA2NzdE
MTcgLyogV2ViUGFnZURlYnVnZ2FibGUuY3BwICovLAorCQkJCUE1RUM2QUQzMjE1MUJENjkwMDY3
N0QxNyAvKiBXZWJQYWdlRGVidWdnYWJsZS5oICovLAorCQkJCUE1MTNGNTNGMjE1NEE1Q0QwMDY2
Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCisJCQkJQTUxM0Y1M0Uy
MTU0QTVDQzAwNjYyODQxIC8qIFdlYlBhZ2VJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCisJCQkp
OworCQkJcGF0aCA9IEluc3BlY3RvcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CisJCTkxRDk3MEQ1MjNEQTZENTAwMDU3REJDMyAvKiBBZ2VudHMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJKTsKKwkJCXBhdGggPSBBZ2VudHM7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBENjIzREE2RDU1MDA1N0RCQzMg
LyogbWFjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlB
NUQzNTA0RDFENzhGMEQyMDA1MTI0QTkgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNYWMubW0g
Ki8sCisJCQkJMUNBOEI5MzUxMjdDNzc0RTAwNTc2QzJCIC8qIFdlYkluc3BlY3RvclByb3h5TWFj
Lm1tICovLAorCQkJCTk5NEJBREYxMUY3RDc3RUEwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZpZXdD
b250cm9sbGVyLmggKi8sCisJCQkJOTk0QkFERjIxRjdENzdFQjAwQjU3MUU3IC8qIFdLSW5zcGVj
dG9yVmlld0NvbnRyb2xsZXIubW0gKi8sCisJCQkJQTUxOEI1RDAxRkUxRDU1QjAwRjlGQTI4IC8q
IFdLSW5zcGVjdG9yV0tXZWJWaWV3LmggKi8sCisJCQkJQTUxOEI1RDExRkUxRDU1QjAwRjlGQTI4
IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3Lm1tICovLAorCQkJKTsKKwkJCXBhdGggPSBtYWM7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBENzIzREE2RDVCMDA1N0RC
QzMgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRjNDNzI1OTE5NkY1RjY4MDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmgg
Ki8sCisJCQkJMEYzQzcyNTcxOTZGNUY1MDAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0
Vmlldy5tbSAqLywKKwkJCQlBNTQyOTNBMjE5NUE0M0M2MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JO
b2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCAqLywKKwkJCQlBNTQyOTNBMzE5NUE0M0M2MDAy
NzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIubW0gKi8sCisJ
CQkpOworCQkJcGF0aCA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJ
CTkxRDk3MEUwMjNEQTZGQjEwMDU3REJDMyAvKiBJbnNwZWN0b3IgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTkxRDk3MEU1MjNEQTcwNDcwMDU3REJDMyAv
KiBtYWMgKi8sCisJCQkJQTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3Bl
Y3RvclVJLmNwcCAqLywKKwkJCQlBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yVUkuaCAqLywKKwkJCQlBNTVCQTgxNDFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3Rl
V2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCisJCQkJMUM4RTI4MUYxMjc1RDE1NDAwQkM3
QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAgKi8sCisJCQkJMUM4RTI4MUUxMjc1RDE1NDAwQkM3QkQw
IC8qIFdlYkluc3BlY3Rvci5oICovLAorCQkJCTFDOEUyQTFDMTI3NzgzM0YwMEJDN0JEMCAvKiBX
ZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gKi8sCisJCQkJQkMxMTFBNTkxMTJGNEZCQjAwMzM3QkFC
IC8qIFdlYkluc3BlY3RvckNsaWVudC5jcHAgKi8sCisJCQkJQkMwMzJENkQxMEY0Mzc4RDAwNThD
MTVBIC8qIFdlYkluc3BlY3RvckNsaWVudC5oICovLAorCQkJCUE1NUJBODMyMUJBM0U2RkEwMDdD
RDMzRCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwICovLAorCQkJCUE1
NUJBODMzMUJBM0U2RkEwMDdDRDMzRCAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNo
ZXIuaCAqLywKKwkJCQlGRUU0M0ZEMDFFNjdBRkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50
ZXJydXB0RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJRkVFNDNGRDExRTY3QUZDNjAwNzdENkQxIC8q
IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuaCAqLywKKwkJCQlGRUU0M0ZEMjFFNjdB
RkM2MDA3N0Q2RDEgLyogV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5p
biAqLywKKwkJCQkxQzg5MUQ2MjE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuY3Bw
ICovLAorCQkJCTFDODkxRDYzMTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5oICov
LAorCQkJCTFDODkxRDY0MTlCMTI0RkYwMEJBNzlERCAvKiBXZWJJbnNwZWN0b3JVSS5tZXNzYWdl
cy5pbiAqLywKKwkJCQlBNTQzRTMwQTIxNUM4QTg0MDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5jcHAgKi8sCisJCQkJQTU0M0UzMDgyMTVDOEE4MzAwMjc5Q0Q5IC8qIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQuaCAqLywKKwkJCQlBNTQzRTMwOTIxNUM4QTgzMDAyNzlDRDkgLyogV2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwICovLAorCQkJCUE1NDNFMzBCMjE1QzhB
ODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oICovLAorCQkJ
CUE1NDNFMzA2MjE1QUQxMkUwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRl
bmRDaGFubmVsLmNwcCAqLywKKwkJCQlBNTQzRTMwNTIxNUFEMTJEMDAyNzlDRDkgLyogV2ViUGFn
ZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBJ
bnNwZWN0b3I7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk5MUQ5NzBFNTIz
REE3MDQ3MDA1N0RCQzMgLyogbWFjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQkxQzhFMkRBRDEyNzhDNUIyMDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yVUlN
YWMubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1hYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTkzOTI4OEUwMjE0MDRERjAwMEVCQkEzMyAvKiBJbmRleGVkREIgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtODIwNCw2ICs4MjkzLDcg
QEAKIAkJCQlCQzBFNUZDQjEyRDY5NkREMDAxMkE3MkEgLyogR2VvbG9jYXRpb24gKi8sCiAJCQkJ
MkQ3RTQzQkYyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVSAqLywKIAkJCQlCQzIwNEVERjExQzgzRTcy
MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGUgKi8sCisJCQkJOTFEOTcwRTAyM0RBNkZCMTAwNTdE
QkMzIC8qIEluc3BlY3RvciAqLywKIAkJCQkzM0QzQTNCRDEzMzk2MDk4MDA3MDlCRTQgLyogTWVk
aWFDYWNoZSAqLywKIAkJCQk0QTQxMEY0MTE5QUY3QjI3MDAyRUJBQjUgLyogTWVkaWFTdHJlYW0g
Ki8sCiAJCQkJNTEwNUIwRDIxNjJGN0E1RTAwRTI3NzA5IC8qIE5ldHdvcmsgKi8sCkBAIC04MjU0
LDggKzgzNDQsNiBAQAogCQkJCUJDMDMyRDZBMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJGcmFtZUxv
YWRlckNsaWVudC5oICovLAogCQkJCUJDMUJFMURGMTJENTRBNDEwMDA0QTIyOCAvKiBXZWJHZW9s
b2NhdGlvbkNsaWVudC5jcHAgKi8sCiAJCQkJQkMxQkUxREUxMkQ1NEE0MTAwMDRBMjI4IC8qIFdl
Ykdlb2xvY2F0aW9uQ2xpZW50LmggKi8sCi0JCQkJQkMxMTFBNTkxMTJGNEZCQjAwMzM3QkFCIC8q
IFdlYkluc3BlY3RvckNsaWVudC5jcHAgKi8sCi0JCQkJQkMwMzJENkQxMEY0Mzc4RDAwNThDMTVB
IC8qIFdlYkluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTUxM0ZGQjhFMjAxNDU5QzIwMDI1OTZF
QSAvKiBXZWJNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5jcHAgKi8sCiAJCQkJNTEzRkZCOEYy
MDE0NTlDMjAwMjU5NkVBIC8qIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyLmggKi8sCiAJ
CQkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAg
Ki8sCkBAIC04MzA0LDkgKzgzOTIsNiBAQAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAv
KiBGaW5kQ29udHJvbGxlci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQ
YWdlQmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJh
bm5lci5oICovLAotCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNw
ZWN0b3JVSS5jcHAgKi8sCi0JCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclVJLmggKi8sCi0JCQkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90
ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFG
MDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5
QTE4NjI3NUIzMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLAog
CQkJCTJEODE5QjlCMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yLm1lc3NhZ2VzLmluICovLApAQCAtODMyNiwxNyArODQxMSw2IEBACiAJCQkJMUE1QjFDNTMx
ODk4N0VERjAwNEZDRjlCIC8qIFdlYkRvY3VtZW50TG9hZGVyLmggKi8sCiAJCQkJQkMxMTFBREMx
MTJGNUI5MzAwMzM3QkFCIC8qIFdlYkZyYW1lLmNwcCAqLywKIAkJCQlCQzAzMkQ4OTEwRjQzN0Ew
MDA1OEMxNUEgLyogV2ViRnJhbWUuaCAqLywKLQkJCQkxQzhFMjgxRjEyNzVEMTU0MDBCQzdCRDAg
LyogV2ViSW5zcGVjdG9yLmNwcCAqLywKLQkJCQkxQzhFMjgxRTEyNzVEMTU0MDBCQzdCRDAgLyog
V2ViSW5zcGVjdG9yLmggKi8sCi0JCQkJMUM4RTJBMUMxMjc3ODMzRjAwQkM3QkQwIC8qIFdlYklu
c3BlY3Rvci5tZXNzYWdlcy5pbiAqLywKLQkJCQlBNTVCQTgzMjFCQTNFNkZBMDA3Q0QzM0QgLyog
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcCAqLywKLQkJCQlBNTVCQTgzMzFC
QTNFNkZBMDA3Q0QzM0QgLyogV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmggKi8s
Ci0JCQkJRkVFNDNGRDAxRTY3QUZDNjAwNzdENkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERp
c3BhdGNoZXIuY3BwICovLAotCQkJCUZFRTQzRkQxMUU2N0FGQzYwMDc3RDZEMSAvKiBXZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmggKi8sCi0JCQkJRkVFNDNGRDIxRTY3QUZDNjAwNzdE
NkQxIC8qIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4gKi8sCi0J
CQkJMUM4OTFENjIxOUIxMjRGRjAwQkE3OUREIC8qIFdlYkluc3BlY3RvclVJLmNwcCAqLywKLQkJ
CQkxQzg5MUQ2MzE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkuaCAqLywKLQkJCQkx
Qzg5MUQ2NDE5QjEyNEZGMDBCQTc5REQgLyogV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8s
CiAJCQkJQkM4NTdGODQxMkI4MkQwQjAwRURFQjJFIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyLmNwcCAqLywKIAkJCQlCQzg1N0Y4MzEyQjgyRDBCMDBFREVCMkUgLyogV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIuaCAqLywKIAkJCQlCQzk2M0Q2QTExM0REMTkyMDA1NzRCRTIgLyogV2Vi
UGFnZS5jcHAgKi8sCkBAIC04MzQ0LDEyICs4NDE4LDYgQEAKIAkJCQlDMENFNzI1ODEyNDdFNERB
MDBCQzBFQzQgLyogV2ViUGFnZS5tZXNzYWdlcy5pbiAqLywKIAkJCQlCQzdCNjIxNDEyQTQyMTlB
MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuY3BwICovLAogCQkJCUJDN0I2MjEzMTJBNDIx
OUEwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBQcm94eS5oICovLAotCQkJCUE1NDNFMzBBMjE1QzhB
ODQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmNwcCAqLywKLQkJCQlBNTQzRTMw
ODIxNUM4QTgzMDAyNzlDRDkgLyogV2ViUGFnZUluc3BlY3RvclRhcmdldC5oICovLAotCQkJCUE1
NDNFMzA5MjE1QzhBODMwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxl
ci5jcHAgKi8sCi0JCQkJQTU0M0UzMEIyMTVDOEE4NDAwMjc5Q0Q5IC8qIFdlYlBhZ2VJbnNwZWN0
b3JUYXJnZXRDb250cm9sbGVyLmggKi8sCi0JCQkJQTU0M0UzMDYyMTVBRDEyRTAwMjc5Q0Q5IC8q
IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3BwICovLAotCQkJCUE1NDNF
MzA1MjE1QUQxMkQwMDI3OUNEOSAvKiBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsLmggKi8sCiAJCQkJMkQ1QzlEMDMxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5
LmNwcCAqLywKIAkJCQkyRDVDOUQwNDE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXku
aCAqLywKIAkJCQlCQ0EwRUY3RTEyMzMxRTc4MDA3RDNDRkIgLyogV2ViVW5kb1N0ZXAuY3BwICov
LApAQCAtODM3Myw2ICs4NDQxLDcgQEAKIAkJCQkxQUI3RDRDNzEyODhBQTlBMDBDRkQwOEMgLyog
RG93bmxvYWRzICovLAogCQkJCTUxNUJFMTdCMUQ1NEVGNUEwMEREN0M2OCAvKiBHYW1lcGFkICov
LAogCQkJCTJEN0U0M0JCMjM3NTJDQzQwMEVBNUNBMCAvKiBHUFUgKi8sCisJCQkJOTFEOTcwRDQy
M0RBNkQyNTAwNTdEQkMzIC8qIEluc3BlY3RvciAqLywKIAkJCQkyREE5NDRBODE4ODRFOUFCMDBF
RDg2REIgLyogaW9zICovLAogCQkJCUJDMTExQjE4MTEyRjVGQjQwMDMzN0JBQiAvKiBMYXVuY2hl
ciAqLywKIAkJCQlCQ0NGMDg1QzExM0YzQjc1MDBDNjUwQzUgLyogbWFjICovLApAQCAtODQwMiw4
ICs4NDcxLDYgQEAKIAkJCQkyREQ1QTcyQTFFQkYwOUE3MDA5QkE1OTcgLyogSGlkZGVuUGFnZVRo
cm90dGxpbmdBdXRvSW5jcmVhc2VzQ291bnRlci5oICovLAogCQkJCTgzOUEyRjJGMUUyMDY3Mzkw
MDM5MDU3RSAvKiBIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5jcHAgKi8sCiAJ
CQkJODM5QTJGMzAxRTIwNjczOTAwMzkwNTdFIC8qIEhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyLmggKi8sCi0JCQkJQTVFMzkxRkIyMTgzQzFFOTAwQzhGQjMxIC8qIEluc3BlY3Rv
clRhcmdldFByb3h5LmNwcCAqLywKLQkJCQlBNUUzOTFGQzIxODNDMUU5MDBDOEZCMzEgLyogSW5z
cGVjdG9yVGFyZ2V0UHJveHkuaCAqLywKIAkJCQk1Q0VBQkEyQjIzMzMyNTE0MDA3OTc3OTcgLyog
TGVnYWN5R2xvYmFsU2V0dGluZ3MuY3BwICovLAogCQkJCTVDRUFCQTJBMjMzMzI0NzcwMDc5Nzc5
NyAvKiBMZWdhY3lHbG9iYWxTZXR0aW5ncy5oICovLAogCQkJCTMxNjA3RjM4MTk2MjcwMDIwMDlC
ODdEQSAvKiBMZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKQEAgLTg0MTksOSArODQ4Niw2
IEBACiAJCQkJODMwNDhBRTUxQUNBNDVEQzAwODJDODMyIC8qIFByb2Nlc3NUaHJvdHRsZXJDbGll
bnQuaCAqLywKIAkJCQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdl
UHJveHkuY3BwICovLAogCQkJCTQ2ODM1NjlBMjFFODFDQzcwMDZFMjdBMyAvKiBQcm92aXNpb25h
bFBhZ2VQcm94eS5oICovLAotCQkJCUE1NUJBODFCMUJBMjVCMUUwMDdDRDMzRCAvKiBSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAgKi8sCi0JCQkJQTU1QkE4MTkxQkEyNUIxRTAwN0NEMzNEIC8q
IFJlbW90ZVdlYkluc3BlY3RvclByb3h5LmggKi8sCi0JCQkJQTU1QkE4MUExQkEyNUIxRTAwN0NE
MzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUJDMTEx
QjA4MTEyRjVFM0MwMDMzN0JBQiAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLywKIAkJCQkx
QTMwMDY2QzExMTBGNEY3MDAzMTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovLAogCQkJ
CTVDQTk4NTQ5MjEwQkVCNUEwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nLmggKi8sCkBA
IC04NTAxLDExICs4NTY1LDYgQEAKIAkJCQlCQzFCRTFGMTEyRDU0REJEMDAwNEEyMjggLyogV2Vi
R2VvbG9jYXRpb25Qcm92aWRlci5jcHAgKi8sCiAJCQkJQkMxQkUxRjAxMkQ1NERCRDAwMDRBMjI4
IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLywKIAkJCQk1MUM4RTE5QjFGMjE2MTcyMDBC
RjczMUIgLyogV2ViSWNvbkRhdGFiYXNlLmggKi8sCi0JCQkJMUM4RTI4MzMxMjc1RDczODAwQkM3
QkQwIC8qIFdlYkluc3BlY3RvclByb3h5LmNwcCAqLywKLQkJCQkxQzhFMjgzMjEyNzVENzM4MDBC
QzdCRDAgLyogV2ViSW5zcGVjdG9yUHJveHkuaCAqLywKLQkJCQkxQzc3QzE5NTEyODhBODcyMDA2
QTc0MkYgLyogV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4gKi8sCi0JCQkJQTU1QkE4Mjcx
QkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5jcHAgKi8sCi0JCQkJQTU1
QkE4MjgxQkEzOEUxRTAwN0NEMzNEIC8qIFdlYkluc3BlY3RvclV0aWxpdGllcy5oICovLAogCQkJ
CUM5OEM0OEEzMUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIu
Y3BwICovLAogCQkJCUM5OEM0OEE0MUI2RkQ0QzMwMDE0NTEwMyAvKiBXZWJNZWRpYVNlc3Npb25G
b2N1c01hbmFnZXIuaCAqLywKIAkJCQlDOUMxODMzNzFCNzNGRDZBMDA3MDM2QTcgLyogV2ViTWVk
aWFTZXNzaW9uRm9jdXNNYW5hZ2VyQ2xpZW50LmNwcCAqLywKQEAgLTg1MTYsMTYgKzg1NzUsMTIg
QEAKIAkJCQk3Q0NDQzhGOTFBNUY1MEZEMDA4RkIwREEgLyogV2ViTmF2aWdhdGlvblN0YXRlLmgg
Ki8sCiAJCQkJQkMxREZFQTMxMkIzMUY4NzAwNURGNzMwIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExp
c3RlbmVyUHJveHkuY3BwICovLAogCQkJCUJDMURGRUEyMTJCMzFGODcwMDVERjczMCAvKiBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggKi8sCi0JCQkJQTVFQzZBRDIyMTUxQkQ2OTAw
Njc3RDE3IC8qIFdlYlBhZ2VEZWJ1Z2dhYmxlLmNwcCAqLywKLQkJCQlBNUVDNkFEMzIxNTFCRDY5
MDA2NzdEMTcgLyogV2ViUGFnZURlYnVnZ2FibGUuaCAqLywKIAkJCQk4MzcyREIyNjFBNjc1NjI4
MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLywKIAkJCQk4
MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
LmggKi8sCiAJCQkJQkM3QjYyMDUxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5jcHAg
Ki8sCiAJCQkJQkM3QjYyMDQxMjlBMEE2NzAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cC5oICovLAog
CQkJCTJEOUVBMzEwMUE5NkQ5RUIwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGll
bnQuY3BwICovLAogCQkJCTJEOUVBMzBFMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0
ZWRCdW5kbGVDbGllbnQuaCAqLywKLQkJCQlBNTEzRjUzRjIxNTRBNUNEMDA2NjI4NDEgLyogV2Vi
UGFnZUluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAotCQkJCUE1MTNGNTNFMjE1NEE1Q0MwMDY2
Mjg0MSAvKiBXZWJQYWdlSW5zcGVjdG9yQ29udHJvbGxlci5oICovLAogCQkJCUJDMTExQjBCMTEy
RjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovLAogCQkJCUJDMDMyRENCMTBGNDM4
OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCAqLywKIAkJCQlCQ0JEMzhGQTEyNUJBQjlBMDBE
MkMyOUYgLyogV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluICovLApAQCAtOTE5MSw3ICs5MjQ2LDYg
QEAKIAkJCQk3QzZEMzdGQTE3MkY1NTVGMDA5RDI4NDcgLyogUGFnZUJhbm5lck1hYy5tbSAqLywK
IAkJCQkxQUFGMjYzNzE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWEuaCAqLywKIAkJCQkxQUFGMjYzNjE0Njg3QzM5MDA0QTFFOEEgLyogVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEubW0gKi8sCi0JCQkJMUM4RTJEQUQxMjc4QzVCMjAwQkM3QkQwIC8q
IFdlYkluc3BlY3RvclVJTWFjLm1tICovLAogCQkJCUJDOTYzRDZEMTEzREQxQTUwMDU3NEJFMiAv
KiBXZWJQYWdlTWFjLm1tICovLAogCQkJCTI5Q0Q1NUE4MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oICovLAogCQkJCTI5Q0Q1NUE5MTI4RTI5NEYw
MDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5tbSAqLywKQEAgLTky
NjgsNyArOTMyMiw2IEBACiAJCQkJMUFGREU2NUIxOTU0RThENTAwQzQ4RkZBIC8qIExlZ2FjeVNl
c3Npb25TdGF0ZUNvZGluZy5jcHAgKi8sCiAJCQkJMEZDQjRFNTgxOEJCRTNEOTAwMEZDRkM5IC8q
IFBhZ2VDbGllbnRJbXBsTWFjLmggKi8sCiAJCQkJMEZDQjRFNTkxOEJCRTNEOTAwMEZDRkM5IC8q
IFBhZ2VDbGllbnRJbXBsTWFjLm1tICovLAotCQkJCUE1RDM1MDREMUQ3OEYwRDIwMDUxMjRBOSAv
KiBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eU1hYy5tbSAqLywKIAkJCQlFMThFNjkwOTE2OUI1NjNG
MDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5jcHAgKi8sCiAJCQkJRTE4RTY5MEExNjlCNTYz
RjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCAqLywKIAkJCQlFMThFNjkwRDE2OUI1N0RG
MDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5tZXNzYWdlcy5pbiAqLywKQEAgLTkyODksNyAr
OTM0Miw2IEBACiAJCQkJRjZENjMyQkExMzNEMTgxQjAwNzQzRDc3IC8qIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eU1hYy5tbSAqLywKIAkJCQlFNTY4QjkyMDIwQTNBQzZBMDBFM0M4NTYgLyogV2ViRGF0
YUxpc3RTdWdnZXN0aW9uc0Ryb3Bkb3duTWFjLmggKi8sCiAJCQkJRTU2OEI5MjEyMEEzQUM2QTAw
RTNDODU2IC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5tbSAqLywKLQkJCQkx
Q0E4QjkzNTEyN0M3NzRFMDA1NzZDMkIgLyogV2ViSW5zcGVjdG9yUHJveHlNYWMubW0gKi8sCiAJ
CQkJQkM4NTdFODUxMkI3MUVCQjAwRURFQjJFIC8qIFdlYlBhZ2VQcm94eU1hYy5tbSAqLywKIAkJ
CQlCQzU3NTA5NTEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMuaCAqLywK
IAkJCQlCQzU3NTA5NjEyNjhGM0M2MDA2RjBGMTIgLyogV2ViUG9wdXBNZW51UHJveHlNYWMubW0g
Ki8sCkBAIC05MzAwLDEwICs5MzUyLDYgQEAKIAkJCQlDRENBODVDNjEzMkFCQTRFMDBFOTYxREYg
LyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAqLywKIAkJCQk5MzIxRDU4NTFBMzhF
RTNDMDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMy
MUQ1ODcxQTM4RUU3NDAwODA1MkJFIC8qIFdLSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSAq
LywKLQkJCQk5OTRCQURGMTFGN0Q3N0VBMDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5oICovLAotCQkJCTk5NEJBREYyMUY3RDc3RUIwMEI1NzFFNyAvKiBXS0luc3BlY3RvclZp
ZXdDb250cm9sbGVyLm1tICovLAotCQkJCUE1MThCNUQwMUZFMUQ1NUIwMEY5RkEyOCAvKiBXS0lu
c3BlY3RvcldLV2ViVmlldy5oICovLAotCQkJCUE1MThCNUQxMUZFMUQ1NUIwMEY5RkEyOCAvKiBX
S0luc3BlY3RvcldLV2ViVmlldy5tbSAqLywKIAkJCQkwRkNCNEU1QzE4QkJFM0Q5MDAwRkNGQzkg
LyogV0tQcmludGluZ1ZpZXcuaCAqLywKIAkJCQkwRkNCNEU1RDE4QkJFM0Q5MDAwRkNGQzkgLyog
V0tQcmludGluZ1ZpZXcubW0gKi8sCiAJCQkJNTEzRTQ2MkIxQUQ4Mzc1NjAwMTYyMzRBIC8qIFdL
U2hhcmluZ1NlcnZpY2VQaWNrZXJEZWxlZ2F0ZS5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NThkOGYwYzI0NjIyODY5ODkxZDE5MmFlOWNkNzFhODkyZWFlYmE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9SZW1vdGVX
ZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1
ZGUgIlJlbW90ZVdlYkluc3BlY3RvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVX
ZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ET01XcmFwcGVyV29ybGQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKworI2lmICFQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1JlZjxSZW1vdGVXZWJJbnNwZWN0b3JVST4gUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OmNyZWF0ZShXZWJQYWdlJiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlbW90ZVdlYkluc3BlY3RvclVJKHBhZ2UpKTsKK30KKworUmVtb3RlV2ViSW5zcGVjdG9yVUk6
OlJlbW90ZVdlYkluc3BlY3RvclVJKFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkK
KyAgICAsIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyKHBhZ2UpCit7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OmluaXRpYWxpemUoRGVidWdnYWJsZUluZm9EYXRhJiYgZGVidWdnYWJs
ZUluZm8sIGNvbnN0IFN0cmluZyYgYmFja2VuZENvbW1hbmRzVVJMKQoreworICAgIG1fZGVidWdn
YWJsZUluZm8gPSBXVEZNb3ZlKGRlYnVnZ2FibGVJbmZvKTsKKyAgICBtX2JhY2tlbmRDb21tYW5k
c1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKKworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQodGhpcyk7CisKKyAg
ICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5yZXNldCgpOworICAgIG1fZnJvbnRlbmRBUElEaXNw
YXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxlIl9zLCB0cnVlKTsK
K30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVy
bCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNhdmVk
VVJMIl9zLCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRBcHBlbmQo
Y29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3Nh
Z2UpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvQmFja2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yUHJveHk6OlNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpLCBtX3BhZ2UuaWRlbnRpZmll
cigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6d2luZG93T2JqZWN0Q2xlYXJl
ZCgpCit7CisgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+
ZGlzY29ubmVjdENsaWVudCgpOworCisgICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuY29yZVBhZ2UoKSk7CisgICAgbV9mcm9udGVu
ZEhvc3QtPmFkZFNlbGZUb0dsb2JhbE9iamVjdEluV29ybGQobWFpblRocmVhZE5vcm1hbFdvcmxk
KCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpmcm9udGVuZExvYWRlZCgpCit7
CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0SXNWaXNpYmxlIl9zLCB0
cnVlKTsKKworICAgIGJyaW5nVG9Gcm9udCgpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjpjaGFuZ2VTaGVldFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1fcGFnZS5p
ZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRv
d0RyYWcoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTdGFydFdp
bmRvd0RyYWcoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZsb2F0UmVj
dCBmcmFtZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOwor
ICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUo
KS5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK1dlYkNvcmU6OlVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb24gUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbigpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJ
OjpicmluZ1RvRnJvbnQoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKK3sKKyAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIp
OworCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OkZyb250ZW5kRGlkQ2xv
c2UoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OnJlb3BlbigpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlJl
b3BlbigpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0
b3JVSTo6cmVzZXRTdGF0ZSgpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OlJlc2V0U3RhdGUoKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6T3BlbkluTmV3VGFiKHVybCksIG1fcGFn
ZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpzYXZlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNh
dmVBcyksIG1fcGFnZS5pZGVudGlmaWVyKCkpOworfQorCit2b2lkIFJlbW90ZVdlYkluc3BlY3Rv
clVJOjphcHBlbmQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50
KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpBcHBlbmQoZmlsZW5h
bWUsIGNvbnRlbnQpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
K3sKKyAgICAvLyBEbyBub3RoaW5nLiBUaGUgcmVtb3RlIHNpZGUgY2FuIGtub3cgaWYgdGhlIG1h
aW4gcmVzb3VyY2UgY2hhbmdlZC4KK30KKwordm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6c2hv
d0NlcnRpZmljYXRlKGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2Vy
dGlmaWNhdGVJbmZvKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Cit9CisKK0luc3BlY3Rvcjo6RGVi
dWdnYWJsZVR5cGUgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmRlYnVnZ2FibGVUeXBlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby5kZWJ1Z2dhYmxlVHlwZTsKK30KKworU3Ry
aW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldFBsYXRmb3JtTmFtZTsKK30KKworU3Ry
aW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldEJ1aWxkVmVyc2lvbjsKK30KKworU3Ry
aW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjp0YXJnZXRQcm9kdWN0VmVyc2lvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UHJvZHVjdFZlcnNpb247Cit9CisK
K2Jvb2wgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldElzU2ltdWxhdG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRJc1NpbXVsYXRvcjsKK30KKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQorYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6
c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCit7CisgICAgcmV0dXJuIG1fcGFnZS5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOworfQorCit2b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUsICBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5JiBk
aWN0aW9uYXJ5KQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5kaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGljdGlvbmFyeShldmVudE5hbWUs
ICJSZW1vdGUgV2ViIEluc3BlY3RvciBGcm9udGVuZCBEaWFnbm9zdGljcyJfcywgZGljdGlvbmFy
eSwgU2hvdWxkU2FtcGxlOjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNl
dERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhaWxhYmxlKQoreworICAgIC8vIElu
c3BlY3RvcidzIGRpYWdub3N0aWMgbG9nZ2luZyBjbGllbnQgc2hvdWxkIG5ldmVyIGJlIHVzZWQg
dW5sZXNzIHRoZSBwYWdlIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLgorICAgIEFTU0VSVCghYXZh
aWxhYmxlIHx8IHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSk7CisgICAgbV9kaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRj
aGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUiX3MsIG1f
ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKQorU3RyaW5nIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorI2VuZGlmIC8vICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0YWUxYzFkYWExNjQ3
YTIxMWJhZjBkNDAwNTk5YjczMTEyODdhMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLmgKQEAgLTAsMCAr
MSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRlYnVnZ2Fi
bGVJbmZvRGF0YS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIldl
Ykluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kSG9zdC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87CitjbGFzcyBGbG9hdFJlY3Q7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBSZW1vdGVXZWJJbnNwZWN0b3JV
SSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3RvclVJPiwgcHVibGlj
IElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5zcGVjdG9yVUk+IGNy
ZWF0ZShXZWJQYWdlJik7CisKKyAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5lcmF0ZWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwCisgICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIC8v
IENhbGxlZCBieSBSZW1vdGVXZWJJbnNwZWN0b3JVSSBtZXNzYWdlcworICAgIHZvaWQgaW5pdGlh
bGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNV
UkwpOworICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBkaWRB
cHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYpOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCisgICAg
dm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKKyNlbmRpZgorCisgICAg
Ly8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKKyAgICB2b2lkIHdpbmRvd09iamVj
dENsZWFyZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsKKyAgICB2b2lkIG1v
dmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNSZW1v
dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgU3RyaW5nIGxvY2FsaXplZFN0
cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJM
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7IH0KKyAgICBJbnNw
ZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgU3RyaW5nIHRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFN0cmlu
ZyB0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0
UHJvZHVjdFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHRhcmdldElzU2ltdWxh
dG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
KworICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbG9zZVdpbmRv
dygpIG92ZXJyaWRlOworICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXNl
dFN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcm
IHVybCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3Zl
cnJpZGU7CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29udGVudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tl
bmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVN
RVRSWSkKKyAgICBib29sIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSBvdmVycmlkZTsKKyAg
ICBib29sIGRpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZTsgfQorICAgIHZvaWQgbG9nRGlhZ25vc3RpY0V2ZW50
KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIGJvb2wg
Y2FuU2F2ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGlzVW5kZXJUZXN0
KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB1bnNpZ25lZCBpbnNwZWN0aW9uTGV2
ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAxOyB9CisgICAgdm9pZCByZXF1ZXN0U2V0RG9j
a1NpZGUoRG9ja1NpZGUpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgY2hhbmdlQXR0YWNoZWRX
aW5kb3dXaWR0aCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgUmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOworCisgICAgV2ViUGFnZSYgbV9wYWdl
OworICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zy
b250ZW5kSG9zdDsKKyAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgbV9kZWJ1Z2dhYmxlSW5mbzsKKyAg
ICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RF
TEVNRVRSWSkKKyAgICBib29sIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUgeyBmYWxzZSB9
OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3Bl
Y3RvclVJLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiZjdlNGM4NzhkYTFlMzQ4OWI5ODI0Y2Nk
NmQ4NjE4NDQ0ZWE5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL1JlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEs
MzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNz
YWdlcyAtPiBSZW1vdGVXZWJJbnNwZWN0b3JVSSB7CisgICAgSW5pdGlhbGl6ZShzdHJ1Y3QgV2Vi
S2l0OjpEZWJ1Z2dhYmxlSW5mb0RhdGEgZGVidWdnYWJsZUluZm8sIFN0cmluZyBiYWNrZW5kQ29t
bWFuZHNVUkwpCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBTZXREaWFn
bm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisgICAgRGlk
U2F2ZShTdHJpbmcgdXJsKQorICAgIERpZEFwcGVuZChTdHJpbmcgdXJsKQorCisgICAgU2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdlKQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzMjI1
ZDEzZGQzYThlMWJlOGY4M2RlYjc1ZjM3MjllZTUyMmQyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5jcHAKQEAgLTAs
MCArMSwzMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94
eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9DaHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvclBhZ2VBZ2VudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdGlvbkFjdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CisKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVt
QXR0YWNoZWRIZWlnaHQgPSAyNTA7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVk
SGVpZ2h0UmF0aW8gPSAwLjc1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZFdp
ZHRoID0gNTAwOworCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitSZWY8V2ViSW5zcGVjdG9yPiBXZWJJbnNwZWN0b3I6OmNyZWF0ZShXZWJQYWdlKiBwYWdl
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvcihwYWdlKSk7Cit9CisK
K1dlYkluc3BlY3Rvcjo6V2ViSW5zcGVjdG9yKFdlYlBhZ2UqIHBhZ2UpCisgICAgOiBtX3BhZ2Uo
cGFnZSkKK3sKK30KKworV2ViSW5zcGVjdG9yOjp+V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBpZiAo
bV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5pbnZh
bGlkYXRlKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9u
dGVuZChib29sIHVuZGVyVGVzdCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
T3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCks
IG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNldEZyb250
ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVy
KQoreworICAgIC8vIFdlIG1pZ2h0IHJlY2VpdmUgbXVsdGlwbGUgdXBkYXRlcyBpZiB0aGlzIHdl
YiBwcm9jZXNzIGdvdCBzd2FwcGVkIGludG8gYSBXZWJQYWdlUHJveHkKKyAgICAvLyBzaG9ydGx5
IGFmdGVyIGFub3RoZXIgcHJvY2VzcyBlc3RhYmxpc2hlZCB0aGUgY29ubmVjdGlvbi4KKyAgICBp
ZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24t
PmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOwor
ICAgIH0KKworI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAgIElQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29ubmVjdGlvbklkZW50
aWZpZXIucmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkpOworI2VsaWYgT1MoREFSV0lOKQorICAgIElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcihlbmNvZGVkQ29u
bmVjdGlvbklkZW50aWZpZXIucG9ydCgpKTsKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0
aW9uSWRlbnRpZmllci5oYW5kbGUoKSk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBpZiAoIUlQQzo6Q29ubmVjdGlvbjo6aWRlbnRpZmll
cklzVmFsaWQoY29ubmVjdGlvbklkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlQ2xpZW50Q29ubmVj
dGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOworICAgIG1fZnJvbnRlbmRDb25uZWN0
aW9uLT5vcGVuKCk7CisKKyAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9mcm9udGVuZENvbm5l
Y3Rpb25BY3Rpb25zKQorICAgICAgICBjYWxsYmFjaygpOworICAgIG1fZnJvbnRlbmRDb25uZWN0
aW9uQWN0aW9ucy5jbGVhcigpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVu
ZENvbm5lY3Rpb24oKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9z
ZSgpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7CisKKyAgICAvLyBJZiB3ZSB0cmllZCB0byBjbG9z
ZSB0aGUgZnJvbnRlbmQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkLCB0aGVuIG5vIGNvbm5lY3Rpb24g
ZXhpc3RzIHlldC4KKyAgICBpZiAobV9mcm9udGVuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9m
cm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9mcm9udGVuZENvbm5l
Y3Rpb24gPSBudWxscHRyOworICAgIH0KKworICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9u
cy5jbGVhcigpOworCisgICAgbV9hdHRhY2hlZCA9IGZhbHNlOworICAgIG1fcHJldmlvdXNDYW5B
dHRhY2ggPSBmYWxzZTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OmJyaW5nVG9Gcm9udCgpCit7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2Ut
PmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjp3aGVuRnJvbnRlbmRDb25u
ZWN0aW9uRXN0YWJsaXNoZWQoRnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGlm
IChtX2Zyb250ZW5kQ29ubmVjdGlvbikgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9mcm9udGVuZENvbm5lY3Rpb25BY3Rpb25zLmFwcGVuZChX
VEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKKy8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVzc2Fn
ZXMKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzaG93KCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBh
Z2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuc2hvdygpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQor
eworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBDbG9zZSBjb3VsZCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRlYXJkb3duLgor
ICAgIGlmICghbV9mcm9udGVuZENvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGNs
b3NlRnJvbnRlbmRDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpvcGVuSW5O
ZXdUYWIoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0
b3IgaW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CisKKyAgICBQYWdlKiBpbnNw
ZWN0ZWRQYWdlID0gbV9wYWdlLT5jb3JlUGFnZSgpOworICAgIGlmICghaW5zcGVjdGVkUGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUmIGluc3BlY3RlZE1haW5GcmFtZSA9IGluc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpOworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVx
dWVzdCB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwgaW5zcGVjdGVkTWFpbkZyYW1l
LmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCB7IHVybFN0cmlu
ZyB9LCAiX2JsYW5rIl9zLCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5v
LCBNYXliZVNlbmRSZWZlcnJlciwgQWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMOjpZZXMsIE5l
d0ZyYW1lT3BlbmVyUG9saWN5OjpBbGxvdywgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6
U2hvdWxkTm90QWxsb3csIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07CisKKyAgICBO
YXZpZ2F0aW9uQWN0aW9uIGFjdGlvbiB7ICppbnNwZWN0ZWRNYWluRnJhbWUuZG9jdW1lbnQoKSwg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgZnJhbWVMb2FkUmVxdWVzdC5pbml0
aWF0ZWRCeU1haW5GcmFtZSgpLCBOYXZpZ2F0aW9uVHlwZTo6TGlua0NsaWNrZWQgfTsKKyAgICBQ
YWdlKiBuZXdQYWdlID0gaW5zcGVjdGVkUGFnZS0+Y2hyb21lKCkuY3JlYXRlV2luZG93KGluc3Bl
Y3RlZE1haW5GcmFtZSwgZnJhbWVMb2FkUmVxdWVzdCwgeyB9LCBhY3Rpb24pOworICAgIGlmICgh
bmV3UGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbmV3UGFnZS0+bWFpbkZyYW1lKCkubG9h
ZGVyKCkubG9hZChXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3I6OmV2YWx1YXRlU2NyaXB0Rm9yVGVzdChjb25zdCBTdHJpbmcmIHNjcmlwdCkKK3sKKyAg
ICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdl
LT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChzY3JpcHQpOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd0NvbnNvbGUoKQorewor
ICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVu
RnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93Q29uc29sZSgpLCAw
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNob3dSZXNvdXJjZXMoKQorewor
ICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7CisKKyAgICB3aGVu
RnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAgICAgICAgbV9mcm9udGVuZENv
bm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTaG93UmVzb3VyY2VzKCks
IDApOworICAgIH0pOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJjZUZv
ckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIpCit7CisgICAg
V2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jb3Jl
UGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAgU3RyaW5nIGluc3Bl
Y3RvckZyYW1lSWRlbnRpZmllciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLmVuc3VyZVBhZ2VBZ2VudCgpLmZyYW1lSWQoZnJhbWUtPmNvcmVGcmFtZSgpKTsKKwor
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dNYWlu
UmVzb3VyY2VGb3JGcmFtZShpbnNwZWN0b3JGcmFtZUlkZW50aWZpZXIpLCAwKTsKKyAgICB9KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0YXJ0UGFnZVByb2ZpbGluZygpCit7CisgICAgaWYg
KCFtX3BhZ2UtPmNvcmVQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+Y29y
ZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKKworICAgIHdoZW5Gcm9udGVu
ZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlv
bi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlN0YXJ0UGFnZVByb2ZpbGluZygpLCAw
KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnN0b3BQYWdlUHJvZmlsaW5nKCkK
K3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOworCisgICAg
d2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7CisgICAgICAgIG1fZnJvbnRl
bmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcFBhZ2VQcm9m
aWxpbmcoKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yOjpzdGFydEVsZW1l
bnRTZWxlY3Rpb24oKQoreworICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKKyAg
ICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpTdGFydEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yOjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQ
YWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3Rh
Ymxpc2hlZChbPV0geworICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIDApOworICAgIH0pOwor
fQorCit2b2lkIFdlYkluc3BlY3Rvcjo6ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3Rp
dmUpCit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkVsZW1lbnRTZWxlY3Rpb25D
aGFuZ2VkKGFjdGl2ZSksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3I6OnRpbWVsaW5lUmVjb3JkaW5nQ2hhbmdlZChib29sIGFjdGl2ZSkKK3sKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6VGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGFjdGl2ZSks
IG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3I6OnNldE1vY2tD
YXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQorewor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkT3ZlcnJpZGUoZW5hYmxlZCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKK30KKworYm9vbCBX
ZWJJbnNwZWN0b3I6OmNhbkF0dGFjaFdpbmRvdygpCit7CisgICAgaWYgKCFtX3BhZ2UtPmNvcmVQ
YWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIERvbid0IGFsbG93IGF0dGFj
aGluZyB0byBhbm90aGVyIGluc3BlY3RvciAtLSB0d28gaW5zcGVjdG9ycyBpbiBvbmUgd2luZG93
IGlzIHRvbyBtdWNoIQorICAgIGlmIChtX3BhZ2UtPmlzSW5zcGVjdG9yUGFnZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBhdHRhY2hlZCwgYWxs
b3cgYXR0YWNoaW5nIGFnYWluIHRvIGFsbG93IHN3aXRjaGluZyBzaWRlcy4KKyAgICBpZiAobV9h
dHRhY2hlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUg
YXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRo
ZSBtaW5pbXVtIGluc3BlY3RvciBzaXplLgorICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWln
aHQgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUhlaWdo
dCgpOworICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VXaWR0aCA9IG1fcGFnZS0+Y29yZVBhZ2Uo
KS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNpYmxlV2lkdGgoKTsKKyAgICB1bnNpZ25lZCBtYXhp
bXVtQXR0YWNoZWRIZWlnaHQgPSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFjaGVk
SGVpZ2h0UmF0aW87CisgICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBtYXhpbXVt
QXR0YWNoZWRIZWlnaHQgJiYgbWluaW11bUF0dGFjaGVkV2lkdGggPD0gaW5zcGVjdGVkUGFnZVdp
ZHRoOworfQorCit2b2lkIFdlYkluc3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgp
Cit7CisgICAgaWYgKG1fYXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgY2Fu
QXR0YWNoV2luZG93ID0gdGhpcy0+Y2FuQXR0YWNoV2luZG93KCk7CisgICAgaWYgKG1fcHJldmlv
dXNDYW5BdHRhY2ggPT0gY2FuQXR0YWNoV2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3ByZXZpb3VzQ2FuQXR0YWNoID0gY2FuQXR0YWNoV2luZG93OworCisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93
KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9y
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI2Yjg5ZTUyMjc3OTc4ZDUzYTMzZmUzYzcxMTVlYWViYmIzODI5NTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUlk
ZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7
CisKK2NsYXNzIFdlYkluc3BlY3RvciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OkJ1bmRsZUluc3BlY3Rvcj4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9uOjpDbGll
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yPiBjcmVhdGUoV2ViUGFn
ZSopOworCisgICAgV2ViUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorCisg
ICAgdm9pZCB1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7CisKKyAgICAvLyBJbXBsZW1lbnRl
ZCBpbiBnZW5lcmF0ZWQgV2ViSW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7CisKKyAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAorICAgIHZvaWQgZGlkQ2xvc2Uo
SVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyBjbG9zZSgpOyB9CisgICAgdm9pZCBkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2Us
IElQQzo6U3RyaW5nUmVmZXJlbmNlKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KKworICAgIHZvaWQg
c2hvdygpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIHZvaWQgb3BlbkluTmV3VGFiKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nKTsKKworICAgIHZvaWQgY2FuQXR0YWNoV2luZG93KGJvb2wmIHJl
c3VsdCk7CisKKyAgICB2b2lkIHNob3dDb25zb2xlKCk7CisgICAgdm9pZCBzaG93UmVzb3VyY2Vz
KCk7CisKKyAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpGcmFtZUlk
ZW50aWZpZXIpOworCisgICAgdm9pZCBzZXRBdHRhY2hlZChib29sIGF0dGFjaGVkKSB7IG1fYXR0
YWNoZWQgPSBhdHRhY2hlZDsgfQorCisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEZvclRlc3QoY29u
c3QgU3RyaW5nJiBzY3JpcHQpOworCisgICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmcoKTsKKyAg
ICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7CisKKyAgICB2b2lkIHN0YXJ0RWxlbWVudFNlbGVj
dGlvbigpOworICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKKyAgICB2b2lkIGVsZW1l
bnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOworICAgIHZvaWQgdGltZWxpbmVSZWNvcmRpbmdDaGFu
Z2VkKGJvb2wpOworICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRl
KE9wdGlvbmFsPGJvb2w+KTsKKworICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6
QXR0YWNobWVudCk7CisKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgY2xvc2UoKTsg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7CisKKyAg
ICBleHBsaWNpdCBXZWJJbnNwZWN0b3IoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfldlYkluc3Bl
Y3RvcigpOworCisgICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKKworICAgIC8vIENhbGxlZCBm
cm9tIFdlYkluc3BlY3RvckNsaWVudAorICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRl
bmQoYm9vbCB1bmRlclRlc3QpOworICAgIHZvaWQgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsK
KworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisKKyAgICB2b2lkIHdoZW5Gcm9udGVuZENvbm5l
Y3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYpOworCisgICAgV2ViUGFnZSogbV9w
YWdlOworCisgICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9mcm9udGVuZENvbm5lY3Rpb247
CisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZnJvbnRlbmRDb25uZWN0aW9uQWN0aW9u
czsKKworICAgIGJvb2wgbV9hdHRhY2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3ByZXZpb3Vz
Q2FuQXR0YWNoIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3IubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWY3NGI1ZTZiMDQzMGI2YjBjYTNiZTI2MGY1ZmZh
YmVjZDY1NDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdlcyAtPiBXZWJJ
bnNwZWN0b3IgeworICAgIFNob3coKQorICAgIENsb3NlKCkKKworICAgIFNldEF0dGFjaGVkKGJv
b2wgYXR0YWNoZWQpCisKKyAgICBTaG93Q29uc29sZSgpCisgICAgU2hvd1Jlc291cmNlcygpCisK
KyAgICBTaG93TWFpblJlc291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZy
YW1lSWRlbnRpZmllcikKKworICAgIE9wZW5Jbk5ld1RhYihTdHJpbmcgdXJsKQorCisgICAgU3Rh
cnRQYWdlUHJvZmlsaW5nKCkKKyAgICBTdG9wUGFnZVByb2ZpbGluZygpCisKKyAgICBTdGFydEVs
ZW1lbnRTZWxlY3Rpb24oKQorICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKKworICAgIFNldEZy
b250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYklu
c3BlY3RvckNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIwNjgwMTllZjg5ODJmZmE0ZjM3MTA4NzFh
MjRlMWNlZDZhNzM1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMCwwICsxLDI1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJJ
bnNwZWN0b3JDbGllbnQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCisjaW5jbHVkZSAi
V2ViSW5zcGVjdG9yLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
QW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXlDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlIDxXZWJD
b3JlL0luc3BlY3Rvck92ZXJsYXkuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGll
bnQgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KFdl
Ykluc3BlY3RvckNsaWVudCYgaW5zcGVjdG9yQ2xpZW50KQorICAgICAgICA6IG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudCgpIHsgfQorcHJpdmF0ZToKKyAgICB2b2lkIG5vdGlmeUFu
aW1hdGlvbkVuZGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBTdHJpbmcmKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV9pbnNwZWN0b3JDbGllbnQuYW5pbWF0aW9uRW5kZWRG
b3JMYXllcihsYXllcik7CisgICAgfQorICAgIAorICAgIFdlYkluc3BlY3RvckNsaWVudCYgbV9p
bnNwZWN0b3JDbGllbnQ7Cit9OworCitXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNs
aWVudChXZWJQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBtX2hpZ2hsaWdo
dE92ZXJsYXkobnVsbHB0cikKK3sKK30KKworV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVj
dG9yQ2xpZW50KCkKK3sKKyAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9wYWludFJlY3RMYXllcnMp
CisgICAgICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgCisgICAgbV9wYWludFJl
Y3RMYXllcnMuY2xlYXIoKTsKKworICAgIGlmIChtX3BhaW50UmVjdE92ZXJsYXkgJiYgbV9wYWdl
LT5jb3JlUGFnZSgpKQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29u
dHJvbGxlcigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX3BhaW50UmVjdE92ZXJsYXksIFBhZ2VP
dmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKK3sKKyAgICBpZiAoV2ViSW5zcGVjdG9yKiBpbnNwZWN0
b3IgPSBtX3BhZ2UtPmluc3BlY3RvcihXZWJQYWdlOjpMYXp5Q3JlYXRpb25Qb2xpY3k6OlVzZUV4
aXN0aW5nT25seSkpCisgICAgICAgIGluc3BlY3Rvci0+Y2xvc2UoKTsKKworICAgIGRlbGV0ZSB0
aGlzOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZnJvbnRlbmRDb3VudENoYW5nZWQo
dW5zaWduZWQgY291bnQpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3JGcm9udGVuZENvdW50Q2hh
bmdlZChjb3VudCk7Cit9CisKK0luc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsKiBXZWJJbnNwZWN0
b3JDbGllbnQ6Om9wZW5Mb2NhbEZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCit7CisgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRl
bmQoY29udHJvbGxlci0+aXNVbmRlclRlc3QoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmJyaW5nRnJvbnRlbmRUb0Zyb250KCkKK3sKKyAg
ICBpZiAobV9wYWdlLT5pbnNwZWN0b3IoKSkKKyAgICAgICAgbV9wYWdlLT5pbnNwZWN0b3IoKS0+
YnJpbmdUb0Zyb250KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkaWRSZXNpemVN
YWluRnJhbWUoRnJhbWUqKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAg
ICBtX3BhZ2UtPmluc3BlY3RvcigpLT51cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoKQoreworICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkp
CisgICAgICAgIHJldHVybjsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICgh
bV9oaWdobGlnaHRPdmVybGF5KSB7CisgICAgICAgIGF1dG8gaGlnaGxpZ2h0T3ZlcmxheSA9IFBh
Z2VPdmVybGF5OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXkgPSBo
aWdobGlnaHRPdmVybGF5LnB0cigpOworICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShXVEZNb3ZlKGhpZ2hsaWdodE92
ZXJsYXkpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkZhZGUpOworICAgICAgICBtX2hpZ2hsaWdo
dE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGln
aGxpZ2h0T3ZlcmxheS0+c3RvcEZhZGVPdXRBbmltYXRpb24oKTsKKyAgICAgICAgbV9oaWdobGln
aHRPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB9CisjZWxzZQorICAgIEhpZ2hsaWdo
dCBoaWdobGlnaHQ7CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCkuZ2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0ZVN5
c3RlbTo6RG9jdW1lbnQpOworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckhpZ2hsaWdodChoaWdo
bGlnaHQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxp
Z2h0KCkKK3sKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAobV9oaWdobGlnaHRP
dmVybGF5KQorICAgICAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLnVuaW5zdGFsbFBhZ2VPdmVybGF5KCptX2hpZ2hsaWdodE92ZXJsYXksIFBhZ2VPdmVybGF5
OjpGYWRlTW9kZTo6RmFkZSk7CisjZWxzZQorICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckhpZ2hs
aWdodCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fcGFpbnRSZWN0T3ZlcmxheSkgeworICAgICAgICBtX3BhaW50
UmVjdE92ZXJsYXkgPSBQYWdlT3ZlcmxheTo6Y3JlYXRlKCp0aGlzLCBQYWdlT3ZlcmxheTo6T3Zl
cmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5wYWdlT3Zl
cmxheUNvbnRyb2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFpbnRSZWN0T3ZlcmxheSwg
UGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIH0KKworICAgIGlmICghbV9w
YWludEluZGljYXRvckxheWVyQ2xpZW50KQorICAgICAgICBtX3BhaW50SW5kaWNhdG9yTGF5ZXJD
bGllbnQgPSBtYWtlVW5pcXVlPFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudD4oKnRoaXMpOwor
CisgICAgYXV0byBwYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fcGFnZS0+ZHJh
d2luZ0FyZWEoKS0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKm1fcGFpbnRJbmRpY2F0b3JMYXll
ckNsaWVudCk7CisgICAgCisgICAgcGFpbnRMYXllci0+c2V0TmFtZSgicGFpbnQgcmVjdCIpOwor
ICAgIHBhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICBwYWlu
dExheWVyLT5zZXRQb3NpdGlvbihyZWN0LmxvY2F0aW9uKCkpOworICAgIHBhaW50TGF5ZXItPnNl
dFNpemUocmVjdC5zaXplKCkpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcigxLjBmLCAwLjBmLCAwLjBmLCAwLjJmKSk7CisKKyAgICBLZXlmcmFtZVZhbHVlTGlzdCBm
YWRlS2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKKyAgICBmYWRlS2V5ZnJhbWVz
Lmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAsIDEpKTsKKworICAgIGZh
ZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMC4yNSwg
MCkpOworICAgIAorICAgIGF1dG8gb3BhY2l0eUFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRl
KCk7CisgICAgb3BhY2l0eUFuaW1hdGlvbi0+c2V0RHVyYXRpb24oMC4yNSk7CisKKyAgICBwYWlu
dExheWVyLT5hZGRBbmltYXRpb24oZmFkZUtleWZyYW1lcywgRmxvYXRTaXplKCksIG9wYWNpdHlB
bmltYXRpb24ucHRyKCksICJvcGFjaXR5Il9zLCAwKTsKKyAgICAKKyAgICBHcmFwaGljc0xheWVy
JiByYXdMYXllciA9IHBhaW50TGF5ZXIuZ2V0KCk7CisgICAgbV9wYWludFJlY3RMYXllcnMuYWRk
KFdURk1vdmUocGFpbnRMYXllcikpOworCisgICAgR3JhcGhpY3NMYXllciYgb3ZlcmxheVJvb3RM
YXllciA9IG1fcGFpbnRSZWN0T3ZlcmxheS0+bGF5ZXIoKTsKKyAgICBvdmVybGF5Um9vdExheWVy
LmFkZENoaWxkKHJhd0xheWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmFuaW1h
dGlvbkVuZGVkRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3Jh
cGhpY3NMYXllciogbm9uQ29uc3RMYXllciA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NMYXllcio+KGxh
eWVyKTsKKyAgICBub25Db25zdExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWlu
dFJlY3RMYXllcnMucmVtb3ZlKCpub25Db25zdExheWVyKTsKK30KKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd0luc3BlY3RvckluZGljYXRp
b24oKQoreworICAgIG1fcGFnZS0+c2hvd0luc3BlY3RvckluZGljYXRpb24oKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCkKK3sKKyAgICBt
X3BhZ2UtPmhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAo
ZW5hYmxlZCkKKyAgICAgICAgbV9wYWdlLT5lbmFibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7Cisg
ICAgZWxzZQorICAgICAgICBtX3BhZ2UtPmRpc2FibGVJbnNwZWN0b3JOb2RlU2VhcmNoKCk7Cit9
CisjZW5kaWYKKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmVsZW1lbnRTZWxlY3Rpb25DaGFu
Z2VkKGJvb2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAg
ICBtX3BhZ2UtPmluc3BlY3RvcigpLT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChhY3RpdmUpOwor
fQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJv
b2wgYWN0aXZlKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQorICAgICAgICBtX3Bh
Z2UtPmluc3BlY3RvcigpLT50aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYWN0aXZlKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVy
cmlkZShPcHRpb25hbDxib29sPiBlbmFibGVkKQoreworICAgIGlmIChtX3BhZ2UtPmluc3BlY3Rv
cigpKQorICAgICAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5zZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkT3ZlcnJpZGUoZW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3
aWxsTW92ZVRvUGFnZShQYWdlT3ZlcmxheSYsIFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgaXMgbW92aW5nIGF3
YXkgZnJvbSB0aGUgd2ViIHBhZ2UsIHJlc2V0IGl0LgorICAgIEFTU0VSVChtX2hpZ2hsaWdodE92
ZXJsYXkpOworICAgIG1faGlnaGxpZ2h0T3ZlcmxheSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpkaWRNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSopCit7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgLypk
aXJ0eVJlY3QqLykKK3sKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOworfQorCitib29sIFdlYkluc3BlY3RvckNsaWVu
dDo6bW91c2VFdmVudChQYWdlT3ZlcmxheSYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI3YzNlZTE0MmUxNjE2ZTQzNWY0OGQ0MWYyNzI3MTVmZThlMDM4MmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dl
Ykluc3BlY3RvckNsaWVudC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBo
aWNzTGF5ZXI7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgUGFnZU92ZXJsYXk7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworY2xhc3MgUmVwYWludEluZGljYXRvckxh
eWVyQ2xpZW50OworCitjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yQ2xpZW50LCBwcml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworZnJpZW5kIGNsYXNzIFJlcGFpbnRJbmRpY2F0
b3JMYXllckNsaWVudDsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JDbGllbnQoV2ViUGFnZSop
OworICAgIHZpcnR1YWwgfldlYkluc3BlY3RvckNsaWVudCgpOworCitwcml2YXRlOgorICAgIC8v
IFdlYkNvcmU6Okluc3BlY3RvckNsaWVudAorICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCgpIG92ZXJyaWRlOworICAgIHZvaWQgZnJvbnRlbmRDb3VudENoYW5nZWQodW5zaWduZWQpIG92
ZXJyaWRlOworCisgICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIG9wZW5Mb2NhbEZyb250
ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGJy
aW5nRnJvbnRlbmRUb0Zyb250KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZXNpemVNYWluRnJh
bWUoV2ViQ29yZTo6RnJhbWUqKSBvdmVycmlkZTsKKworICAgIHZvaWQgaGlnaGxpZ2h0KCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgb3ZlcnJpZGU7CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIHZvaWQgc2hvd0luc3BlY3RvckluZGljYXRpb24oKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGhpZGVJbnNwZWN0b3JJbmRpY2F0aW9uKCkgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAg
IHZvaWQgZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCB0
aW1lbGluZVJlY29yZGluZ0NoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7CisKKyAgICBib29sIG92ZXJy
aWRlc1Nob3dQYWludFJlY3RzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZvaWQgc2hvd1BhaW50UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsK
KworICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFs
PGJvb2w+KSBmaW5hbDsKKworICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQKKyAgICB2b2lkIHdp
bGxNb3ZlVG9QYWdlKFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkTW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNv
cmU6OlBhZ2UqKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVy
bGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlOworICAgIGJvb2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNv
bnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBh
bmltYXRpb25FbmRlZEZvckxheWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKwor
ICAgIFdlYlBhZ2UqIG1fcGFnZTsKKyAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheSogbV9oaWdobGln
aHRPdmVybGF5OworICAgIAorICAgIFJlZlB0cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4gbV9wYWlu
dFJlY3RPdmVybGF5OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXBhaW50SW5kaWNhdG9yTGF5ZXJD
bGllbnQ+IG1fcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKKyAgICBIYXNoU2V0PFJlZjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPj4gbV9wYWludFJlY3RMYXllcnM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMTg5ZTk4MjVhZDQ5NDcwZWQ2MjQzNWU4NmQ1OWRmNjBmMzhhZTgyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcihXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpyZXNldCgpCit7Cisg
ICAgbV9mcm9udGVuZExvYWRlZCA9IGZhbHNlOworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Cisg
ICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlcjo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIG1fZnJvbnRlbmRMb2FkZWQgPSB0cnVl
OworCisgICAgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKG1fZnJv
bnRlbmRMb2FkZWQpOworICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOworICAgIEFTU0VSVChtX3F1
ZXVlLmlzRW1wdHkoKSk7CisKKyAgICBtX3N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQoreworICAgIEFTU0VS
VChtX3N1c3BlbmRlZCk7CisKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgZXZhbHVh
dGVRdWV1ZWRFeHByZXNzaW9ucygpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCkKK3sKKyAg
ICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5k
QVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVF
eHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIs
IGNvbW1hbmQsICJcIiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kLCBib29sIGFyZ3VtZW50KQoreworICAgIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Np
b24obWFrZVN0cmluZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wiIiwgY29tbWFu
ZCwgIlwiLCAiLCBhcmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsKK30KKwordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoTWVzc2FnZUFzeW5j
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9u
KG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVzc2FnZUFzeW5jKCIs
IG1lc3NhZ2UsICIpIikpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0
Y2hlcjo6ZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24p
Cit7CisgICAgaWYgKCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7CisgICAgICAg
IG1fcXVldWUuYXBwZW5kKGV4cHJlc3Npb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQVNTRVJUKG1fcXVldWUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fcGFnZS5jb3JlUGFn
ZSgpLT5tYWluRnJhbWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKKyAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9u
KGV4cHJlc3Npb24pOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cjo6ZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpCit7CisgICAgaWYgKG1fcXVldWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biA6IG1fcXVldWUpIHsKKyAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkuc2NyaXB0KCkuaXNQYXVzZWQoKSk7CisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5t
YWluRnJhbWUoKS5zY3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNlcHRpb24oZXhwcmVz
c2lvbik7CisgICAgfQorCisgICAgbV9xdWV1ZS5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY1YzQyNGUyZDg3NDU0ZDliYjllZTNmMmVhODIyNGY0MWU0MWE3MjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFn
ZTsKKworY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXIoV2ViUGFnZSYpOworCisgICAg
dm9pZCByZXNldCgpOworICAgIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHZvaWQgc3Vz
cGVuZCgpOworICAgIHZvaWQgdW5zdXNwZW5kKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmQpOworICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5kKGNvbnN0
IFN0cmluZyYgY29tbWFuZCwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdm9pZCBkaXNw
YXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBib29sIGFyZ3VtZW50KTsKKyAgICB2
b2lkIGRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOworCisgICAgV2ViUGFnZSYgbV9w
YWdlOworICAgIERlcXVlPFN0cmluZz4gbV9xdWV1ZTsKKyAgICBib29sIG1fZnJvbnRlbmRMb2Fk
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5zcGVjdG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jMDE3ODUxZjY4Nzk3ZTg5N2Y3ZDIwOTNjMWRhZDQ2MDg5MmEyN2Yw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXIuaCIKKworI2luY2x1ZGUgIldlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZNLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Db21tb25WTS5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1JlZjxXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyPiBX
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIpOworfQorCitXZWJJ
bnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyKCkKKyAgICA6IG1fcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQu
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlciIpKQoreworfQorCitXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyOjp+V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcigpCit7
Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6aW5pdGlhbGl6ZUNv
bm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQoreworICAgIGNvbm5lY3Rpb24t
PmFkZFdvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3F1ZXVlLmdldCgpLCB0aGlz
KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpub3RpZnlOZWVk
RGVidWdnZXJCcmVhaygpCit7CisgICAgLy8gSWYgdGhlIHdlYiBwcm9jZXNzIGhhcyBub3QgYmVl
biBmdWxseSBpbml0aWFsaXplZCB5ZXQsIHRoZW4gdGhlcmUKKyAgICAvLyBpcyBubyBWTSB0byBi
ZSBub3RpZmllZCBhbmQgdGh1cyBubyBpbmZpbml0ZSBsb29wIHRvIGJyZWFrLiBCYWlsIG91dC4K
KyAgICBpZiAoIVdlYkNvcmU6OmNvbW1vblZNT3JOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEpTQzo6Vk0mIHZtID0gV2ViQ29yZTo6Y29tbW9uVk0oKTsKKyAgICB2bS5ub3RpZnlOZWVk
RGVidWdnZXJCcmVhaygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0
RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNw
ZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhmNmJkMDIwYTIzNWE0Mzlh
ZjAwM2I1ZjYwNTQyMzlkMmVjYzI2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXIgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNz
YWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlcj4gY3JlYXRlKCk7CisgICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXIoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiopOworICAgIAorcHJpdmF0ZToKKyAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyKCk7CisgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIu
CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7
CisgICAgCisgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLm1l
c3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4NzBlNTJiNzNiOGEwNTRjZThlMWNjOWM4NDBlNGU3NzQ4
OGYyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KQEAgLTAsMCAr
MSwyNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittZXNzYWdl
cyAtPiBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyIHsKKyAgICBOb3RpZnlOZWVkRGVi
dWdnZXJCcmVhaygpCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNw
ZWN0b3IvV2ViSW5zcGVjdG9yVUkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmYWE2ZjZlZGU1ZGRkYTBhMTRh
YmRlMmVjMGMyYmJhYWZjNTVlZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmNwcApAQCAtMCwwICsxLDQxMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclVJLmgiCisKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRl
ICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5TWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9D
aHJvbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
UmVmPFdlYkluc3BlY3RvclVJPiBXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2Up
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yVUkocGFnZSkpOworfQor
CitXZWJJbnNwZWN0b3JVSTo6V2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKKyAgICA6IG1f
cGFnZShwYWdlKQorICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKKyAgICAsIG1f
ZGVidWdnYWJsZUluZm8oRGVidWdnYWJsZUluZm9EYXRhOjplbXB0eSgpKQoreworICAgIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SW5zcGVjdG9yQWRkaXRpb25z
RW5hYmxlZCh0cnVlKTsKKyAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLnNldEltYWdlQml0bWFwRW5hYmxlZCh0cnVlKTsKKyNpZiBFTkFCTEUoV0VCR0wyKQorICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViR0wyRW5hYmxl
ZCh0cnVlKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjplc3RhYmxpc2hDb25u
ZWN0aW9uKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIGNv
bnN0IERlYnVnZ2FibGVJbmZvRGF0YSYgZGVidWdnYWJsZUluZm8sIGJvb2wgdW5kZXJUZXN0LCB1
bnNpZ25lZCBpbnNwZWN0aW9uTGV2ZWwpCit7CisgICAgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
ciA9IGluc3BlY3RlZFBhZ2VJZGVudGlmaWVyOworICAgIG1fZGVidWdnYWJsZUluZm8gPSBkZWJ1
Z2dhYmxlSW5mbzsKKyAgICBtX3VuZGVyVGVzdCA9IHVuZGVyVGVzdDsKKyAgICBtX2luc3BlY3Rp
b25MZXZlbCA9IGluc3BlY3Rpb25MZXZlbDsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LnJlc2V0KCk7CisKKyAgICBtX2Zyb250ZW5kQ29udHJvbGxlciA9ICZtX3BhZ2UuY29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCh0aGlzKTsKKworICAgIHVwZGF0ZUNvbm5lY3Rpb24oKTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6dXBkYXRlQ29ubmVjdGlvbigpCit7CisgICAgaWYg
KG1fYmFja2VuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+aW52
YWxpZGF0ZSgpOworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICB9
CisKKyNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICBJUEM6OkNvbm5lY3Rpb246OlNv
Y2tldFBhaXIgc29ja2V0UGFpciA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlUGxhdGZvcm1Db25u
ZWN0aW9uKCk7CisgICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVu
dGlmaWVyKHNvY2tldFBhaXIuc2VydmVyKTsKKyAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlv
bkNsaWVudFBvcnQoc29ja2V0UGFpci5jbGllbnQpOworI2VsaWYgT1MoREFSV0lOKQorICAgIG1h
Y2hfcG9ydF90IGxpc3RlbmluZ1BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICBpZiAobWFjaF9w
b3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAm
bGlzdGVuaW5nUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICBDUkFTSCgpOworCisgICAg
aWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9y
dCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpICE9IEtFUk5fU1VDQ0VT
UykKKyAgICAgICAgQ1JBU0goKTsKKworICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBj
b25uZWN0aW9uSWRlbnRpZmllcihsaXN0ZW5pbmdQb3J0KTsKKyAgICBJUEM6OkF0dGFjaG1lbnQg
Y29ubmVjdGlvbkNsaWVudFBvcnQobGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NF
TkQpOworI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBjb25uZWN0aW9uSWRlbnRpZmllciwgY29ubkNsaWVudDsKKyAgICBJUEM6OkNvbm5lY3Rpb246
OmNyZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKGNvbm5lY3Rpb25JZGVudGlmaWVyLCBj
b25uQ2xpZW50KTsKKyAgICBJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbkNsaWVudFBvcnQoY29u
bkNsaWVudCk7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuOworI2Vu
ZGlmCisKKyNpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoREFSV0lOKSB8fCBQTEFU
Rk9STShXSU4pCisgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3Jl
YXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMpOworICAgIG1f
YmFja2VuZENvbm5lY3Rpb24tPm9wZW4oKTsKKyNlbmRpZgorCisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uQ2xpZW50UG9ydCks
IG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjp3
aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICBpZiAobV9mcm9udGVuZEhvc3QpCisgICAgICAg
IG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7CisKKyAgICBtX2Zyb250ZW5kSG9z
dCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgp
KTsKKyAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmZyb250ZW5k
TG9hZGVkKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRlZCgp
OworCisgICAgLy8gVGVsbCB0aGUgbmV3IGZyb250ZW5kIGFib3V0IHRoZSBjdXJyZW50IGRvY2sg
c3RhdGUuIElmIHRoZSB3aW5kb3cgb2JqZWN0CisgICAgLy8gY2xlYXJlZCBkdWUgdG8gYSByZWxv
YWQsIHRoZSBkb2NrIHN0YXRlIHdvbid0IGJlIHJlc2VudCBmcm9tIFVJUHJvY2Vzcy4KKyAgICBz
ZXREb2NraW5nVW5hdmFpbGFibGUobV9kb2NraW5nVW5hdmFpbGFibGUpOworICAgIHNldERvY2tT
aWRlKG1fZG9ja1NpZGUpOworICAgIHNldElzVmlzaWJsZShtX2lzVmlzaWJsZSk7CisKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RnJvbnRlbmRMb2FkZWQoKSwgbV9pbnNwZWN0ZWRQ
YWdlSWRlbnRpZmllcik7CisKKyAgICBicmluZ1RvRnJvbnQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c3RhcnRXaW5kb3dEcmFnKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6U3RhcnRXaW5kb3dEcmFnKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKK3sK
KyAgICBGbG9hdFJlY3QgZnJhbWVSZWN0ID0gbV9wYWdlLmNvcmVQYWdlKCktPmNocm9tZSgpLndp
bmRvd1JlY3QoKTsKKyAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKKyAgICBtX3BhZ2UuY29yZVBh
Z2UoKS0+Y2hyb21lKCkuc2V0V2luZG93UmVjdChmcmFtZVJlY3QpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgV2ViSW5zcGVjdG9yVUk6OmNsb3NlV2luZG93KCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisKKyAg
ICBpZiAobV9iYWNrZW5kQ29ubmVjdGlvbikgeworICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9u
LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOwor
ICAgIH0KKworICAgIGlmIChtX2Zyb250ZW5kQ29udHJvbGxlcikgeworICAgICAgICBtX2Zyb250
ZW5kQ29udHJvbGxlci0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobnVsbHB0cik7CisgICAg
ICAgIG1fZnJvbnRlbmRDb250cm9sbGVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9m
cm9udGVuZEhvc3QpCisgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7
CisKKyAgICBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyID0geyB9OworICAgIG1fdW5kZXJUZXN0
ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlb3BlbigpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJlb3BlbigpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlm
aWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVzZXRTdGF0ZSgpCit7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlJlc2V0U3RhdGUoKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7Cit9CisKK1dlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gV2Vi
SW5zcGVjdG9yVUk6OnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigp
OworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpyZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUg
c2lkZSkKK3sKKyAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7
CisgICAgc3dpdGNoIChzaWRlKSB7CisgICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6CisgICAg
ICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6CisgICAgICAgIHdlYlBy
b2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIERvY2tTaWRlOjpMZWZ0OgorICAgICAgICB3ZWJQcm9jZXNz
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpBdHRhY2hMZWZ0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIERvY2tTaWRlOjpCb3R0b206CisgICAgICAgIHdlYlByb2Nlc3MucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2NrU2lk
ZSBzaWRlKQoreworICAgIEFTQ0lJTGl0ZXJhbCBzaWRlU3RyaW5nIHsgQVNDSUlMaXRlcmFsOjpu
dWxsKCkgfTsKKworICAgIHN3aXRjaCAoc2lkZSkgeworICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9j
a2VkOgorICAgICAgICBzaWRlU3RyaW5nID0gInVuZG9ja2VkIl9zOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgorICAgICAgICBzaWRlU3RyaW5nID0gInJpZ2h0
Il9zOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRG9ja1NpZGU6OkxlZnQ6CisgICAgICAg
IHNpZGVTdHJpbmcgPSAibGVmdCJfczsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERvY2tT
aWRlOjpCb3R0b206CisgICAgICAgIHNpZGVTdHJpbmcgPSAiYm90dG9tIl9zOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBtX2RvY2tTaWRlID0gc2lkZTsKKworICAgIG1fZnJvbnRlbmRB
UElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja1NpZGUiX3MsIFN0cmluZyhzaWRl
U3RyaW5nKSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tpbmdVbmF2YWlsYWJs
ZShib29sIHVuYXZhaWxhYmxlKQoreworICAgIG1fZG9ja2luZ1VuYXZhaWxhYmxlID0gdW5hdmFp
bGFibGU7CisKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNl
dERvY2tpbmdVbmF2YWlsYWJsZSJfcywgdW5hdmFpbGFibGUpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvclVJOjpzZXRJc1Zpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIG1faXNWaXNpYmxlID0g
dmlzaWJsZTsKKworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgi
c2V0SXNWaXNpYmxlIl9zLCB2aXNpYmxlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hh
bmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdl
QXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKK3sKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VTaGVldFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpTZXRTaGVldFJlY3QocmVjdCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworfQor
Cit2b2lkIFdlYkluc3BlY3RvclVJOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCit7
CisgICAgaWYgKG1fYmFja2VuZENvbm5lY3Rpb24pIHsKKyAgICAgICAgbV9iYWNrZW5kQ29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpPcGVuSW5OZXdUYWIodXJsKSwgMCk7
CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ0luc3BlY3RlZFBhZ2VU
b0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JVSTo6c2F2ZShjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMp
Cit7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRl
bnQsIGJhc2U2NEVuY29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBXVEY6OlN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50KQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3RlZFBh
Z2VJZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6SW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c2hvd0NlcnRpZmljYXRlKGNv
bnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQoreworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTaG93Q2VydGlmaWNhdGUoY2VydGlmaWNhdGVJbmZvKSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7Cit9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRS
WSkKK2Jvb2wgV2ViSW5zcGVjdG9yVUk6OnN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKQorewor
ICAgIHJldHVybiBtX3BhZ2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5kaWFnbm9zdGljTG9nZ2lu
Z0VuYWJsZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6bG9nRGlhZ25vc3RpY0V2ZW50
KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6
VmFsdWVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5k
aWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlRGlj
dGlvbmFyeShldmVudE5hbWUsICJXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNzIl9z
LCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JV
STo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCit7CisgICAg
Ly8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQgbmV2ZXIgYmUg
dXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCisgICAgQVNTRVJU
KCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKKyAgICBtX2RpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOworCisgICAgbV9mcm9udGVuZEFQSURp
c3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSJf
cywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2hvd0NvbnNvbGUoKQoreworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LmRpc3BhdGNoQ29tbWFuZCgic2hvd0NvbnNvbGUiX3MpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
clVJOjpzaG93UmVzb3VyY2VzKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNw
YXRjaENvbW1hbmQoInNob3dSZXNvdXJjZXMiX3MpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJ
OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUoY29uc3QgU3RyaW5nJiBmcmFtZUlkZW50aWZpZXIp
Cit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzaG93TWFp
blJlc291cmNlRm9yRnJhbWUiX3MsIGZyYW1lSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yVUk6OnN0YXJ0UGFnZVByb2ZpbGluZygpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3Bh
dGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQiX3MsIHRy
dWUpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpzdG9wUGFnZVByb2ZpbGluZygpCit7Cisg
ICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRUaW1lbGluZVBy
b2ZpbGluZ0VuYWJsZWQiX3MsIGZhbHNlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6c3Rh
cnRFbGVtZW50U2VsZWN0aW9uKCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNw
YXRjaENvbW1hbmQoInNldEVsZW1lbnRTZWxlY3Rpb25FbmFibGVkIl9zLCB0cnVlKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RvcEVsZW1lbnRTZWxlY3Rpb24oKQoreworICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RWxlbWVudFNlbGVjdGlvbkVu
YWJsZWQiX3MsIGZhbHNlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JVSTo6ZGlkU2F2ZShjb25z
dCBTdHJpbmcmIHVybCkKK3sKKyAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNhdmVkVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpkaWRB
cHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJhcHBlbmRlZFRvVVJMIl9zLCB1cmwpOworfQorCit2b2lkIFdlYklu
c3BlY3RvclVJOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoTWVzc2FnZUFzeW5jKG1lc3Nh
Z2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvclVJOjpwYWdlUGF1c2VkKCkKK3sKKyAgICBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlci5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6
OnBhZ2VVbnBhdXNlZCgpCit7CisgICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIudW5zdXNwZW5k
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwor
fQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1OYW1lOworfQorCitT
dHJpbmcgV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJzaW9uOworfQorCitTdHJpbmcg
V2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0VmVyc2lvbjsKK30KKworI2lmICFQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCitib29sIFdlYklu
c3BlY3RvclVJOjpjYW5TYXZlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJM
KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworfQorI2VuZGlmIC8vICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShXSU4pCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
OWYyMWM5YjYyMGMzZWY2ZjI1MDdkZDE2MjA2MGRhNDliNTUzOTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvclVJLmgKQEAg
LTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgorI2luY2x1
ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIldlYlBh
Z2VQcm94eUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2Fi
bGVUeXBlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBDZXJ0aWZpY2F0ZUlu
Zm87CitjbGFzcyBGbG9hdFJlY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJQYWdlOworCitjbGFzcyBXZWJJbnNwZWN0b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYklu
c3BlY3RvclVJPiwgcHJpdmF0ZSBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdl
Ykluc3BlY3RvclVJPiBjcmVhdGUoV2ViUGFnZSYpOworCisgICAgLy8gSW1wbGVtZW50ZWQgaW4g
Z2VuZXJhdGVkIFdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
CisKKyAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAorICAgIHZvaWQgZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyAvKiBEbyBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBh
Z2UgcHJvY2VzcyBtYXkgaGF2ZSBjcmFzaGVkIGFuZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4g
Ki8gfQorICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBj
bG9zZVdpbmRvdygpOyB9CisKKyAgICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2Fn
ZXMKKyAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBp
bnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1
bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25MZXZlbCk7CisgICAgdm9pZCB1cGRhdGVDb25u
ZWN0aW9uKCk7CisKKyAgICB2b2lkIHNob3dDb25zb2xlKCk7CisgICAgdm9pZCBzaG93UmVzb3Vy
Y2VzKCk7CisKKyAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcm
IGZyYW1lSWRlbnRpZmllcik7CisKKyAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOworICAg
IHZvaWQgc3RvcFBhZ2VQcm9maWxpbmcoKTsKKworICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0
aW9uKCk7CisgICAgdm9pZCBzdG9wRWxlbWVudFNlbGVjdGlvbigpOworCisgICAgdm9pZCBhdHRh
Y2hlZEJvdHRvbSgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkJvdHRvbSk7IH0KKyAgICB2b2lk
IGF0dGFjaGVkUmlnaHQoKSB7IHNldERvY2tTaWRlKERvY2tTaWRlOjpSaWdodCk7IH0KKyAgICB2
b2lkIGF0dGFjaGVkTGVmdCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9CisgICAg
dm9pZCBkZXRhY2hlZCgpIHsgc2V0RG9ja1NpZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsgfQorCisg
ICAgdm9pZCBzZXREb2NrU2lkZShEb2NrU2lkZSk7CisgICAgdm9pZCBzZXREb2NraW5nVW5hdmFp
bGFibGUoYm9vbCk7CisKKyAgICB2b2lkIHNldElzVmlzaWJsZShib29sKTsKKworICAgIHZvaWQg
ZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3Ry
aW5nJiB1cmwpOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
Jik7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICB2b2lkIHNldERpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKGJvb2wgYXZhbGlhYmxlKTsKKyNlbmRpZgorCisgICAgLy8g
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKKyAgICB2b2lkIHdpbmRvd09iamVjdENs
ZWFyZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHN0YXJ0V2luZG93RHJhZygpIG92ZXJyaWRlOworICAgIHZvaWQgbW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlbW90ZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NV
UkwoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVU
eXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1
Z2dhYmxlVHlwZTo6V2ViUGFnZTsgfQorICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBTdHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgU3RyaW5nIHRhcmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCB0YXJnZXRJc1NpbXVsYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9pbnNwZWN0aW9uTGV2ZWw7IH0KKworICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjbG9zZVdpbmRvdygpIG92ZXJyaWRlOworICAgIHZvaWQgcmVvcGVuKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXNldFN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICBXZWJDb3Jl
OjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24oKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tT
aWRlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQpIG92ZXJyaWRlOworCisgICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJp
bmcmIHVybCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZTsKKyAgICB2
b2lkIHNhdmUoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRl
bnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7CisgICAg
dm9pZCBhcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNv
bnRlbnQpIG92ZXJyaWRlOworCisgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxF
TUVUUlkpCisgICAgYm9vbCBzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGU7IH0KKyAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVu
dChjb25zdCBXVEY6OlN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisjZW5kaWYKKworICAg
IHZvaWQgc2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHBhZ2VQYXVzZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92
ZXJyaWRlOworCisgICAgYm9vbCBpc1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5k
ZXJUZXN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFn
ZSYpOworCisgICAgV2ViUGFnZSYgbV9wYWdlOworICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJ
RGlzcGF0Y2hlciBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsKKyAgICBSZWZQdHI8SVBDOjpD
b25uZWN0aW9uPiBtX2JhY2tlbmRDb25uZWN0aW9uOworCisgICAgLy8gS2VlcCBhIHBvaW50ZXIg
dG8gdGhlIGZyb250ZW5kJ3MgaW5zcGVjdG9yIGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcg
dGhyb3VnaAorICAgIC8vIGNvcmVQYWdlKCksIHNpbmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRo
ZSBmcm9udGVuZCdzIHBhZ2UgaGFzIHN0YXJ0ZWQgZGVzdHJ1Y3Rpb24uCisgICAgV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlciogbV9mcm9udGVuZENvbnRyb2xsZXIgeyBudWxscHRyIH07CisK
KyAgICBXZWJQYWdlUHJveHlJZGVudGlmaWVyIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7Cisg
ICAgYm9vbCBtX3VuZGVyVGVzdCB7IGZhbHNlIH07CisgICAgRGVidWdnYWJsZUluZm9EYXRhIG1f
ZGVidWdnYWJsZUluZm87CisgICAgYm9vbCBtX2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzVmlzaWJsZSB7IGZhbHNlIH07CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9U
RUxFTUVUUlkpCisgICAgYm9vbCBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2Ug
fTsKKyNlbmRpZgorCisgICAgRG9ja1NpZGUgbV9kb2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tl
ZCB9OworICAgIHVuc2lnbmVkIG1faW5zcGVjdGlvbkxldmVsIHsgMSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5z
cGVjdG9yL1dlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGYx
Mzg1ZDQ4OTU1NjI2OWJhZmE1N2MwNzVlYjRkYWYxM2UxNjM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JVSS5tZXNzYWdl
cy5pbgpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclVJIHsKKyAgICBFc3RhYmxpc2hD
b25uZWN0aW9uKFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRl
bnRpZmllciwgc3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZv
LCBib29sIHVuZGVyVGVzdCwgdW5zaWduZWQgaW5zcGVjdGlvbkxldmVsKQorICAgIFVwZGF0ZUNv
bm5lY3Rpb24oKQorCisgICAgQXR0YWNoZWRCb3R0b20oKQorICAgIEF0dGFjaGVkUmlnaHQoKQor
ICAgIEF0dGFjaGVkTGVmdCgpCisgICAgRGV0YWNoZWQoKQorICAgIFNldERvY2tpbmdVbmF2YWls
YWJsZShib29sIHVuYXZhaWxhYmxlKQorICAgIFNldElzVmlzaWJsZShib29sIHZpc2libGUpCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX1RFTEVNRVRSWSkKKyAgICBTZXREaWFnbm9zdGljTG9nZ2lu
Z0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKKyNlbmRpZgorCisgICAgU2hvd0NvbnNvbGUoKQor
ICAgIFNob3dSZXNvdXJjZXMoKQorCisgICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFN0cmlu
ZyBmcmFtZUlkZW50aWZpZXIpCisKKyAgICBTdGFydFBhZ2VQcm9maWxpbmcoKQorICAgIFN0b3BQ
YWdlUHJvZmlsaW5nKCkKKworICAgIFN0YXJ0RWxlbWVudFNlbGVjdGlvbigpCisgICAgU3RvcEVs
ZW1lbnRTZWxlY3Rpb24oKQorCisgICAgRGlkU2F2ZShTdHJpbmcgdXJsKQorICAgIERpZEFwcGVu
ZChTdHJpbmcgdXJsKQorCisgICAgU2VuZE1lc3NhZ2VUb0Zyb250ZW5kKFN0cmluZyBtZXNzYWdl
KQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTcwZjZmZDUyMDk2YTVk
Y2E5MDFlYTcwYTM3NTVmMTRkNmI0YTBmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldC5jcHAKQEAgLTAs
MCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Lmgi
CisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworV2ViUGFnZUluc3BlY3RvclRhcmdldDo6V2Vi
UGFnZUluc3BlY3RvclRhcmdldChXZWJQYWdlJiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7
Cit9CisKK1N0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjppZGVudGlmaWVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdG9UYXJnZXRJRChtX3BhZ2UuaWRlbnRpZmllcigpKTsKK30KKwordm9p
ZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojpjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBpZiAobV9jaGFubmVs
KQorICAgICAgICByZXR1cm47CisgICAgbV9jaGFubmVsID0gbWFrZVVuaXF1ZTxXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsPihtX3BhZ2UsIGlkZW50aWZpZXIoKSwgY29ubmVj
dGlvblR5cGUpOworICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKKyAgICAgICAgbV9wYWdlLmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5jb25uZWN0RnJvbnRlbmQoKm1fY2hhbm5l
bCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldDo6ZGlzY29ubmVjdCgpCit7Cisg
ICAgaWYgKCFtX2NoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9wYWdlLmNvcmVQ
YWdlKCkpCisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
ZGlzY29ubmVjdEZyb250ZW5kKCptX2NoYW5uZWwpOworICAgIG1fY2hhbm5lbC5yZXNldCgpOwor
fQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6OnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNr
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9wYWdlLmNvcmVQYWdlKCkp
CisgICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZGlzcGF0
Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3NhZ2UpOworfQorCitTdHJpbmcgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldDo6dG9UYXJnZXRJRChXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQpCit7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoInBhZ2UtIiwgcGFnZUlELnRvVUludDY0KCkpOworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42Y2JkN2ZhZDVmZjkxYWZkODU4ZGEzNDZhZGJmZWVkNjQyNGIwYjJiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVGFyZ2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUGFnZTsKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7
CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JUYXJnZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQpOworcHVibGljOgorICAg
IGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQoV2ViUGFnZSYpOworICAgIH5XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0OworCisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JU
YXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldFR5cGU6OlBhZ2U7IH0KKworICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmlu
YWw7CisKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5l
Y3Rpb25UeXBlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OworCisgICAgc3RhdGljIFN0cmluZyB0b1RhcmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
KTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlJiBtX3BhZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250
cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTAxN2M0ZWRhZjRiMzY4MDBkZDM5ZDI4OWMwNDdiMWEw
ZWQ5M2RkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3Bl
Y3Rvci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw5MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1
ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZUlu
c3BlY3RvclRhcmdldENvbnRyb2xsZXI6OldlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
KFdlYlBhZ2UmIHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKKyAgICAsIG1fcGFnZVRhcmdldChw
YWdlKQoreworICAgIC8vIERvIG5vdCBzZW5kIHRoZSBwYWdlIHRhcmdldCB0byB0aGUgVUlQcm9j
ZXNzLCB0aGUgV2ViUGFnZVByb3h5IHdpbGwgbWFuYWdlciB0aGlzIGZvciB1cy4KKyAgICBtX3Rh
cmdldHMuc2V0KG1fcGFnZVRhcmdldC5pZGVudGlmaWVyKCksICZtX3BhZ2VUYXJnZXQpOworfQor
CitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6fldlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJv
bGxlcjo6YWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQpCit7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3RhcmdldHMuc2V0KHRhcmdldC5pZGVudGlmaWVyKCksICZ0
YXJnZXQpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVJbnNw
ZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSwgdGFyZ2V0LnR5cGUoKSkpOworfQorCit2
b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpyZW1vdmVUYXJnZXQoSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXQmIHRhcmdldCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHRhcmdldC5pZGVudGlmaWVyKCkgIT0gbV9wYWdlVGFyZ2V0LmlkZW50aWZpZXIoKSwgIlNob3Vs
ZCBuZXZlciByZW1vdmUgdGhlIG1haW4gdGFyZ2V0LiIpOworCisgICAgbV9wYWdlLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGVzdHJveUluc3BlY3RvclRhcmdldCh0YXJnZXQuaWRlbnRp
ZmllcigpKSk7CisKKyAgICBtX3RhcmdldHMucmVtb3ZlKHRhcmdldC5pZGVudGlmaWVyKCkpOwor
fQorCit2b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpjb25uZWN0SW5zcGVj
dG9yKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpD
b25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFy
Z2V0cy5nZXQodGFyZ2V0SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisK
KyAgICB0YXJnZXQtPmNvbm5lY3QoY29ubmVjdGlvblR5cGUpOworfQorCit2b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpkaXNjb25uZWN0SW5zcGVjdG9yKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpCit7CisgICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElk
KTsKKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGFyZ2V0LT5kaXNj
b25uZWN0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OnNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBhdXRvIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0
SWQpOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB0YXJnZXQtPnNl
bmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
UGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YzkzMWRhZDFjOTgwMGYwM2Q3M2Q0YTdjYTI1ODhkZDAyOGE4ZjI0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKK2NsYXNzIEluc3BlY3RvclRhcmdldDsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRD
b250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcihXZWJQYWdlJik7CisgICAgfldlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyKCk7CisKKyAgICB2b2lkIGFkZFRhcmdldChJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldCYpOworICAgIHZvaWQgcmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6
SW5zcGVjdG9yVGFyZ2V0Jik7CisKKyAgICB2b2lkIGNvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBl
KTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7
CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25zdCBTdHJpbmcmIHRhcmdl
dElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCitwcml2YXRlOgorICAgIFdlYlBhZ2UmIG1f
cGFnZTsKKyAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0IG1fcGFnZVRhcmdldDsKKyAgICBIYXNo
TWFwPFN0cmluZywgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQqPiBtX3RhcmdldHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXRGcm9udGVuZENoYW5uZWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxYjVmNzEzNzMzYTA5NTI1MjEyMmYw
YTM4MDFmODJjOGM2MGQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5zcGVjdG9yL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuY3Bw
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbC5oIgorCisjaW5jbHVk
ZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpX
ZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSBjb25uZWN0aW9uVHlwZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV90YXJnZXRJ
ZCh0YXJnZXRJZCkKKyAgICAsIG1fY29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpCit7Cit9
CisKK3ZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbDo6c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3BhZ2Uuc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQobV90
YXJnZXRJZCwgbWVzc2FnZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE4
NGFjNWJkYTI4OTM4MmFlYjJjZjUwMTY5YzU5NTY3ZDRjZDJlOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViUGFnZUluc3BlY3RvclRhcmdl
dEZyb250ZW5kQ2hhbm5lbC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFz
cyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsIGZpbmFsIDogcHVibGljIElu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsKTsKK3B1YmxpYzoKKyAgICBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsKFdlYlBhZ2UmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOworICAgIHZpcnR1YWwgfldlYlBhZ2VJbnNwZWN0b3JU
YXJnZXRGcm9udGVuZENoYW5uZWwoKSA9IGRlZmF1bHQ7CisKK3ByaXZhdGU6CisgICAgQ29ubmVj
dGlvblR5cGUgY29ubmVjdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Nvbm5l
Y3Rpb25UeXBlOyB9CisgICAgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKSBvdmVycmlkZTsKKworICAgIFdlYlBhZ2UmIG1fcGFnZTsKKyAgICBTdHJpbmcg
bV90YXJnZXRJZDsKKyAgICBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5
cGUgbV9jb25uZWN0aW9uVHlwZSB7IEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0
aW9uVHlwZTo6UmVtb3RlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3BlY3RvclVJ
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvZ3RrL1dlYkluc3Bl
Y3RvclVJR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjRmOTdmZThkMGM2Zjg1M2I1ZGU1MWRiZjgzNGJk
MjNiYWY2NGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViSW5zcGVjdG9yVUkuaCIKKyNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgor
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFdl
Ykluc3BlY3RvclVJOjpjYW5TYXZlKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5n
IFdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gU3RyaW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25z
L2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKK30KKworU3RyaW5nIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCJyZXNvdXJjZTovLy9vcmcvd2Via2l0L2luc3BlY3Rvci9Mb2NhbGl6YXRpb25zL2VuLmxw
cm9qL2xvY2FsaXplZFN0cmluZ3MuanMiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL21hYy9XZWJJbnNw
ZWN0b3JVSU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvbWFjL1dl
Ykluc3BlY3RvclVJTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNTVmM2Q1OGExYTI4ZWU3N2Q1MGMwZGEx
Y2E4ZjYwNTA2ZWJjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5zcGVjdG9yL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkluc3BlY3Rv
clVJLmgiCisjaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5oIgorCisjaWYgUExBVEZPUk0o
TUFDKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2
ZSgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBTdHJpbmcgd2ViSW5zcGVjdG9y
VUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYkluc3BlY3RvclVJIl07Cisg
ICAgaWYgKCFidW5kbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIE5TU3RyaW5n
ICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5
cGU6QCJqcyJdOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IAorICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGggaXNEaXJlY3Rvcnk6Tk9d
LmFic29sdXRlU3RyaW5nOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0
cmluZ3NVUkwoKSBjb25zdAoreworICAgIHJldHVybiB3ZWJJbnNwZWN0b3JVSUxvY2FsaXplZFN0
cmluZ3NVUkwoKTsKK30KKworU3RyaW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRT
dHJpbmdzVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRT
dHJpbmdzVVJMKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5NDExZmRiMTk2
ZTIzYTc2ZjFkYmVjYjcxMGY2MGQ4MDRkMjYwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKKworI2luY2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJ
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkNvcmVCdW5kbGVXaW4uaD4KKyNpbmNsdWRlIDx3
dGYvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworYm9vbCBXZWJJbnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmlu
Z3NVUkwoKSBjb25zdAoreworI2lmIFVTRShDRikKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHN0
cmluZ3NVUkxSZWYgPSBhZG9wdENGKENGQnVuZGxlQ29weVJlc291cmNlVVJMKFdlYkNvcmU6Ondl
YktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5ncyIpLCBDRlNUUigianMiKSwgQ0ZT
VFIoIldlYkluc3BlY3RvclVJIikpKTsKKyAgICByZXR1cm4gQ0ZVUkxHZXRTdHJpbmcoc3RyaW5n
c1VSTFJlZi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKworU3Ry
aW5nIFJlbW90ZVdlYkluc3BlY3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKK3sK
KyNpZiBVU0UoQ0YpCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBzdHJpbmdzVVJMUmVmID0gYWRv
cHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZT
VFIoImxvY2FsaXplZFN0cmluZ3MiKSwgQ0ZTVFIoImpzIiksIENGU1RSKCJXZWJJbnNwZWN0b3JV
SSIpKSk7CisgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKHN0cmluZ3NVUkxSZWYuZ2V0KCkpOwor
I2Vsc2UKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGIwNjgwMTllZjg5ODJmZmE0ZjM3MTA4NzFhMjRlMWNlZDZhNzM1OC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDI1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudC5oIgotCi0jaW5jbHVkZSAiRHJhd2lu
Z0FyZWEuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yT3ZlcmxheS5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFJlcGFp
bnRJbmRpY2F0b3JMYXllckNsaWVudCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZXBhaW50SW5k
aWNhdG9yTGF5ZXJDbGllbnQoV2ViSW5zcGVjdG9yQ2xpZW50JiBpbnNwZWN0b3JDbGllbnQpCi0g
ICAgICAgIDogbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQotICAgIHsKLSAgICB9
Ci0gICAgdmlydHVhbCB+UmVwYWludEluZGljYXRvckxheWVyQ2xpZW50KCkgeyB9Ci1wcml2YXRl
OgotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uRW5kZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5
ZXIsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX2luc3BlY3RvckNs
aWVudC5hbmltYXRpb25FbmRlZEZvckxheWVyKGxheWVyKTsKLSAgICB9Ci0gICAgCi0gICAgV2Vi
SW5zcGVjdG9yQ2xpZW50JiBtX2luc3BlY3RvckNsaWVudDsKLX07Ci0KLVdlYkluc3BlY3RvckNs
aWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlBhZ2UqIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFn
ZSkKLSAgICAsIG1faGlnaGxpZ2h0T3ZlcmxheShudWxscHRyKQotewotfQotCi1XZWJJbnNwZWN0
b3JDbGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQoKQotewotICAgIGZvciAoYXV0byYgbGF5ZXIg
OiBtX3BhaW50UmVjdExheWVycykKLSAgICAgICAgbGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
LSAgICAKLSAgICBtX3BhaW50UmVjdExheWVycy5jbGVhcigpOwotCi0gICAgaWYgKG1fcGFpbnRS
ZWN0T3ZlcmxheSAmJiBtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1fcGFp
bnRSZWN0T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQotewotICAgIGlmIChX
ZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IG1fcGFnZS0+aW5zcGVjdG9yKFdlYlBhZ2U6OkxhenlD
cmVhdGlvblBvbGljeTo6VXNlRXhpc3RpbmdPbmx5KSkKLSAgICAgICAgaW5zcGVjdG9yLT5jbG9z
ZSgpOwotCi0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpm
cm9udGVuZENvdW50Q2hhbmdlZCh1bnNpZ25lZCBjb3VudCkKLXsKLSAgICBtX3BhZ2UtPmluc3Bl
Y3RvckZyb250ZW5kQ291bnRDaGFuZ2VkKGNvdW50KTsKLX0KLQotSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWwqIFdlYkluc3BlY3RvckNsaWVudDo6b3BlbkxvY2FsRnJvbnRlbmQoSW5zcGVjdG9y
Q29udHJvbGxlciogY29udHJvbGxlcikKLXsKLSAgICBtX3BhZ2UtPmluc3BlY3RvcigpLT5vcGVu
TG9jYWxJbnNwZWN0b3JGcm9udGVuZChjb250cm9sbGVyLT5pc1VuZGVyVGVzdCgpKTsKLQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YnJpbmdGcm9u
dGVuZFRvRnJvbnQoKQotewotICAgIGlmIChtX3BhZ2UtPmluc3BlY3RvcigpKQotICAgICAgICBt
X3BhZ2UtPmluc3BlY3RvcigpLT5icmluZ1RvRnJvbnQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmRpZFJlc2l6ZU1haW5GcmFtZShGcmFtZSopCi17Ci0gICAgaWYgKG1fcGFnZS0+
aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnVwZGF0ZURvY2tpbmdB
dmFpbGFiaWxpdHkoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCgp
Ci17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKCFtX2hpZ2hsaWdodE92ZXJsYXkpIHsKLSAgICAgICAgYXV0byBo
aWdobGlnaHRPdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgICAgIG1f
aGlnaGxpZ2h0T3ZlcmxheSA9IGhpZ2hsaWdodE92ZXJsYXkucHRyKCk7Ci0gICAgICAgIG1fcGFn
ZS0+Y29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuaW5zdGFsbFBhZ2VPdmVybGF5
KFdURk1vdmUoaGlnaGxpZ2h0T3ZlcmxheSksIFBhZ2VPdmVybGF5OjpGYWRlTW9kZTo6RmFkZSk7
Ci0gICAgICAgIG1faGlnaGxpZ2h0T3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9oaWdobGlnaHRPdmVybGF5LT5zdG9wRmFkZU91dEFuaW1hdGlvbigp
OwotICAgICAgICBtX2hpZ2hsaWdodE92ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwotICAgIH0K
LSNlbHNlCi0gICAgSGlnaGxpZ2h0IGhpZ2hsaWdodDsKLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5nZXRIaWdobGlnaHQoaGlnaGxpZ2h0LCBJbnNwZWN0b3JP
dmVybGF5OjpDb29yZGluYXRlU3lzdGVtOjpEb2N1bWVudCk7Ci0gICAgbV9wYWdlLT5zaG93SW5z
cGVjdG9ySGlnaGxpZ2h0KGhpZ2hsaWdodCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQotewotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmIChtX2hpZ2hsaWdodE92ZXJsYXkpCi0gICAgICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+
cGFnZU92ZXJsYXlDb250cm9sbGVyKCkudW5pbnN0YWxsUGFnZU92ZXJsYXkoKm1faGlnaGxpZ2h0
T3ZlcmxheSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpGYWRlKTsKLSNlbHNlCi0gICAgbV9wYWdl
LT5oaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OnNob3dQYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlm
ICghbV9wYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wYWludFJlY3RPdmVybGF5
KSB7Ci0gICAgICAgIG1fcGFpbnRSZWN0T3ZlcmxheSA9IFBhZ2VPdmVybGF5OjpjcmVhdGUoKnRo
aXMsIFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwotICAgICAgICBtX3BhZ2Ut
PmNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheSgq
bV9wYWludFJlY3RPdmVybGF5LCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFtX3BhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQpCi0gICAgICAgIG1f
cGFpbnRJbmRpY2F0b3JMYXllckNsaWVudCA9IG1ha2VVbmlxdWU8UmVwYWludEluZGljYXRvckxh
eWVyQ2xpZW50PigqdGhpcyk7Ci0KLSAgICBhdXRvIHBhaW50TGF5ZXIgPSBHcmFwaGljc0xheWVy
OjpjcmVhdGUobV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAq
bV9wYWludEluZGljYXRvckxheWVyQ2xpZW50KTsKLSAgICAKLSAgICBwYWludExheWVyLT5zZXRO
YW1lKCJwYWludCByZWN0Iik7Ci0gICAgcGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDNEKCkpOwotICAgIHBhaW50TGF5ZXItPnNldFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7
Ci0gICAgcGFpbnRMYXllci0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgcGFpbnRMYXllci0+
c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKLQotICAg
IEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
OwotICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1
ZT4oMCwgMSkpOwotCi0gICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFu
aW1hdGlvblZhbHVlPigwLjI1LCAwKSk7Ci0gICAgCi0gICAgYXV0byBvcGFjaXR5QW5pbWF0aW9u
ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAgICBvcGFjaXR5QW5pbWF0aW9uLT5zZXREdXJhdGlv
bigwLjI1KTsKLQotICAgIHBhaW50TGF5ZXItPmFkZEFuaW1hdGlvbihmYWRlS2V5ZnJhbWVzLCBG
bG9hdFNpemUoKSwgb3BhY2l0eUFuaW1hdGlvbi5wdHIoKSwgIm9wYWNpdHkiX3MsIDApOwotICAg
IAotICAgIEdyYXBoaWNzTGF5ZXImIHJhd0xheWVyID0gcGFpbnRMYXllci5nZXQoKTsKLSAgICBt
X3BhaW50UmVjdExheWVycy5hZGQoV1RGTW92ZShwYWludExheWVyKSk7Ci0KLSAgICBHcmFwaGlj
c0xheWVyJiBvdmVybGF5Um9vdExheWVyID0gbV9wYWludFJlY3RPdmVybGF5LT5sYXllcigpOwot
ICAgIG92ZXJsYXlSb290TGF5ZXIuYWRkQ2hpbGQocmF3TGF5ZXIpOwotfQotCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6YW5pbWF0aW9uRW5kZWRGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVy
KiBsYXllcikKLXsKLSAgICBHcmFwaGljc0xheWVyKiBub25Db25zdExheWVyID0gY29uc3RfY2Fz
dDxHcmFwaGljc0xheWVyKj4obGF5ZXIpOwotICAgIG5vbkNvbnN0TGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICBtX3BhaW50UmVjdExheWVycy5yZW1vdmUoKm5vbkNvbnN0TGF5ZXIpOwot
fQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpz
aG93SW5zcGVjdG9ySW5kaWNhdGlvbigpCi17Ci0gICAgbV9wYWdlLT5zaG93SW5zcGVjdG9ySW5k
aWNhdGlvbigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUluc3BlY3Rvcklu
ZGljYXRpb24oKQotewotICAgIG1fcGFnZS0+aGlkZUluc3BlY3RvckluZGljYXRpb24oKTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZFNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkKQotewotICAgIGlmIChlbmFibGVkKQotICAgICAgICBtX3BhZ2UtPmVuYWJsZUluc3Bl
Y3Rvck5vZGVTZWFyY2goKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGFnZS0+ZGlzYWJsZUluc3Bl
Y3Rvck5vZGVTZWFyY2goKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
ZWxlbWVudFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+
aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPmVsZW1lbnRTZWxlY3Rp
b25DaGFuZ2VkKGFjdGl2ZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGlu
ZVJlY29yZGluZ0NoYW5nZWQoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1fcGFnZS0+aW5zcGVj
dG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnRpbWVsaW5lUmVjb3JkaW5nQ2hh
bmdlZChhY3RpdmUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJsZWQpCi17Ci0gICAg
aWYgKG1fcGFnZS0+aW5zcGVjdG9yKCkpCi0gICAgICAgIG1fcGFnZS0+aW5zcGVjdG9yKCktPnNl
dE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OndpbGxNb3ZlVG9QYWdlKFBhZ2VPdmVybGF5JiwgUGFnZSogcGFn
ZSkKLXsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIHBhZ2Ug
b3ZlcmxheSBpcyBtb3ZpbmcgYXdheSBmcm9tIHRoZSB3ZWIgcGFnZSwgcmVzZXQgaXQuCi0gICAg
QVNTRVJUKG1faGlnaGxpZ2h0T3ZlcmxheSk7Ci0gICAgbV9oaWdobGlnaHRPdmVybGF5ID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRpZE1vdmVUb1BhZ2UoUGFnZU92
ZXJsYXkmLCBQYWdlKikKLXsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRyYXdSZWN0
KFBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiAvKmRpcnR5UmVjdCovKQotewotICAgIG1fcGFnZS0+Y29yZVBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7Ci19Ci0KLWJv
b2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojptb3VzZUV2ZW50KFBhZ2VPdmVybGF5JiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyN2MzZWUxNDJlMTYxNmU0MzVmNDhkNDFmMjcyNzE1ZmU4ZTAzODJmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdl
T3ZlcmxheS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBJ
bnRSZWN0OwotY2xhc3MgUGFnZU92ZXJsYXk7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJQYWdlOwotY2xhc3MgUmVwYWludEluZGljYXRvckxheWVyQ2xpZW50OwotCi1jbGFz
cyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBw
cml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotZnJpZW5kIGNsYXNzIFJlcGFpbnRJbmRpY2F0b3JMYXllckNsaWVudDsKLXB1
YmxpYzoKLSAgICBXZWJJbnNwZWN0b3JDbGllbnQoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfldl
Ykluc3BlY3RvckNsaWVudCgpOwotCi1wcml2YXRlOgotICAgIC8vIFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudAotICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAg
IHZvaWQgZnJvbnRlbmRDb3VudENoYW5nZWQodW5zaWduZWQpIG92ZXJyaWRlOwotCi0gICAgSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIG9wZW5Mb2NhbEZyb250ZW5kKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIGJyaW5nRnJvbnRlbmRUb0Zyb250
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZXNpemVNYWluRnJhbWUoV2ViQ29yZTo6RnJhbWUq
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgaGlnaGxpZ2h0KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KCkgb3ZlcnJpZGU7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IHZvaWQgc2hvd0luc3BlY3RvckluZGljYXRpb24oKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZGVJ
bnNwZWN0b3JJbmRpY2F0aW9uKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRpZFNldFNlYXJjaGlu
Z0Zvck5vZGUoYm9vbCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgZWxlbWVudFNlbGVj
dGlvbkNoYW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0aW1lbGluZVJlY29yZGluZ0No
YW5nZWQoYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIG92ZXJyaWRlc1Nob3dQYWludFJlY3Rz
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgc2hvd1BhaW50UmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KSBmaW5hbDsKLQot
ICAgIC8vIFBhZ2VPdmVybGF5OjpDbGllbnQKLSAgICB2b2lkIHdpbGxNb3ZlVG9QYWdlKFdlYkNv
cmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6UGFnZSopIG92ZXJyaWRlOwotICAgIHZvaWQgZGlk
TW92ZVRvUGFnZShXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OlBhZ2UqKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJv
b2wgbW91c2VFdmVudChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIGNvbnN0IFdlYkNvcmU6OlBsYXRm
b3JtTW91c2VFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhbmltYXRpb25FbmRlZEZvckxh
eWVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLQotICAgIFdlYlBhZ2UqIG1fcGFn
ZTsKLSAgICBXZWJDb3JlOjpQYWdlT3ZlcmxheSogbV9oaWdobGlnaHRPdmVybGF5OwotICAgIAot
ICAgIFJlZlB0cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4gbV9wYWludFJlY3RPdmVybGF5OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZXBhaW50SW5kaWNhdG9yTGF5ZXJDbGllbnQ+IG1fcGFpbnRJbmRp
Y2F0b3JMYXllckNsaWVudDsKLSAgICBIYXNoU2V0PFJlZjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
Pj4gbV9wYWludFJlY3RMYXllcnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3Rv
clVJLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3Bl
Y3RvclVJLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU4ZDhmMGMyNDYyMjg2
OTg5MWQxOTJhZTljZDcxYTg5MmVhZWJhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVX
ZWJJbnNwZWN0b3JVSS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVXZWJJbnNwZWN0b3JV
SS5oIgotCi0jaW5jbHVkZSAiUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2lu
Y2x1ZGUgIlJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUHJv
Y2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9DaHJvbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdyYXBwZXJXb3JsZC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotCi0jaWYgIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLSNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPFJlbW90ZVdlYkluc3BlY3RvclVJPiBS
ZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y3JlYXRlKFdlYlBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUmVtb3RlV2ViSW5zcGVjdG9yVUkocGFnZSkpOwotfQotCi1SZW1vdGVX
ZWJJbnNwZWN0b3JVSTo6UmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYgcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotICAgICwgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIocGFnZSkKLXsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6aW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0Rh
dGEmJiBkZWJ1Z2dhYmxlSW5mbywgY29uc3QgU3RyaW5nJiBiYWNrZW5kQ29tbWFuZHNVUkwpCi17
Ci0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IFdURk1vdmUoZGVidWdnYWJsZUluZm8pOwotICAgIG1f
YmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOwotCi0gICAgbV9wYWdlLmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCh0aGlzKTsKLQotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLnJlc2V0KCk7Ci0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREb2NraW5nVW5hdmFpbGFi
bGUiX3MsIHRydWUpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNv
bnN0IFN0cmluZyYgdXJsKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNo
Q29tbWFuZCgic2F2ZWRVUkwiX3MsIHVybCk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFwcGVuZGVkVG9VUkwiX3MsIHVybCk7Ci19Ci0KLXZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNz
YWdlQXN5bmMobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSksIG1f
cGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjp3aW5k
b3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgIG1f
ZnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0KLSAgICBtX2Zyb250ZW5kSG9zdCA9
IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5jb3JlUGFnZSgpKTsK
LSAgICBtX2Zyb250ZW5kSG9zdC0+YWRkU2VsZlRvR2xvYmFsT2JqZWN0SW5Xb3JsZChtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmZyb250
ZW5kTG9hZGVkKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5mcm9udGVuZExvYWRl
ZCgpOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJ
c1Zpc2libGUiX3MsIHRydWUpOwotCi0gICAgYnJpbmdUb0Zyb250KCk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChy
ZWN0KSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9y
VUk6OnN0YXJ0V2luZG93RHJhZygpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9y
UHJveHk6OlN0YXJ0V2luZG93RHJhZygpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9p
ZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS53
aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLmNvcmVQ
YWdlKCktPmNocm9tZSgpLnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKLX0KLQotV2ViQ29yZTo6
VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS5jb3Jl
UGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Ci19Ci0KLXZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9Gcm9udCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQotewotICAgIG1fcGFn
ZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQobnVsbHB0cik7Ci0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6
RnJvbnRlbmREaWRDbG9zZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBSZW1v
dGVXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eTo6UmVvcGVuKCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFJl
bW90ZVdlYkluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eTo6UmVzZXRTdGF0ZSgpLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0K
LQotdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYg
dXJsKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpPcGVuSW5OZXdU
YWIodXJsKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVj
dG9yVUk6OnNhdmUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50
LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCi17Ci0gICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVu
Y29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9wYWdlLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6
OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12
b2lkIFJlbW90ZVdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nKQotewotICAgIC8vIERvIG5vdGhpbmcuIFRoZSByZW1vdGUgc2lkZSBjYW4g
a25vdyBpZiB0aGUgbWFpbiByZXNvdXJjZSBjaGFuZ2VkLgotfQotCi12b2lkIFJlbW90ZVdlYklu
c3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZp
Y2F0ZUluZm8pCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OlNob3dD
ZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX3BhZ2UuaWRlbnRpZmllcigpKTsKLX0KLQot
SW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZSBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6ZGVidWdnYWJs
ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLmRlYnVnZ2FibGVU
eXBlOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFBsYXRmb3JtTmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0UGxhdGZvcm1O
YW1lOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldEJ1aWxkVmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGVidWdnYWJsZUluZm8udGFyZ2V0QnVpbGRWZXJz
aW9uOwotfQotCi1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OnRhcmdldFByb2R1Y3RWZXJz
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxlSW5mby50YXJnZXRQcm9kdWN0
VmVyc2lvbjsKLX0KLQotYm9vbCBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6dGFyZ2V0SXNTaW11bGF0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZvLnRhcmdldElzU2ltdWxh
dG9yOwotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi1ib29sIFJlbW90ZVdl
Ykluc3BlY3RvclVJOjpzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkKLXsKLSAgICByZXR1cm4g
bV9wYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuZGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKCk7
Ci19Ci0KLXZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvZ0RpYWdub3N0aWNFdmVudChjb25z
dCBTdHJpbmcmIGV2ZW50TmFtZSwgIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1
ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnkpCi17Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9u
YXJ5KGV2ZW50TmFtZSwgIlJlbW90ZSBXZWIgSW5zcGVjdG9yIEZyb250ZW5kIERpYWdub3N0aWNz
Il9zLCBkaWN0aW9uYXJ5LCBTaG91bGRTYW1wbGU6Ok5vKTsKLX0KLQotdm9pZCBSZW1vdGVXZWJJ
bnNwZWN0b3JVSTo6c2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUp
Ci17Ci0gICAgLy8gSW5zcGVjdG9yJ3MgZGlhZ25vc3RpYyBsb2dnaW5nIGNsaWVudCBzaG91bGQg
bmV2ZXIgYmUgdXNlZCB1bmxlc3MgdGhlIHBhZ2Ugc2V0dGluZyBpcyBhbHNvIGVuYWJsZWQuCi0g
ICAgQVNTRVJUKCFhdmFpbGFibGUgfHwgc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKLSAg
ICBtX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gYXZhaWxhYmxlOwotCi0gICAgbV9mcm9u
dGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXREaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSJfcywgbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk7Ci19Ci0jZW5kaWYKLQot
I2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCi1T
dHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0j
ZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJ
TikKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjRhZTFjMWRhYTE2NDdhMjExYmFmMGQ0MDA1OTliNzMxMTI4N2EyOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgot
I2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBSZW1vdGVX
ZWJJbnNwZWN0b3JVSSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVdlYkluc3BlY3Rv
clVJPiwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyLCBwdWJsaWMgV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlV2ViSW5z
cGVjdG9yVUk+IGNyZWF0ZShXZWJQYWdlJik7Ci0KLSAgICAvLyBJbXBsZW1lbnRlZCBpbiBnZW5l
cmF0ZWQgUmVtb3RlV2ViSW5zcGVjdG9yVUlNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKLQotICAgIC8vIENhbGxlZCBieSBSZW1vdGVXZWJJbnNwZWN0b3JVSSBtZXNzYWdlcwotICAg
IHZvaWQgaW5pdGlhbGl6ZShEZWJ1Z2dhYmxlSW5mb0RhdGEmJiwgY29uc3QgU3RyaW5nJiBiYWNr
ZW5kQ29tbWFuZHNVUkwpOwotICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcmIHVybCk7Ci0g
ICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgc2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxF
TUVUUlkpCi0gICAgdm9pZCBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShib29sKTsKLSNl
bmRpZgotCi0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQKLSAgICB2b2lk
IHdpbmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVk
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFdpbmRvd0RyYWcoKSBvdmVycmlkZTsK
LSAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBvdmVycmlkZTsKLQotICAg
IGJvb2wgaXNSZW1vdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgU3RyaW5n
IGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgYmFja2Vu
ZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kQ29tbWFuZHNVUkw7
IH0KLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRhcmdldFBsYXRmb3JtTmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFN0cmluZyB0YXJnZXRCdWlsZFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBT
dHJpbmcgdGFyZ2V0UHJvZHVjdFZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHRh
cmdldElzU2ltdWxhdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbG9zZVdpbmRvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByZXNldFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihj
b25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzYXZlKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3Jj
ZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29udGVudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hvd0NlcnRpZmljYXRlKGNv
bnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1l
c3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX1RFTEVNRVRSWSkKLSAgICBib29sIHN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSBv
dmVycmlkZTsKLSAgICBib29sIGRpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZTsgfQotICAgIHZvaWQgbG9nRGlh
Z25vc3RpY0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYK
LQotICAgIGJvb2wgY2FuU2F2ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29s
IGlzVW5kZXJUZXN0KCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB1bnNpZ25lZCBp
bnNwZWN0aW9uTGV2ZWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAxOyB9Ci0gICAgdm9pZCBy
ZXF1ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hhbmdl
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY2hh
bmdlQXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCkgb3ZlcnJpZGUgeyB9Ci0KLXByaXZhdGU6
Ci0gICAgZXhwbGljaXQgUmVtb3RlV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2Vi
UGFnZSYgbV9wYWdlOwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zy
b250ZW5kQVBJRGlzcGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsKLSAgICBEZWJ1Z2dhYmxlSW5mb0RhdGEgbV9kZWJ1Z2dh
YmxlSW5mbzsKLSAgICBTdHJpbmcgbV9iYWNrZW5kQ29tbWFuZHNVUkw7Ci0KLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX1RFTEVNRVRSWSkKLSAgICBib29sIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUgeyBmYWxzZSB9OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3Rv
clVJLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
V2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJiZjdlNGM4NzhkYTFlMzQ4OWI5ODI0Y2NkNmQ4NjE4NDQ0ZWE5ZGUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApA
QCAtMSwzNCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotbWVzc2FnZXMgLT4gUmVtb3RlV2ViSW5zcGVjdG9yVUkgewotICAgIEluaXRpYWxpemUo
c3RydWN0IFdlYktpdDo6RGVidWdnYWJsZUluZm9EYXRhIGRlYnVnZ2FibGVJbmZvLCBTdHJpbmcg
YmFja2VuZENvbW1hbmRzVVJMKQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0g
ICAgU2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFibGUpCi0jZW5kaWYK
LQotICAgIERpZFNhdmUoU3RyaW5nIHVybCkKLSAgICBEaWRBcHBlbmQoU3RyaW5nIHVybCkKLQot
ICAgIFNlbmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmcgbWVzc2FnZSkKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzMzIyNWQxM2RkM2E4ZTFiZThmODNkZWI3NWYzNzI5ZWU1MjJk
MmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvci5oIgotCi0jaW5jbHVkZSAiV2ViRnJhbWUu
aCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkluc3Bl
Y3RvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSU1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRSZXF1ZXN0
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvSW5zcGVjdG9yUGFnZUFnZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0aW9u
QWN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KLQotc3RhdGljIGNvbnN0IGZsb2F0
IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MDsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVt
QXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzU7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0
dGFjaGVkV2lkdGggPSA1MDA7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLVJlZjxXZWJJbnNwZWN0b3I+IFdlYkluc3BlY3Rvcjo6Y3JlYXRlKFdlYlBh
Z2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViSW5zcGVjdG9yKHBhZ2Up
KTsKLX0KLQotV2ViSW5zcGVjdG9yOjpXZWJJbnNwZWN0b3IoV2ViUGFnZSogcGFnZSkKLSAgICA6
IG1fcGFnZShwYWdlKQotewotfQotCi1XZWJJbnNwZWN0b3I6On5XZWJJbnNwZWN0b3IoKQotewot
ICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rp
b24tPmludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6Om9wZW5Mb2NhbEluc3Bl
Y3RvckZyb250ZW5kKGJvb2wgdW5kZXJUZXN0KQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpPcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChjYW5BdHRhY2hXaW5kb3coKSwgdW5k
ZXJUZXN0KSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6
c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklk
ZW50aWZpZXIpCi17Ci0gICAgLy8gV2UgbWlnaHQgcmVjZWl2ZSBtdWx0aXBsZSB1cGRhdGVzIGlm
IHRoaXMgd2ViIHByb2Nlc3MgZ290IHN3YXBwZWQgaW50byBhIFdlYlBhZ2VQcm94eQotICAgIC8v
IHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBwcm9jZXNzIGVzdGFibGlzaGVkIHRoZSBjb25uZWN0aW9u
LgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IG51
bGxwdHI7Ci0gICAgfQotCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCi0gICAgSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVuY29kZWRDb25uZWN0
aW9uSWRlbnRpZmllci5yZWxlYXNlRmlsZURlc2NyaXB0b3IoKSk7Ci0jZWxpZiBPUyhEQVJXSU4p
Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKGVu
Y29kZWRDb25uZWN0aW9uSWRlbnRpZmllci5wb3J0KCkpOwotI2VsaWYgT1MoV0lORE9XUykKLSAg
ICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoZW5jb2Rl
ZENvbm5lY3Rpb25JZGVudGlmaWVyLmhhbmRsZSgpKTsKLSNlbHNlCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIGlmICghSVBDOjpDb25uZWN0aW9uOjpp
ZGVudGlmaWVySXNWYWxpZChjb25uZWN0aW9uSWRlbnRpZmllcikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVDbGll
bnRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7Ci0gICAgbV9mcm9udGVu
ZENvbm5lY3Rpb24tPm9wZW4oKTsKLQotICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX2Zyb250
ZW5kQ29ubmVjdGlvbkFjdGlvbnMpCi0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgbV9mcm9udGVu
ZENvbm5lY3Rpb25BY3Rpb25zLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpjbG9z
ZUZyb250ZW5kQ29ubmVjdGlvbigpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkRpZENsb3NlKCksIG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLQotICAgIC8vIElmIHdlIHRyaWVk
IHRvIGNsb3NlIHRoZSBmcm9udGVuZCBiZWZvcmUgaXQgd2FzIGNyZWF0ZWQsIHRoZW4gbm8gY29u
bmVjdGlvbiBleGlzdHMgeWV0LgotICAgIGlmIChtX2Zyb250ZW5kQ29ubmVjdGlvbikgewotICAg
ICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwotICAgICAgICBtX2Zyb250
ZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9mcm9udGVuZENvbm5lY3Rp
b25BY3Rpb25zLmNsZWFyKCk7Ci0KLSAgICBtX2F0dGFjaGVkID0gZmFsc2U7Ci0gICAgbV9wcmV2
aW91c0NhbkF0dGFjaCA9IGZhbHNlOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zy
b250KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCks
IG1fcGFnZS0+aWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OndoZW5Gcm9u
dGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCi17
Ci0gICAgaWYgKG1fZnJvbnRlbmRDb25uZWN0aW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbkFjdGlvbnMu
YXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKLX0KLQotLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3Rv
ciBtZXNzYWdlcwotdm9pZCBXZWJJbnNwZWN0b3I6OnNob3coKQotewotICAgIGlmICghbV9wYWdl
LT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpj
bG9zZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIENsb3NlIGNvdWxkIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGVh
cmRvd24uCi0gICAgaWYgKCFtX2Zyb250ZW5kQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2xvc2VGcm9udGVuZENvbm5lY3Rpb24oKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6
Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLXsKLSAgICBVc2VyR2VzdHVy
ZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfTsKLQotICAgIFBh
Z2UqIGluc3BlY3RlZFBhZ2UgPSBtX3BhZ2UtPmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFpbnNwZWN0
ZWRQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSYgaW5zcGVjdGVkTWFpbkZyYW1l
ID0gaW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZUxvYWRSZXF1ZXN0IHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1bWVudCgpLCBpbnNwZWN0ZWRN
YWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0IHsg
dXJsU3RyaW5nIH0sICJfYmxhbmsiX3MsIExvY2tIaXN0b3J5OjpObywgTG9ja0JhY2tGb3J3YXJk
TGlzdDo6Tm8sIE1heWJlU2VuZFJlZmVycmVyLCBBbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkw6
OlllcywgTmV3RnJhbWVPcGVuZXJQb2xpY3k6OkFsbG93LCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGROb3RBbGxvdywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsK
LQotICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uIHsgKmluc3BlY3RlZE1haW5GcmFtZS5kb2N1
bWVudCgpLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBmcmFtZUxvYWRSZXF1
ZXN0LmluaXRpYXRlZEJ5TWFpbkZyYW1lKCksIE5hdmlnYXRpb25UeXBlOjpMaW5rQ2xpY2tlZCB9
OwotICAgIFBhZ2UqIG5ld1BhZ2UgPSBpbnNwZWN0ZWRQYWdlLT5jaHJvbWUoKS5jcmVhdGVXaW5k
b3coaW5zcGVjdGVkTWFpbkZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LCB7IH0sIGFjdGlvbik7Ci0g
ICAgaWYgKCFuZXdQYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBuZXdQYWdlLT5tYWluRnJh
bWUoKS5sb2FkZXIoKS5sb2FkKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3Rvcjo6ZXZhbHVhdGVTY3JpcHRGb3JUZXN0KGNvbnN0IFN0cmluZyYgc2NyaXB0
KQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5ldmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKHNjcmlwdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93Q29uc29s
ZSgpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQot
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dDb25z
b2xlKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291cmNl
cygpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnNob3coKTsKLQot
ICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChbPV0gewotICAgICAgICBtX2Zy
b250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNob3dSZXNv
dXJjZXMoKSwgMCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFpblJl
c291cmNlRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllcikK
LXsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFt
ZShmcmFtZUlkZW50aWZpZXIpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bh
Z2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7Ci0KLSAgICBTdHJp
bmcgaW5zcGVjdG9yRnJhbWVJZGVudGlmaWVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkuZW5zdXJlUGFnZUFnZW50KCkuZnJhbWVJZChmcmFtZS0+Y29yZUZyYW1l
KCkpOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAg
ICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U2hvd01haW5SZXNvdXJjZUZvckZyYW1lKGluc3BlY3RvckZyYW1lSWRlbnRpZmllciksIDApOwot
ICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3RhcnRQYWdlUHJvZmlsaW5nKCkKLXsK
LSAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9w
YWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2hvdygpOwotCi0gICAgd2hl
bkZyb250ZW5kQ29ubmVjdGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRD
b25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RhcnRQYWdlUHJvZmls
aW5nKCksIDApOwotICAgIH0pOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6c3RvcFBhZ2VQcm9m
aWxpbmcoKQotewotICAgIGlmICghbV9wYWdlLT5jb3JlUGFnZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5zaG93KCk7
Ci0KLSAgICB3aGVuRnJvbnRlbmRDb25uZWN0aW9uRXN0YWJsaXNoZWQoWz1dIHsKLSAgICAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTdG9w
UGFnZVByb2ZpbGluZygpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3I6OnN0
YXJ0RWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHdoZW5Gcm9udGVuZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChb
PV0gewotICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCAwKTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3I6OnN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1fcGFn
ZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hlbkZyb250ZW5kQ29ubmVj
dGlvbkVzdGFibGlzaGVkKFs9XSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgMCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjplbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChi
b29sIGFjdGl2ZSkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RWxlbWVudFNl
bGVjdGlvbkNoYW5nZWQoYWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lk
IFdlYkluc3BlY3Rvcjo6dGltZWxpbmVSZWNvcmRpbmdDaGFuZ2VkKGJvb2wgYWN0aXZlKQotewot
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpUaW1lbGluZVJlY29yZGluZ0NoYW5nZWQo
YWN0aXZlKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYkluc3BlY3Rvcjo6
c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92ZXJyaWRlKE9wdGlvbmFsPGJvb2w+IGVuYWJs
ZWQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldE1vY2tDYXB0dXJlRGV2
aWNlc0VuYWJsZWRPdmVycmlkZShlbmFibGVkKSwgbV9wYWdlLT5pZGVudGlmaWVyKCkpOwotfQot
Ci1ib29sIFdlYkluc3BlY3Rvcjo6Y2FuQXR0YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIW1fcGFn
ZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG9uJ3QgYWxs
b3cgYXR0YWNoaW5nIHRvIGFub3RoZXIgaW5zcGVjdG9yIC0tIHR3byBpbnNwZWN0b3JzIGluIG9u
ZSB3aW5kb3cgaXMgdG9vIG11Y2ghCi0gICAgaWYgKG1fcGFnZS0+aXNJbnNwZWN0b3JQYWdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IGF0dGFj
aGVkLCBhbGxvdyBhdHRhY2hpbmcgYWdhaW4gdG8gYWxsb3cgc3dpdGNoaW5nIHNpZGVzLgotICAg
IGlmIChtX2F0dGFjaGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERvbid0IGFs
bG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21t
b2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIHNpemUuCi0gICAgdW5zaWduZWQgaW5zcGVjdGVk
UGFnZUhlaWdodCA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT52aXNp
YmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZVdpZHRoID0gbV9wYWdlLT5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPnZpc2libGVXaWR0aCgpOwotICAgIHVuc2ln
bmVkIG1heGltdW1BdHRhY2hlZEhlaWdodCA9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVt
QXR0YWNoZWRIZWlnaHRSYXRpbzsKLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9
IG1heGltdW1BdHRhY2hlZEhlaWdodCAmJiBtaW5pbXVtQXR0YWNoZWRXaWR0aCA8PSBpbnNwZWN0
ZWRQYWdlV2lkdGg7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxh
YmlsaXR5KCkKLXsKLSAgICBpZiAobV9hdHRhY2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ym9vbCBjYW5BdHRhY2hXaW5kb3cgPSB0aGlzLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICBpZiAo
bV9wcmV2aW91c0NhbkF0dGFjaCA9PSBjYW5BdHRhY2hXaW5kb3cpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7Ci0KLSAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRh
Y2hXaW5kb3cpLCBtX3BhZ2UtPmlkZW50aWZpZXIoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiODllNTIyNzc5NzhkNTNhMzNmZTNj
NzExNWVhZWJiYjM4Mjk1OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBUElPYmplY3QuaCIKLSNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZUlkZW50aWZpZXIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdl
YlBhZ2U7Ci0KLWNsYXNzIFdlYkluc3BlY3RvciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OkJ1bmRsZUluc3BlY3Rvcj4sIHByaXZhdGUgSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9yPiBjcmVhdGUo
V2ViUGFnZSopOwotCi0gICAgV2ViUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsg
fQotCi0gICAgdm9pZCB1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCk7Ci0KLSAgICAvLyBJbXBs
ZW1lbnRlZCBpbiBnZW5lcmF0ZWQgV2ViSW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAotICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlk
Q2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGUgeyBjbG9zZSgpOyB9Ci0gICAgdm9pZCBk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKSBvdmVycmlkZSB7IGNsb3NlKCk7IH0KLQotICAg
IHZvaWQgc2hvdygpOwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIHZvaWQgb3BlbkluTmV3VGFi
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKLQotICAgIHZvaWQgY2FuQXR0YWNoV2luZG93KGJv
b2wmIHJlc3VsdCk7Ci0KLSAgICB2b2lkIHNob3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVz
b3VyY2VzKCk7Ci0KLSAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIpOwotCi0gICAgdm9pZCBzZXRBdHRhY2hlZChib29sIGF0dGFjaGVkKSB7
IG1fYXR0YWNoZWQgPSBhdHRhY2hlZDsgfQotCi0gICAgdm9pZCBldmFsdWF0ZVNjcmlwdEZvclRl
c3QoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwotCi0gICAgdm9pZCBzdGFydFBhZ2VQcm9maWxpbmco
KTsKLSAgICB2b2lkIHN0b3BQYWdlUHJvZmlsaW5nKCk7Ci0KLSAgICB2b2lkIHN0YXJ0RWxlbWVu
dFNlbGVjdGlvbigpOwotICAgIHZvaWQgc3RvcEVsZW1lbnRTZWxlY3Rpb24oKTsKLSAgICB2b2lk
IGVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgdGltZWxpbmVSZWNvcmRp
bmdDaGFuZ2VkKGJvb2wpOwotICAgIHZvaWQgc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZE92
ZXJyaWRlKE9wdGlvbmFsPGJvb2w+KTsKLQotICAgIHZvaWQgc2V0RnJvbnRlbmRDb25uZWN0aW9u
KElQQzo6QXR0YWNobWVudCk7Ci0KLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIHsgY2xv
c2UoKTsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7
Ci0KLSAgICBleHBsaWNpdCBXZWJJbnNwZWN0b3IoV2ViUGFnZSopOwotICAgIHZpcnR1YWwgfldl
Ykluc3BlY3RvcigpOwotCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKLQotICAgIC8vIENh
bGxlZCBmcm9tIFdlYkluc3BlY3RvckNsaWVudAotICAgIHZvaWQgb3BlbkxvY2FsSW5zcGVjdG9y
RnJvbnRlbmQoYm9vbCB1bmRlclRlc3QpOwotICAgIHZvaWQgY2xvc2VGcm9udGVuZENvbm5lY3Rp
b24oKTsKLQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7Ci0KLSAgICB2b2lkIHdoZW5Gcm9udGVu
ZENvbm5lY3Rpb25Fc3RhYmxpc2hlZChGdW5jdGlvbjx2b2lkKCk+JiYpOwotCi0gICAgV2ViUGFn
ZSogbV9wYWdlOwotCi0gICAgUmVmUHRyPElQQzo6Q29ubmVjdGlvbj4gbV9mcm9udGVuZENvbm5l
Y3Rpb247Ci0gICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZnJvbnRlbmRDb25uZWN0aW9u
QWN0aW9uczsKLQotICAgIGJvb2wgbV9hdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3By
ZXZpb3VzQ2FuQXR0YWNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVj
dG9yLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWY3NGI1ZTZi
MDQzMGI2YjBjYTNiZTI2MGY1ZmZhYmVjZDY1NDg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3Rvci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMg
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4g
V2ViSW5zcGVjdG9yIHsKLSAgICBTaG93KCkKLSAgICBDbG9zZSgpCi0KLSAgICBTZXRBdHRhY2hl
ZChib29sIGF0dGFjaGVkKQotCi0gICAgU2hvd0NvbnNvbGUoKQotICAgIFNob3dSZXNvdXJjZXMo
KQotCi0gICAgU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
ciBmcmFtZUlkZW50aWZpZXIpCi0KLSAgICBPcGVuSW5OZXdUYWIoU3RyaW5nIHVybCkKLQotICAg
IFN0YXJ0UGFnZVByb2ZpbGluZygpCi0gICAgU3RvcFBhZ2VQcm9maWxpbmcoKQotCi0gICAgU3Rh
cnRFbGVtZW50U2VsZWN0aW9uKCkKLSAgICBTdG9wRWxlbWVudFNlbGVjdGlvbigpCi0KLSAgICBT
ZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVy
KQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxODllOTgyNWFkNDk0NzBlZDYyNDM1ZTg2ZDU5ZGY2MGYz
OGFlODIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNw
YXRjaGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250ZW5k
QVBJRGlzcGF0Y2hlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1NjcmlwdFN0YXRlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJJ
bnNwZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OldlYkluc3BlY3RvckZyb250ZW5kQVBJRGlz
cGF0Y2hlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi17Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyOjpyZXNldCgpCi17Ci0gICAgbV9mcm9u
dGVuZExvYWRlZCA9IGZhbHNlOwotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0gICAgbV9xdWV1
ZS5jbGVhcigpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6
ZnJvbnRlbmRMb2FkZWQoKQotewotICAgIG1fZnJvbnRlbmRMb2FkZWQgPSB0cnVlOwotCi0gICAg
ZXZhbHVhdGVRdWV1ZWRFeHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6c3VzcGVuZCgpCi17Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmRMb2Fk
ZWQpOwotICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwotICAgIEFTU0VSVChtX3F1ZXVlLmlzRW1w
dHkoKSk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRBUElEaXNwYXRjaGVyOjp1bnN1c3BlbmQoKQotewotICAgIEFTU0VSVChtX3N1c3Bl
bmRlZCk7Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgZXZhbHVhdGVRdWV1ZWRF
eHByZXNzaW9ucygpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCkKLXsKLSAgICBldmFsdWF0
ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3Bh
dGNoKFtcIiIsIGNvbW1hbmQsICJcIl0pIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9u
KG1ha2VTdHJpbmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtcIiIsIGNvbW1hbmQs
ICJcIiwgXCIiLCBhcmd1bWVudCwgIlwiXSkiKSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyOjpkaXNwYXRjaENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
LCBib29sIGFyZ3VtZW50KQotewotICAgIGV2YWx1YXRlT3JRdWV1ZUV4cHJlc3Npb24obWFrZVN0
cmluZygiSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2goW1wiIiwgY29tbWFuZCwgIlwiLCAi
LCBhcmd1bWVudCA/ICJ0cnVlIiA6ICJmYWxzZSIsICJdKSIpKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZEFQSURpc3BhdGNoZXI6OmRpc3BhdGNoTWVzc2FnZUFzeW5jKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBldmFsdWF0ZU9yUXVldWVFeHByZXNzaW9uKG1ha2VTdHJp
bmcoIkluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoTWVzc2FnZUFzeW5jKCIsIG1lc3NhZ2Us
ICIpIikpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZh
bHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCi17Ci0gICAg
aWYgKCFtX2Zyb250ZW5kTG9hZGVkIHx8IG1fc3VzcGVuZGVkKSB7Ci0gICAgICAgIG1fcXVldWUu
YXBwZW5kKGV4cHJlc3Npb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KG1fcXVldWUuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcGFnZS5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS5zY3JpcHQoKS5pc1BhdXNlZCgpKTsKLSAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkuc2NyaXB0KCkuZXhlY3V0ZVNjcmlwdElnbm9yaW5nRXhjZXB0aW9uKGV4cHJlc3Np
b24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlcjo6ZXZhbHVh
dGVRdWV1ZWRFeHByZXNzaW9ucygpCi17Ci0gICAgaWYgKG1fcXVldWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiA6IG1fcXVl
dWUpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkuc2Ny
aXB0KCkuaXNQYXVzZWQoKSk7Ci0gICAgICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS5zY3JpcHQoKS5leGVjdXRlU2NyaXB0SWdub3JpbmdFeGNlcHRpb24oZXhwcmVzc2lvbik7Ci0g
ICAgfQotCi0gICAgbV9xdWV1ZS5jbGVhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
ckZyb250ZW5kQVBJRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGY1YzQyNGUyZDg3NDU0ZDliYjllZTNmMmVhODIyNGY0MWU0MWE3MjUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNz
IFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgV2ViSW5z
cGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyKFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgcmVzZXQo
KTsKLSAgICB2b2lkIGZyb250ZW5kTG9hZGVkKCk7Ci0KLSAgICB2b2lkIHN1c3BlbmQoKTsKLSAg
ICB2b2lkIHVuc3VzcGVuZCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbW1hbmQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kKTsKLSAgICB2b2lkIGRpc3BhdGNoQ29tbWFuZChjb25zdCBTdHJpbmcmIGNv
bW1hbmQsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOwotICAgIHZvaWQgZGlzcGF0Y2hDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBhcmd1bWVudCk7Ci0gICAgdm9pZCBkaXNwYXRj
aE1lc3NhZ2VBc3luYyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIHZv
aWQgZXZhbHVhdGVPclF1ZXVlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGV2
YWx1YXRlUXVldWVkRXhwcmVzc2lvbnMoKTsKLQotICAgIFdlYlBhZ2UmIG1fcGFnZTsKLSAgICBE
ZXF1ZTxTdHJpbmc+IG1fcXVldWU7Ci0gICAgYm9vbCBtX2Zyb250ZW5kTG9hZGVkIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
SW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxNzg1MWY2ODc5N2U4OTdmN2QyMDkzYzFkYWQ0NjA4OTJh
MjdmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRj
aGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hl
ci5oIgotCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlck1lc3NhZ2Vz
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nv
bW1vblZNLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotUmVmPFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI+IFdlYkluc3BlY3Rvcklu
dGVycnVwdERpc3BhdGNoZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcik7Ci19Ci0KLVdlYkluc3BlY3RvckludGVy
cnVwdERpc3BhdGNoZXI6OldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKQotICAgIDog
bV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyIikpCi17Ci19Ci0KLVdlYkluc3BlY3RvckludGVycnVwdERpc3Bh
dGNoZXI6On5XZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCkKLXsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgY29ubmVjdGlvbi0+YWRkV29ya1F1ZXVl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcXVldWUuZ2V0KCksIHRoaXMpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXI6Om5vdGlmeU5lZWREZWJ1Z2dlckJyZWFr
KCkKLXsKLSAgICAvLyBJZiB0aGUgd2ViIHByb2Nlc3MgaGFzIG5vdCBiZWVuIGZ1bGx5IGluaXRp
YWxpemVkIHlldCwgdGhlbiB0aGVyZQotICAgIC8vIGlzIG5vIFZNIHRvIGJlIG5vdGlmaWVkIGFu
ZCB0aHVzIG5vIGluZmluaXRlIGxvb3AgdG8gYnJlYWsuIEJhaWwgb3V0LgotICAgIGlmICghV2Vi
Q29yZTo6Y29tbW9uVk1Pck51bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNDOjpWTSYg
dm0gPSBXZWJDb3JlOjpjb21tb25WTSgpOwotICAgIHZtLm5vdGlmeU5lZWREZWJ1Z2dlckJyZWFr
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGY2YmQwMjBhMjM1YTQz
OWFmMDAzYjVmNjA1NDIzOWQyZWNjMjY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3Bl
Y3RvckludGVycnVwdERpc3BhdGNoZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNo
ZXIgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcj4g
Y3JlYXRlKCk7Ci0gICAgfldlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIoKTsKLSAgICAK
LSAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiopOwotICAgIAot
cHJpdmF0ZToKLSAgICBXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyKCk7Ci0gICAgLy8g
SVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIuCi0gICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
LSAgICAKLSAgICB2b2lkIG5vdGlmeU5lZWREZWJ1Z2dlckJyZWFrKCk7Ci0gICAgCi0gICAgUmVm
PFdvcmtRdWV1ZT4gbV9xdWV1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJy
dXB0RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkluc3BlY3RvckludGVycnVwdERpc3BhdGNoZXIubWVzc2FnZXMuaW4KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NzBlNTJiNzNiOGEwNTRjZThlMWNjOWM4NDBlNGU3NzQ4
OGYyZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotbWVzc2FnZXMgLT4gV2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlciB7Ci0gICAgTm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUku
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmFhNmY2ZWRlNWRkZGEwYTE0YWJk
ZTJlYzBjMmJiYWFmYzU1ZWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJ
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yVUkuaCIKLQotI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3Rvck1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUg
IldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9D
ZXJ0aWZpY2F0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZWY8V2ViSW5zcGVjdG9yVUk+
IFdlYkluc3BlY3RvclVJOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJJbnNwZWN0b3JVSShwYWdlKSk7Ci19Ci0KLVdlYkluc3BlY3RvclVJOjpX
ZWJJbnNwZWN0b3JVSShXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBt
X2Zyb250ZW5kQVBJRGlzcGF0Y2hlcihwYWdlKQotICAgICwgbV9kZWJ1Z2dhYmxlSW5mbyhEZWJ1
Z2dhYmxlSW5mb0RhdGE6OmVtcHR5KCkpCi17Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5zZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHRydWUpOwotICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SW1hZ2VCaXRtYXBF
bmFibGVkKHRydWUpOwotI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJHTDJFbmFibGVkKHRydWUpOwotI2VuZGlmCi19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmVzdGFibGlzaENvbm5lY3Rpb24oV2ViUGFnZVByb3h5
SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmllciwgY29uc3QgRGVidWdnYWJsZUluZm9E
YXRhJiBkZWJ1Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGluc3BlY3Rpb25M
ZXZlbCkKLXsKLSAgICBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyID0gaW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXI7Ci0gICAgbV9kZWJ1Z2dhYmxlSW5mbyA9IGRlYnVnZ2FibGVJbmZvOwotICAgIG1f
dW5kZXJUZXN0ID0gdW5kZXJUZXN0OwotICAgIG1faW5zcGVjdGlvbkxldmVsID0gaW5zcGVjdGlv
bkxldmVsOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIucmVzZXQoKTsKLQotICAgIG1f
ZnJvbnRlbmRDb250cm9sbGVyID0gJm1fcGFnZS5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCk7Ci0gICAgbV9mcm9udGVuZENvbnRyb2xsZXItPnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KHRoaXMpOwotCi0gICAgdXBkYXRlQ29ubmVjdGlvbigpOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclVJOjp1cGRhdGVDb25uZWN0aW9uKCkKLXsKLSAgICBpZiAobV9iYWNrZW5kQ29ubmVjdGlv
bikgewotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7Ci0gICAgICAg
IG1fYmFja2VuZENvbm5lY3Rpb24gPSBudWxscHRyOwotICAgIH0KLQotI2lmIFVTRShVTklYX0RP
TUFJTl9TT0NLRVRTKQotICAgIElQQzo6Q29ubmVjdGlvbjo6U29ja2V0UGFpciBzb2NrZXRQYWly
ID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVQbGF0Zm9ybUNvbm5lY3Rpb24oKTsKLSAgICBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIoc29ja2V0UGFpci5z
ZXJ2ZXIpOwotICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChzb2NrZXRQ
YWlyLmNsaWVudCk7Ci0jZWxpZiBPUyhEQVJXSU4pCi0gICAgbWFjaF9wb3J0X3QgbGlzdGVuaW5n
UG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90
YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZsaXN0ZW5pbmdQb3J0KSAhPSBL
RVJOX1NVQ0NFU1MpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBpZiAobWFjaF9wb3J0X2luc2Vy
dF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0ZW5pbmdQb3J0LCBN
QUNIX01TR19UWVBFX01BS0VfU0VORCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICBDUkFTSCgp
OwotCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
KGxpc3RlbmluZ1BvcnQpOwotICAgIElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9y
dChsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7Ci0jZWxpZiBQTEFURk9S
TShXSU4pCi0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlm
aWVyLCBjb25uQ2xpZW50OwotICAgIElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQW5kQ2xp
ZW50SWRlbnRpZmllcnMoY29ubmVjdGlvbklkZW50aWZpZXIsIGNvbm5DbGllbnQpOwotICAgIElQ
Qzo6QXR0YWNobWVudCBjb25uZWN0aW9uQ2xpZW50UG9ydChjb25uQ2xpZW50KTsKLSNlbHNlCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotI2lmIFVTRShVTklY
X0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhEQVJXSU4pIHx8IFBMQVRGT1JNKFdJTikKLSAgICBtX2Jh
Y2tlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0aW9u
KGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcyk7Ci0gICAgbV9iYWNrZW5kQ29ubmVjdGlvbi0+
b3BlbigpOwotI2VuZGlmCi0KLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0RnJv
bnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25DbGllbnRQb3J0KSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OndpbmRvd09iamVjdENsZWFyZWQo
KQotewotICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKLSAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRp
c2Nvbm5lY3RDbGllbnQoKTsKLQotICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpjcmVhdGUodGhpcywgbV9wYWdlLmNvcmVQYWdlKCkpOwotICAgIG1fZnJvbnRlbmRI
b3N0LT5hZGRTZWxmVG9HbG9iYWxPYmplY3RJbldvcmxkKG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6ZnJvbnRlbmRMb2FkZWQoKQotewotICAgIG1f
ZnJvbnRlbmRBUElEaXNwYXRjaGVyLmZyb250ZW5kTG9hZGVkKCk7Ci0KLSAgICAvLyBUZWxsIHRo
ZSBuZXcgZnJvbnRlbmQgYWJvdXQgdGhlIGN1cnJlbnQgZG9jayBzdGF0ZS4gSWYgdGhlIHdpbmRv
dyBvYmplY3QKLSAgICAvLyBjbGVhcmVkIGR1ZSB0byBhIHJlbG9hZCwgdGhlIGRvY2sgc3RhdGUg
d29uJ3QgYmUgcmVzZW50IGZyb20gVUlQcm9jZXNzLgotICAgIHNldERvY2tpbmdVbmF2YWlsYWJs
ZShtX2RvY2tpbmdVbmF2YWlsYWJsZSk7Ci0gICAgc2V0RG9ja1NpZGUobV9kb2NrU2lkZSk7Ci0g
ICAgc2V0SXNWaXNpYmxlKG1faXNWaXNpYmxlKTsKLQotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpGcm9udGVuZExvYWRlZCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLQot
ICAgIGJyaW5nVG9Gcm9udCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydFdpbmRv
d0RyYWcoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTdGFydFdpbmRvd0Ry
YWcoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIEZsb2F0UmVjdCBmcmFt
ZVJlY3QgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Y2hyb21lKCkud2luZG93UmVjdCgpOwotICAgIGZy
YW1lUmVjdC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5jaHJvbWUoKS5zZXRX
aW5kb3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmJyaW5nVG9G
cm9udCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6
Y2xvc2VXaW5kb3coKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9z
ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLQotICAgIGlmIChtX2JhY2tlbmRDb25u
ZWN0aW9uKSB7Ci0gICAgICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKLSAg
ICAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1f
ZnJvbnRlbmRDb250cm9sbGVyKSB7Ci0gICAgICAgIG1fZnJvbnRlbmRDb250cm9sbGVyLT5zZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChudWxscHRyKTsKLSAgICAgICAgbV9mcm9udGVuZENvbnRy
b2xsZXIgPSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKLSAgICAg
ICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKLQotICAgIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIgPSB7IH07Ci0gICAgbV91bmRlclRlc3QgPSBmYWxzZTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6cmVvcGVuKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6UmVvcGVuKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12b2lkIFdl
Ykluc3BlY3RvclVJOjpyZXNldFN0YXRlKCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6UmVzZXRTdGF0ZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotV2Vi
Q29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiBXZWJJbnNwZWN0b3JVSTo6dXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS5jb3Jl
UGFnZSgpLT51c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yVUk6OnJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQotewotICAgIGF1dG8m
IHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKLSAgICBzd2l0Y2ggKHNpZGUp
IHsKLSAgICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIERvY2tTaWRlOjpSaWdodDoKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoUmln
aHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRG9ja1NpZGU6OkxlZnQ6Ci0gICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaExlZnQoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9j
a1NpZGU6OkJvdHRvbToKLSAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCi17Ci0gICAgQVND
SUlMaXRlcmFsIHNpZGVTdHJpbmcgeyBBU0NJSUxpdGVyYWw6Om51bGwoKSB9OwotCi0gICAgc3dp
dGNoIChzaWRlKSB7Ci0gICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0gICAgICAgIHNpZGVT
dHJpbmcgPSAidW5kb2NrZWQiX3M7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBEb2NrU2lk
ZTo6UmlnaHQ6Ci0gICAgICAgIHNpZGVTdHJpbmcgPSAicmlnaHQiX3M7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBEb2NrU2lkZTo6TGVmdDoKLSAgICAgICAgc2lkZVN0cmluZyA9ICJsZWZ0
Il9zOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKLSAgICAg
ICAgc2lkZVN0cmluZyA9ICJib3R0b20iX3M7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IG1fZG9ja1NpZGUgPSBzaWRlOwotCi0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0
Y2hDb21tYW5kKCJzZXREb2NrU2lkZSJfcywgU3RyaW5nKHNpZGVTdHJpbmcpKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja2luZ1VuYXZhaWxhYmxlKGJvb2wgdW5hdmFpbGFibGUp
Ci17Ci0gICAgbV9kb2NraW5nVW5hdmFpbGFibGUgPSB1bmF2YWlsYWJsZTsKLQotICAgIG1fZnJv
bnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RG9ja2luZ1VuYXZhaWxhYmxl
Il9zLCB1bmF2YWlsYWJsZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldElzVmlzaWJs
ZShib29sIHZpc2libGUpCi17Ci0gICAgbV9pc1Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAgbV9m
cm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJzZXRJc1Zpc2libGUiX3MsIHZp
c2libGUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OlNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRo
KHVuc2lnbmVkIHdpZHRoKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZVNoZWV0UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldFNoZWV0UmVjdChy
ZWN0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
VUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBpZiAobV9iYWNrZW5k
Q29ubmVjdGlvbikgewotICAgICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6Ok9wZW5Jbk5ld1RhYih1cmwpLCAwKTsKLSAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nSW5zcGVjdGVkUGFnZVRvRnJvbnQoKSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7Ci0gICAgfQotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzYXZl
KGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKLXsKLSAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwg
Zm9yY2VTYXZlQXMpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6YXBwZW5kKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RG
OjpTdHJpbmcmIGNvbnRlbnQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkFw
cGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQot
Ci12b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0ZWRV
UkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q2VydGlmaWNhdGUoY29uc3QgQ2VydGlmaWNhdGVJbmZv
JiBjZXJ0aWZpY2F0ZUluZm8pCi17Ci0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNo
b3dDZXJ0aWZpY2F0ZShjZXJ0aWZpY2F0ZUluZm8pLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKLX0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfVEVMRU1FVFJZKQotYm9vbCBXZWJJbnNwZWN0
b3JVSTo6c3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpCi17Ci0gICAgcmV0dXJuIG1fcGFnZS5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLmRpYWdub3N0aWNMb2dnaW5nRW5hYmxlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclVJOjpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUsIGNvbnN0IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZURpY3Rpb25hcnkmIGRp
Y3Rpb25hcnkpCi17Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50KCkubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWVEaWN0aW9uYXJ5KGV2ZW50TmFtZSwg
IldlYiBJbnNwZWN0b3IgRnJvbnRlbmQgRGlhZ25vc3RpY3MiX3MsIGRpY3Rpb25hcnksIFNob3Vs
ZFNhbXBsZTo6Tm8pOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzZXREaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZShib29sIGF2YWlsYWJsZSkKLXsKLSAgICAvLyBJbnNwZWN0b3IncyBkaWFn
bm9zdGljIGxvZ2dpbmcgY2xpZW50IHNob3VsZCBuZXZlciBiZSB1c2VkIHVubGVzcyB0aGUgcGFn
ZSBzZXR0aW5nIGlzIGFsc28gZW5hYmxlZC4KLSAgICBBU1NFUlQoIWF2YWlsYWJsZSB8fCBzdXBw
b3J0c0RpYWdub3N0aWNMb2dnaW5nKCkpOwotICAgIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUgPSBhdmFpbGFibGU7Ci0KLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENv
bW1hbmQoInNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIl9zLCBtX2RpYWdub3N0aWNMb2dn
aW5nQXZhaWxhYmxlKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzaG93Q29u
c29sZSgpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIuZGlzcGF0Y2hDb21tYW5kKCJz
aG93Q29uc29sZSJfcyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dSZXNvdXJjZXMo
KQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2hvd1Jl
c291cmNlcyJfcyk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dNYWluUmVzb3VyY2VG
b3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcikKLXsKLSAgICBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSJf
cywgZnJhbWVJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6c3RhcnRQYWdl
UHJvZmlsaW5nKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1h
bmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywgdHJ1ZSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnN0b3BQYWdlUHJvZmlsaW5nKCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlz
cGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoInNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCJfcywg
ZmFsc2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpzdGFydEVsZW1lbnRTZWxlY3Rpb24o
KQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2V0RWxl
bWVudFNlbGVjdGlvbkVuYWJsZWQiX3MsIHRydWUpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclVJ
OjpzdG9wRWxlbWVudFNlbGVjdGlvbigpCi17Ci0gICAgbV9mcm9udGVuZEFQSURpc3BhdGNoZXIu
ZGlzcGF0Y2hDb21tYW5kKCJzZXRFbGVtZW50U2VsZWN0aW9uRW5hYmxlZCJfcywgZmFsc2UpOwot
fQotCi12b2lkIFdlYkluc3BlY3RvclVJOjpkaWRTYXZlKGNvbnN0IFN0cmluZyYgdXJsKQotewot
ICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVyLmRpc3BhdGNoQ29tbWFuZCgic2F2ZWRVUkwiX3Ms
IHVybCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OmRpZEFwcGVuZChjb25zdCBTdHJpbmcm
IHVybCkKLXsKLSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci5kaXNwYXRjaENvbW1hbmQoImFw
cGVuZGVkVG9VUkwiX3MsIHVybCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yVUk6OnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgbV9mcm9udGVuZEFQ
SURpc3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlQXN5bmMobWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yVUk6OnBhZ2VQYXVzZWQoKQotewotICAgIG1fZnJvbnRlbmRBUElEaXNwYXRjaGVy
LnN1c3BlbmQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JVSTo6cGFnZVVucGF1c2VkKCkKLXsK
LSAgICBtX2Zyb250ZW5kQVBJRGlzcGF0Y2hlci51bnN1c3BlbmQoKTsKLX0KLQotdm9pZCBXZWJJ
bnNwZWN0b3JVSTo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZW5kTWVzc2FnZVRvQmFja2VuZCht
ZXNzYWdlKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7Ci19Ci0KLVN0cmluZyBXZWJJbnNw
ZWN0b3JVSTo6dGFyZ2V0UGxhdGZvcm1OYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1
Z2dhYmxlSW5mby50YXJnZXRQbGF0Zm9ybU5hbWU7Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JV
STo6dGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWJ1Z2dhYmxl
SW5mby50YXJnZXRCdWlsZFZlcnNpb247Ci19Ci0KLVN0cmluZyBXZWJJbnNwZWN0b3JVSTo6dGFy
Z2V0UHJvZHVjdFZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2RlYnVnZ2FibGVJbmZv
LnRhcmdldFByb2R1Y3RWZXJzaW9uOwotfQotCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLWJvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1TdHJp
bmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0jZW5kaWYgLy8g
IVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yVUkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM5ZjIx
YzliNjIwYzNlZjZmMjUwN2RkMTYyMDYwZGE0OWI1NTM5Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3JVSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2lu
Y2x1ZGUgIkRlYnVnZ2FibGVJbmZvRGF0YS5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvckZyb250
ZW5kQVBJRGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckRlYnVnZ2FibGVUeXBlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7Ci1jbGFzcyBDZXJ0aWZpY2F0ZUluZm87Ci1jbGFzcyBGbG9hdFJlY3Q7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBXZWJJ
bnNwZWN0b3JVSSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkluc3BlY3RvclVJPiwgcHJpdmF0ZSBJ
UEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYkluc3BlY3RvclVJPiBjcmVhdGUo
V2ViUGFnZSYpOwotCi0gICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYkluc3BlY3Rv
clVJTWVzc2FnZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudAotICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJp
ZGUgeyAvKiBEbyBub3RoaW5nLCB0aGUgaW5zcGVjdGVkIHBhZ2UgcHJvY2VzcyBtYXkgaGF2ZSBj
cmFzaGVkIGFuZCBtYXkgYmUgZ2V0dGluZyByZXBsYWNlZC4gKi8gfQotICAgIHZvaWQgZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNl
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkgb3ZlcnJpZGUgeyBjbG9zZVdpbmRvdygpOyB9Ci0KLSAg
ICAvLyBDYWxsZWQgYnkgV2ViSW5zcGVjdG9yVUkgbWVzc2FnZXMKLSAgICB2b2lkIGVzdGFibGlz
aENvbm5lY3Rpb24oV2ViUGFnZVByb3h5SWRlbnRpZmllciBpbnNwZWN0ZWRQYWdlSWRlbnRpZmll
ciwgY29uc3QgRGVidWdnYWJsZUluZm9EYXRhJiwgYm9vbCB1bmRlclRlc3QsIHVuc2lnbmVkIGlu
c3BlY3Rpb25MZXZlbCk7Ci0gICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uKCk7Ci0KLSAgICB2b2lk
IHNob3dDb25zb2xlKCk7Ci0gICAgdm9pZCBzaG93UmVzb3VyY2VzKCk7Ci0KLSAgICB2b2lkIHNo
b3dNYWluUmVzb3VyY2VGb3JGcmFtZShjb25zdCBTdHJpbmcmIGZyYW1lSWRlbnRpZmllcik7Ci0K
LSAgICB2b2lkIHN0YXJ0UGFnZVByb2ZpbGluZygpOwotICAgIHZvaWQgc3RvcFBhZ2VQcm9maWxp
bmcoKTsKLQotICAgIHZvaWQgc3RhcnRFbGVtZW50U2VsZWN0aW9uKCk7Ci0gICAgdm9pZCBzdG9w
RWxlbWVudFNlbGVjdGlvbigpOwotCi0gICAgdm9pZCBhdHRhY2hlZEJvdHRvbSgpIHsgc2V0RG9j
a1NpZGUoRG9ja1NpZGU6OkJvdHRvbSk7IH0KLSAgICB2b2lkIGF0dGFjaGVkUmlnaHQoKSB7IHNl
dERvY2tTaWRlKERvY2tTaWRlOjpSaWdodCk7IH0KLSAgICB2b2lkIGF0dGFjaGVkTGVmdCgpIHsg
c2V0RG9ja1NpZGUoRG9ja1NpZGU6OkxlZnQpOyB9Ci0gICAgdm9pZCBkZXRhY2hlZCgpIHsgc2V0
RG9ja1NpZGUoRG9ja1NpZGU6OlVuZG9ja2VkKTsgfQotCi0gICAgdm9pZCBzZXREb2NrU2lkZShE
b2NrU2lkZSk7Ci0gICAgdm9pZCBzZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCk7Ci0KLSAgICB2
b2lkIHNldElzVmlzaWJsZShib29sKTsKLQotICAgIHZvaWQgZGlkU2F2ZShjb25zdCBTdHJpbmcm
IHVybCk7Ci0gICAgdm9pZCBkaWRBcHBlbmQoY29uc3QgU3RyaW5nJiB1cmwpOwotCi0gICAgdm9p
ZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJik7Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX1RFTEVNRVRSWSkKLSAgICB2b2lkIHNldERpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxl
KGJvb2wgYXZhbGlhYmxlKTsKLSNlbmRpZgotCi0gICAgLy8gV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQKLSAgICB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZyb250ZW5kTG9hZGVkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHN0YXJ0V2luZG93
RHJhZygpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkp
IG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlbW90ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBTdHJpbmcgYmFja2VuZENvbW1hbmRzVVJMKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KLSAgICBJbnNwZWN0b3I6OkRlYnVnZ2FibGVUeXBlIGRlYnVnZ2FibGVUeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSW5zcGVjdG9yOjpEZWJ1Z2dhYmxlVHlwZTo6V2ViUGFnZTsg
fQotICAgIFN0cmluZyB0YXJnZXRQbGF0Zm9ybU5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBT
dHJpbmcgdGFyZ2V0QnVpbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHRh
cmdldFByb2R1Y3RWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCB0YXJnZXRJc1Np
bXVsYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdW5zaWduZWQgaW5z
cGVjdGlvbkxldmVsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pbnNwZWN0aW9uTGV2ZWw7
IH0KLQotICAgIHZvaWQgYnJpbmdUb0Zyb250KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZVdp
bmRvdygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVvcGVuKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZXNldFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHZvaWQgcmVxdWVzdFNldERvY2tTaWRlKERvY2tTaWRlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBjaGFuZ2VTaGVldFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIG9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkgb3ZlcnJpZGU7Ci0K
LSAgICBib29sIGNhblNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNhdmUoY29uc3QgV1RGOjpT
dHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2Rl
ZCwgYm9vbCBmb3JjZVNhdmVBcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgV1RG
OjpTdHJpbmcmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2hvd0NlcnRpZmljYXRlKGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpIG92
ZXJyaWRlOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgYm9vbCBzdXBw
b3J0c0RpYWdub3N0aWNMb2dnaW5nKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBkaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlhZ25vc3RpY0xvZ2dpbmdBdmFp
bGFibGU7IH0KLSAgICB2b2lkIGxvZ0RpYWdub3N0aWNFdmVudChjb25zdCBXVEY6OlN0cmluZyYg
ZXZlbnROYW1lLCBjb25zdCBXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVE
aWN0aW9uYXJ5Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb0Jh
Y2tlbmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBhZ2VQYXVzZWQoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBhZ2VVbnBhdXNlZCgpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBp
c1VuZGVyVGVzdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdW5kZXJUZXN0OyB9Ci0KLXByaXZhdGU6
Ci0gICAgZXhwbGljaXQgV2ViSW5zcGVjdG9yVUkoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYg
bV9wYWdlOwotICAgIFdlYkluc3BlY3RvckZyb250ZW5kQVBJRGlzcGF0Y2hlciBtX2Zyb250ZW5k
QVBJRGlzcGF0Y2hlcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0
PiBtX2Zyb250ZW5kSG9zdDsKLSAgICBSZWZQdHI8SVBDOjpDb25uZWN0aW9uPiBtX2JhY2tlbmRD
b25uZWN0aW9uOwotCi0gICAgLy8gS2VlcCBhIHBvaW50ZXIgdG8gdGhlIGZyb250ZW5kJ3MgaW5z
cGVjdG9yIGNvbnRyb2xsZXIgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaAotICAgIC8vIGNvcmVQ
YWdlKCksIHNpbmNlIHdlIG1heSBuZWVkIGl0IGFmdGVyIHRoZSBmcm9udGVuZCdzIHBhZ2UgaGFz
IHN0YXJ0ZWQgZGVzdHJ1Y3Rpb24uCi0gICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciog
bV9mcm9udGVuZENvbnRyb2xsZXIgeyBudWxscHRyIH07Ci0KLSAgICBXZWJQYWdlUHJveHlJZGVu
dGlmaWVyIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXI7Ci0gICAgYm9vbCBtX3VuZGVyVGVzdCB7
IGZhbHNlIH07Ci0gICAgRGVidWdnYWJsZUluZm9EYXRhIG1fZGVidWdnYWJsZUluZm87Ci0gICAg
Ym9vbCBtX2RvY2tpbmdVbmF2YWlsYWJsZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzVmlzaWJs
ZSB7IGZhbHNlIH07Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9URUxFTUVUUlkpCi0gICAgYm9vbCBt
X2RpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0gICAgRG9j
a1NpZGUgbV9kb2NrU2lkZSB7IERvY2tTaWRlOjpVbmRvY2tlZCB9OwotICAgIHVuc2lnbmVkIG1f
aW5zcGVjdGlvbkxldmVsIHsgMSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
clVJLm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGYxMzg1ZDQ4
OTU1NjI2OWJhZmE1N2MwNzVlYjRkYWYxM2UxNjM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3RvclVJLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0j
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAotIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAt
PiBXZWJJbnNwZWN0b3JVSSB7Ci0gICAgRXN0YWJsaXNoQ29ubmVjdGlvbihXZWJLaXQ6OldlYlBh
Z2VQcm94eUlkZW50aWZpZXIgaW5zcGVjdGVkUGFnZUlkZW50aWZpZXIsIHN0cnVjdCBXZWJLaXQ6
OkRlYnVnZ2FibGVJbmZvRGF0YSBkZWJ1Z2dhYmxlSW5mbywgYm9vbCB1bmRlclRlc3QsIHVuc2ln
bmVkIGluc3BlY3Rpb25MZXZlbCkKLSAgICBVcGRhdGVDb25uZWN0aW9uKCkKLQotICAgIEF0dGFj
aGVkQm90dG9tKCkKLSAgICBBdHRhY2hlZFJpZ2h0KCkKLSAgICBBdHRhY2hlZExlZnQoKQotICAg
IERldGFjaGVkKCkKLSAgICBTZXREb2NraW5nVW5hdmFpbGFibGUoYm9vbCB1bmF2YWlsYWJsZSkK
LSAgICBTZXRJc1Zpc2libGUoYm9vbCB2aXNpYmxlKQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9U
RUxFTUVUUlkpCi0gICAgU2V0RGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoYm9vbCBhdmFpbGFi
bGUpCi0jZW5kaWYKLQotICAgIFNob3dDb25zb2xlKCkKLSAgICBTaG93UmVzb3VyY2VzKCkKLQot
ICAgIFNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShTdHJpbmcgZnJhbWVJZGVudGlmaWVyKQotCi0g
ICAgU3RhcnRQYWdlUHJvZmlsaW5nKCkKLSAgICBTdG9wUGFnZVByb2ZpbGluZygpCi0KLSAgICBT
dGFydEVsZW1lbnRTZWxlY3Rpb24oKQotICAgIFN0b3BFbGVtZW50U2VsZWN0aW9uKCkKLQotICAg
IERpZFNhdmUoU3RyaW5nIHVybCkKLSAgICBEaWRBcHBlbmQoU3RyaW5nIHVybCkKLQotICAgIFNl
bmRNZXNzYWdlVG9Gcm9udGVuZChTdHJpbmcgbWVzc2FnZSkKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdldC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MGY2ZmQ1MjA5NmE1ZGNhOTAxZWE3
MGEzNzU1ZjE0ZDZiNGEwZmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VJbnNwZWN0b3JUYXJnZXQuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2UuaCIK
LSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0OjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KFdlYlBh
Z2UmIHBhZ2UpCi0gICAgOiBtX3BhZ2UocGFnZSkKLXsKLX0KLQotU3RyaW5nIFdlYlBhZ2VJbnNw
ZWN0b3JUYXJnZXQ6OmlkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiB0b1RhcmdldElE
KG1fcGFnZS5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXQ6
OmNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIGNvbm5l
Y3Rpb25UeXBlKQotewotICAgIGlmIChtX2NoYW5uZWwpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NoYW5uZWwgPSBtYWtlVW5pcXVlPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWw+KG1fcGFnZSwgaWRlbnRpZmllcigpLCBjb25uZWN0aW9uVHlwZSk7Ci0gICAgaWYgKG1fcGFn
ZS5jb3JlUGFnZSgpKQotICAgICAgICBtX3BhZ2UuY29yZVBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLmNvbm5lY3RGcm9udGVuZCgqbV9jaGFubmVsKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0OjpkaXNjb25uZWN0KCkKLXsKLSAgICBpZiAoIW1fY2hhbm5lbCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLmNv
cmVQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQoKm1fY2hh
bm5lbCk7Ci0gICAgbV9jaGFubmVsLnJlc2V0KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3Rv
clRhcmdldDo6c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQotewotICAgIGlmIChtX3BhZ2UuY29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLmNvcmVQYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQobWVz
c2FnZSk7Ci19Ci0KLVN0cmluZyBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Ojp0b1RhcmdldElEKFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygi
cGFnZS0iLCBwYWdlSUQudG9VSW50NjQoKSk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5z
cGVjdG9yVGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
SW5zcGVjdG9yVGFyZ2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYmQ3ZmFk
NWZmOTFhZmQ4NThkYTM0NmFkYmZlZWQ2NDI0YjBiMmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLWNsYXNzIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWw7Ci0KLWNsYXNzIFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXQpOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlBhZ2VJbnNwZWN0b3JU
YXJnZXQoV2ViUGFnZSYpOwotICAgIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0KCkgPSBkZWZhdWx0
OwotCi0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlIHR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGU6OlBhZ2U7IH0KLQotICAg
IFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbm5lY3QoSW5z
cGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2Nvbm5lY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRC
YWNrZW5kKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgc3RhdGljIFN0cmluZyB0b1Rh
cmdldElEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKTsKLQotcHJpdmF0ZToKLSAgICBXZWJQYWdl
JiBtX3BhZ2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9u
dGVuZENoYW5uZWw+IG1fY2hhbm5lbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3Rv
clRhcmdldENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmOTAxN2M0ZWRhZjRiMzY4MDBkZDM5ZDI4OWMwNDdiMWEwZWQ5M2RkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIuaCIKLQot
I2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJv
bnRlbmRDaGFubmVsLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpXZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcihXZWJQYWdlJiBwYWdlKQotICAgIDogbV9wYWdl
KHBhZ2UpCi0gICAgLCBtX3BhZ2VUYXJnZXQocGFnZSkKLXsKLSAgICAvLyBEbyBub3Qgc2VuZCB0
aGUgcGFnZSB0YXJnZXQgdG8gdGhlIFVJUHJvY2VzcywgdGhlIFdlYlBhZ2VQcm94eSB3aWxsIG1h
bmFnZXIgdGhpcyBmb3IgdXMuCi0gICAgbV90YXJnZXRzLnNldChtX3BhZ2VUYXJnZXQuaWRlbnRp
ZmllcigpLCAmbV9wYWdlVGFyZ2V0KTsKLX0KLQotV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRy
b2xsZXI6On5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcigpCi17Ci19Ci0KLXZvaWQg
V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXI6OmFkZFRhcmdldChJbnNwZWN0b3I6Oklu
c3BlY3RvclRhcmdldCYgdGFyZ2V0KQotewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90YXJnZXRz
LnNldCh0YXJnZXQuaWRlbnRpZmllcigpLCAmdGFyZ2V0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgbV9wYWdlLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlSW5zcGVjdG9yVGFyZ2V0KHRhcmdldC5pZGVudGlmaWVy
KCksIHRhcmdldC50eXBlKCkpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29u
dHJvbGxlcjo6cmVtb3ZlVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0JiB0YXJnZXQp
Ci17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSh0YXJnZXQuaWRlbnRpZmllcigpICE9IG1fcGFn
ZVRhcmdldC5pZGVudGlmaWVyKCksICJTaG91bGQgbmV2ZXIgcmVtb3ZlIHRoZSBtYWluIHRhcmdl
dC4iKTsKLQotICAgIG1fcGFnZS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlc3Ryb3lJ
bnNwZWN0b3JUYXJnZXQodGFyZ2V0LmlkZW50aWZpZXIoKSkpOwotCi0gICAgbV90YXJnZXRzLnJl
bW92ZSh0YXJnZXQuaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFy
Z2V0Q29udHJvbGxlcjo6Y29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJ
bnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUp
Ci17Ci0gICAgYXV0byB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAo
IXRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5jb25uZWN0KGNvbm5lY3Rp
b25UeXBlKTsKLX0KLQotdm9pZCBXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlcjo6ZGlz
Y29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkKQotewotICAgIGF1dG8gdGFy
Z2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHRhcmdldC0+ZGlzY29ubmVjdCgpOwotfQotCi12b2lkIFdlYlBhZ2VJ
bnNwZWN0b3JUYXJnZXRDb250cm9sbGVyOjpzZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgYXV0byB0
YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChtZXNz
YWdlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRhcmdl
dENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5MzFkYWQxYzk4
MDBmMDNkNzNkNGE3Y2EyNTg4ZGQwMjhhOGYyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlSW5zcGVjdG9yVGFyZ2V0Q29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiV2ViUGFnZUluc3Bl
Y3RvclRhcmdldC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgSW5zcGVjdG9y
VGFyZ2V0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsKLQotY2xh
c3MgV2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJnZXRDb250cm9sbGVy
KFdlYlBhZ2UmKTsKLSAgICB+V2ViUGFnZUluc3BlY3RvclRhcmdldENvbnRyb2xsZXIoKTsKLQot
ICAgIHZvaWQgYWRkVGFyZ2V0KEluc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0Jik7Ci0gICAgdm9p
ZCByZW1vdmVUYXJnZXQoSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXQmKTsKLQotICAgIHZvaWQg
Y29ubmVjdEluc3BlY3Rvcihjb25zdCBTdHJpbmcmIHRhcmdldElkLCBJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUpOwotICAgIHZvaWQgZGlzY29ubmVjdEluc3BlY3Rv
cihjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXRC
YWNrZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0K
LXByaXZhdGU6Ci0gICAgV2ViUGFnZSYgbV9wYWdlOwotICAgIFdlYlBhZ2VJbnNwZWN0b3JUYXJn
ZXQgbV9wYWdlVGFyZ2V0OwotICAgIEhhc2hNYXA8U3RyaW5nLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clRhcmdldCo+IG1fdGFyZ2V0czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUluc3BlY3RvclRh
cmdldEZyb250ZW5kQ2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTFiNWY3MTM3MzNhMDk1MjUyMTIyZjBhMzgwMWY4MmM4YzYwZDNm
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRD
aGFubmVsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250
ZW5kQ2hhbm5lbC5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eU1lc3NhZ2VzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJQYWdlSW5zcGVjdG9y
VGFyZ2V0RnJvbnRlbmRDaGFubmVsOjpXZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFu
bmVsKFdlYlBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIEluc3BlY3Rvcjo6RnJv
bnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSkKLSAgICA6IG1fcGFn
ZShwYWdlKQotICAgICwgbV90YXJnZXRJZCh0YXJnZXRJZCkKLSAgICAsIG1fY29ubmVjdGlvblR5
cGUoY29ubmVjdGlvblR5cGUpCi17Ci19Ci0KLXZvaWQgV2ViUGFnZUluc3BlY3RvclRhcmdldEZy
b250ZW5kQ2hhbm5lbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKLXsKLSAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZW5kTWVzc2Fn
ZVRvSW5zcGVjdG9yRnJvbnRlbmQobV90YXJnZXRJZCwgbWVzc2FnZSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5uZWwuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VJbnNwZWN0b3JUYXJnZXRGcm9udGVuZENoYW5u
ZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE4NGFjNWJkYTI4OTM4MmFlYjJj
ZjUwMTY5YzU5NTY3ZDRjZDJlOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlSW5zcGVj
dG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgV2ViUGFnZUluc3BlY3RvclRhcmdldEZyb250ZW5kQ2hh
bm5lbCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFnZUlu
c3BlY3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbCk7Ci1wdWJsaWM6Ci0gICAgV2ViUGFnZUluc3Bl
Y3RvclRhcmdldEZyb250ZW5kQ2hhbm5lbChXZWJQYWdlJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJ
ZCwgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlKTsKLSAgICB2aXJ0
dWFsIH5XZWJQYWdlSW5zcGVjdG9yVGFyZ2V0RnJvbnRlbmRDaGFubmVsKCkgPSBkZWZhdWx0Owot
Ci1wcml2YXRlOgotICAgIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb25uZWN0aW9uVHlwZTsgfQotICAgIHZvaWQgc2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0KLSAgICBXZWJQYWdl
JiBtX3BhZ2U7Ci0gICAgU3RyaW5nIG1fdGFyZ2V0SWQ7Ci0gICAgSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGUgeyBJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGU6OlJlbW90ZSB9OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYkluc3BlY3RvclVJR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmI0Zjk3ZmU4ZDBjNmY4NTNiNWRlNTFkYmY4MzRiZDIzYmFmNjRkMS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViSW5zcGVjdG9yVUlHdGsuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JVSS5oIgotI2luY2x1ZGUgIlJlbW90
ZVdlYkluc3BlY3RvclVJLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWJvb2wgV2ViSW5zcGVjdG9yVUk6OmNhblNhdmUoKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1TdHJpbmcgV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwo
KSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5z
cGVjdG9yL0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyIpOwotfQot
Ci1TdHJpbmcgUmVtb3RlV2ViSW5zcGVjdG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25z
dAotewotICAgIHJldHVybiBTdHJpbmcoInJlc291cmNlOi8vL29yZy93ZWJraXQvaW5zcGVjdG9y
L0xvY2FsaXphdGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyIpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJJbnNwZWN0b3JVSU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWU1NWYzZDU4YTFhMjhlZTc3ZDUwYzBkYTFjYThmNjA1MDZlYmNhNi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViSW5zcGVjdG9yVUlNYWMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIldlYkluc3BlY3RvclVJLmgiCi0jaW1wb3J0ICJSZW1vdGVXZWJJbnNwZWN0b3JVSS5o
IgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotYm9vbCBXZWJJ
bnNwZWN0b3JVSTo6Y2FuU2F2ZSgpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBT
dHJpbmcgd2ViSW5zcGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBOU0J1bmRs
ZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
Ykluc3BlY3RvclVJIl07Ci0gICAgaWYgKCFidW5kbGUpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLQotICAgIE5TU3RyaW5nICpwYXRoID0gW2J1bmRsZSBwYXRoRm9yUmVzb3VyY2U6QCJsb2Nh
bGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJdOwotICAgIGlmICghcGF0aCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIAotICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBh
dGggaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlU3RyaW5nOwotfQotCi1TdHJpbmcgV2ViSW5zcGVj
dG9yVUk6OmxvY2FsaXplZFN0cmluZ3NVUkwoKSBjb25zdAotewotICAgIHJldHVybiB3ZWJJbnNw
ZWN0b3JVSUxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLX0KLQotU3RyaW5nIFJlbW90ZVdlYkluc3Bl
Y3RvclVJOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gd2ViSW5z
cGVjdG9yVUlMb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYkluc3BlY3RvclVJV2luLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NDExZmRiMTk2ZTIzYTc2ZjFkYmVjYjcxMGY2MGQ4MDRk
MjYwZjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYkluc3BlY3RvclVJV2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclVJLmgiCi0KLSNpbmNsdWRlICJSZW1v
dGVXZWJJbnNwZWN0b3JVSS5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlQnVuZGxlV2lu
Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgV2ViSW5zcGVjdG9yVUk6OmNh
blNhdmUoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIFdlYkluc3BlY3RvclVJ
Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgY29uc3QKLXsKLSNpZiBVU0UoQ0YpCi0gICAgUmV0YWlu
UHRyPENGVVJMUmVmPiBzdHJpbmdzVVJMUmVmID0gYWRvcHRDRihDRkJ1bmRsZUNvcHlSZXNvdXJj
ZVVSTChXZWJDb3JlOjp3ZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoImxvY2FsaXplZFN0cmluZ3MiKSwg
Q0ZTVFIoImpzIiksIENGU1RSKCJXZWJJbnNwZWN0b3JVSSIpKSk7Ci0gICAgcmV0dXJuIENGVVJM
R2V0U3RyaW5nKHN0cmluZ3NVUkxSZWYuZ2V0KCkpOwotI2Vsc2UKLSAgICByZXR1cm4geyB9Owot
I2VuZGlmCi19Ci0KLVN0cmluZyBSZW1vdGVXZWJJbnNwZWN0b3JVSTo6bG9jYWxpemVkU3RyaW5n
c1VSTCgpIGNvbnN0Ci17Ci0jaWYgVVNFKENGKQotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gc3Ry
aW5nc1VSTFJlZiA9IGFkb3B0Q0YoQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoV2ViQ29yZTo6d2Vi
S2l0QnVuZGxlKCksIENGU1RSKCJsb2NhbGl6ZWRTdHJpbmdzIiksIENGU1RSKCJqcyIpLCBDRlNU
UigiV2ViSW5zcGVjdG9yVUkiKSkpOwotICAgIHJldHVybiBDRlVSTEdldFN0cmluZyhzdHJpbmdz
VVJMUmVmLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>